{"version":3,"sources":["webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/epubjs/src/utils/constants.js","webpack:///./node_modules/epubjs/src/utils/core.js","webpack:///./node_modules/lodash/throttle.js","webpack:///./node_modules/epubjs/src/utils/url.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/es5-ext/object/assign/is-implemented.js","webpack:///./node_modules/core-js/modules/web.dom-collections.for-each.js","webpack:///./node_modules/type/plain-function/is.js","webpack:///./node_modules/core-js/internals/array-for-each.js","webpack:///./node_modules/epubjs/src/utils/replacements.js","webpack:///./node_modules/es5-ext/string/#/contains/is-implemented.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/es5-ext/object/valid-callable.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/es5-ext/object/assign/index.js","webpack:///./node_modules/@xmldom/xmldom/lib/index.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/epubjs/src/mapping.js","webpack:///./node_modules/epubjs/src/epub.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/path-webpack/path.js","webpack:///./node_modules/lodash/now.js","webpack:///./node_modules/core-js/modules/es.array.for-each.js","webpack:///./node_modules/node-libs-browser/mock/process.js","webpack:///./node_modules/epubjs/src/utils/hook.js","webpack:///./node_modules/lodash/_trimmedEndIndex.js","webpack:///./node_modules/epubjs/src/contents.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/epubjs/src/utils/path.js","webpack:///./node_modules/type/object/is.js","webpack:///./node_modules/es5-ext/object/is-value.js","webpack:///./node_modules/type/function/is.js","webpack:///./node_modules/es5-ext/object/keys/shim.js","webpack:///./node_modules/core-js/internals/dom-token-list-prototype.js","webpack:///./node_modules/es5-ext/object/keys/index.js","webpack:///./node_modules/jszip/dist/jszip.js","webpack:///./node_modules/marks-pane/lib/svg.js","webpack:///./node_modules/@xmldom/xmldom/lib/conventions.js","webpack:///./node_modules/epubjs/src/layout.js","webpack:///./node_modules/epubjs/src/managers/helpers/snap.js","webpack:///./node_modules/epubjs/src/managers/continuous/index.js","webpack:///./node_modules/lodash/_baseTrim.js","webpack:///./node_modules/epubjs/src/epubcfi.js","webpack:///./node_modules/type/prototype/is.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/type/value/is.js","webpack:///./node_modules/epubjs/src/utils/queue.js","webpack:///./node_modules/es5-ext/object/valid-value.js","webpack:///./node_modules/epubjs/src/themes.js","webpack:///./node_modules/epubjs/src/annotations.js","webpack:///./node_modules/epubjs/src/rendition.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/localforage/dist/localforage.js","webpack:///./node_modules/core-js/internals/array-method-is-strict.js","webpack:///./src/views/readBook.vue?e2ec","webpack:///./node_modules/epubjs/src/index.js","webpack:///src/views/readBook.vue","webpack:///./src/views/readBook.vue?42eb","webpack:///./src/views/readBook.vue","webpack:///./node_modules/epubjs/src/utils/request.js","webpack:///./node_modules/epubjs/src/section.js","webpack:///./node_modules/epubjs/src/spine.js","webpack:///./node_modules/epubjs/src/locations.js","webpack:///./node_modules/epubjs/src/container.js","webpack:///./node_modules/epubjs/src/packaging.js","webpack:///./node_modules/epubjs/src/navigation.js","webpack:///./node_modules/epubjs/src/utils/mime.js","webpack:///./node_modules/epubjs/src/resources.js","webpack:///./node_modules/epubjs/src/pagelist.js","webpack:///./node_modules/epubjs/src/archive.js","webpack:///./node_modules/epubjs/src/store.js","webpack:///./node_modules/epubjs/src/displayoptions.js","webpack:///./node_modules/epubjs/src/book.js","webpack:///./node_modules/marks-pane/lib/marks.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./node_modules/@xmldom/xmldom/lib/dom-parser.js","webpack:///./node_modules/@xmldom/xmldom/lib/entities.js","webpack:///./node_modules/lodash/toNumber.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/event-emitter/index.js","webpack:///./node_modules/marks-pane/lib/events.js","webpack:///./node_modules/epubjs/src/managers/views/iframe.js","webpack:///./node_modules/path-browserify/index.js","webpack:///./node_modules/@xmldom/xmldom/lib/sax.js","webpack:///./src/views/readBook.vue?e69a","webpack:///./node_modules/@xmldom/xmldom/lib/dom.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/epubjs/src/utils/scrolltype.js","webpack:///./node_modules/epubjs/src/managers/helpers/stage.js","webpack:///./node_modules/epubjs/src/managers/helpers/views.js","webpack:///./node_modules/epubjs/src/managers/default/index.js","webpack:///./node_modules/es5-ext/function/noop.js","webpack:///./node_modules/es5-ext/object/keys/is-implemented.js","webpack:///./node_modules/es5-ext/object/normalize-options.js","webpack:///./node_modules/d/index.js","webpack:///./node_modules/es5-ext/object/assign/shim.js","webpack:///./node_modules/es5-ext/string/#/contains/shim.js","webpack:///./node_modules/es5-ext/string/#/contains/index.js","webpack:///./node_modules/core-js/internals/dom-iterables.js","webpack:///./node_modules/lodash/isSymbol.js"],"names":["Symbol","objectProto","Object","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","value","isOwn","call","tag","unmasked","e","result","module","exports","EPUBJS_VERSION","DOM_EVENTS","EVENTS","BOOK","OPEN_FAILED","CONTENTS","EXPAND","RESIZE","SELECTED","SELECTED_RANGE","LINK_CLICKED","LOCATIONS","CHANGED","MANAGERS","RESIZED","ORIENTATION_CHANGE","ADDED","SCROLL","SCROLLED","REMOVED","VIEWS","AXIS","WRITING_MODE","LOAD_ERROR","RENDERED","DISPLAYED","SHOWN","HIDDEN","MARK_CLICKED","RENDITION","STARTED","ATTACHED","DISPLAY_ERROR","LOCATION_CHANGED","RELOCATED","LAYOUT","UPDATED","ANNOTATION","ATTACH","DETACH","requestAnimationFrame","window","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","ELEMENT_NODE","TEXT_NODE","_URL","URL","webkitURL","mozURL","uuid","d","Date","getTime","replace","c","r","Math","random","floor","documentHeight","max","document","documentElement","clientHeight","body","scrollHeight","offsetHeight","isElement","obj","nodeType","isNumber","n","isNaN","parseFloat","isFinite","isFloat","f","indexOf","prefixed","unprefixed","vendors","prefixes","lower","toLowerCase","length","style","i","defaults","arguments","source","prop","extend","target","sources","slice","forEach","getOwnPropertyNames","propName","defineProperty","getOwnPropertyDescriptor","insert","item","array","compareFunction","location","locationOf","splice","_start","_end","compared","start","end","pivot","parseInt","a","b","indexOfSorted","bounds","el","getComputedStyle","widthProps","heightProps","width","height","borders","nodeBounds","node","elPos","doc","ownerDocument","Node","elRange","createRange","selectNodeContents","getBoundingClientRect","windowBounds","innerWidth","innerHeight","top","left","right","bottom","indexOfNode","typeId","sib","parent","parentNode","children","childNodes","index","indexOfTextNode","textNode","indexOfElementNode","elementNode","isXml","ext","createBlob","content","mime","Blob","type","createBlobUrl","tempUrl","blob","createObjectURL","revokeBlobUrl","url","revokeObjectURL","createBase64Url","data","datauri","btoa","parse","markup","forceXMLDom","Parser","DOMParser","charCodeAt","parseFromString","qs","sel","elements","Error","querySelector","getElementsByTagName","qsa","querySelectorAll","qsp","props","q","filtered","Array","filter","getAttribute","sprint","root","func","treeWalker","NodeFilter","SHOW_TEXT","walk","createTreeWalker","nextNode","callback","firstChild","walked","nextSibling","blob2base64","Promise","resolve","reject","reader","FileReader","readAsDataURL","onloadend","defer","this","id","promise","freeze","querySelectorByType","html","element","query","getAttributeNS","findChildren","push","parents","nodes","unshift","filterChildren","nodeName","single","getParentByTagName","tagname","tagName","RangeObject","collapsed","commonAncestorContainer","endContainer","endOffset","startContainer","startOffset","startNode","_commonAncestorContainer","collapse","_checkCollapsed","endNode","toStart","referenceNode","setStart","setEnd","endIndex","textContent","startParents","endParents","debounce","isObject","FUNC_ERROR_TEXT","throttle","wait","options","leading","trailing","TypeError","Url","urlString","baseString","basePath","absolute","pathname","href","protocol","origin","hash","search","base","Path","directory","filename","extension","what","fullpath","isAbsolute","relative","isObjectLike","assign","foo","bar","trzy","global","DOMIterables","DOMTokenListPrototype","createNonEnumerableProperty","handlePrototype","CollectionPrototype","error","COLLECTION_NAME","isFunction","classRe","functionToString","Function","test","$forEach","arrayMethodIsStrict","STRICT_METHOD","callbackfn","replaceBase","section","head","createElement","insertBefore","setAttribute","replaceCanonical","link","canonical","appendChild","replaceMeta","meta","idref","replaceLinks","contents","fn","links","replaceLink","linkUrl","onclick","path","bind","substitute","urls","replacements","RegExp","str","contains","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","Uint8Array","code","len","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","arr","curByte","tripletToBase64","num","encodeChunk","uint8","output","join","extraBytes","parts","maxChunkLength","len2","dom","DOMImplementation","XMLSerializer","objectToString","freeGlobal","freeSelf","self","Mapping","layout","direction","axis","dev","horizontal","_dev","view","ranges","findRanges","map","rangeListToCfiList","cfiBase","rangePairToCfiPair","findStart","findEnd","startRange","toRange","endRange","selection","defaultView","getSelection","removeAllRanges","addRange","acceptNode","trim","FILTER_ACCEPT","FILTER_REJECT","safeFilter","columns","scrollWidth","spreads","ceil","spreadWidth","count","divisor","columnWidth","gap","pages","$el","found","stack","$prev","shift","findTextStartRange","round","findTextEndRange","range","pos","splitTextNodeIntoRanges","prev","_splitter","text","splitter","rangePair","startCfi","endCfi","cifPair","ePub","VERSION","Book","Rendition","Contents","CFI","utils","nullTag","undefinedTag","baseGetTag","process","assertPath","normalizeStringPosix","allowAboveRoot","res","lastSlash","dots","j","_format","sep","pathObject","dir","name","posix","cwd","resolvedPath","resolvedAbsolute","normalize","trailingSeparator","joined","arg","from","to","fromStart","fromEnd","fromLen","toEnd","toLen","lastCommonSep","fromCode","toCode","out","_makeLong","dirname","hasRoot","matchedSlash","basename","extIdx","firstNonSlashEnd","extname","startDot","startPart","preDotState","format","ret","delimiter","now","$","proto","forced","nextTick","args","setTimeout","apply","platform","arch","execPath","title","pid","browser","env","argv","binding","chdir","exit","kill","umask","dlopen","uptime","memoryUsage","uvCounters","features","Hook","context","hooks","hook","promises","task","executing","err","console","log","all","reWhitespace","trimmedEndIndex","string","charAt","hasNavigator","isChrome","navigator","userAgent","isWebkit","sectionIndex","epubcfi","_size","epubReadingSystem","called","active","listeners","w","frame","h","rect","border","overflow","overflowX","overflowY","property","priority","setProperty","removeProperty","$viewport","parsed","newContent","settings","hasAttribute","_width","match","_height","_scale","_minimum","_maximum","_scalable","scale","minimum","maximum","scalable","scrollTo","emit","imageLoadListeners","mediaQueryListeners","addEventListeners","addSelectionListeners","ResizeObserver","resizeListeners","visibilityListeners","resizeObservers","linksHandler","removeEventListeners","removeSelectionListeners","observer","disconnect","clearTimeout","expanding","textWidth","textHeight","onResize","resizeCheck","addEventListener","visibilityState","_resizeCheck","sheets","styleSheets","mediaChangeHandler","m","matches","_expanding","expand","rules","cssRules","media","mql","matchMedia","mediaText","addListener","observe","MutationObserver","mutations","config","attributes","childList","characterData","subtree","img","images","naturalWidth","onload","fonts","ready","then","ignoreClass","position","targetPos","isCfiString","container","newRange","Range","substring","getElementById","selectNode","src","$stylesheet","rel","onreadystatechange","readyState","key","styleEl","serializedCss","_getStylesheetNode","innerHTML","styleSheet","sheet","rl","rule","selector","propStr","pl","insertRule","selectors","keys","definition","isArray","_rules","$script","async","className","classList","add","remove","_triggerEvent","triggerEvent","eventName","passive","removeEventListener","_onSelectionChange","onSelectionChange","selectionEndTimeout","triggerSelectedEvent","cfirange","rangeCount","getRangeAt","_cfi","cfi","viewport","layoutStyle","css","COLUMN_AXIS","COLUMN_GAP","COLUMN_WIDTH","COLUMN_FILL","writingMode","offsetX","offsetY","scaleStr","translateStr","viewportWidth","viewportHeight","widthScale","heightScale","scaler","properties","includes","marginLeft","mapping","page","mode","_layoutStyle","version","hasFeature","feature","removeListeners","pathString","isDirectory","splitPathRe","exec","isValue","possibleTypes","_undefined","val","isPrototype","object","documentCreateElement","constructor","t","s","o","u","require","l","1","support","_keyStr","encode","input","chr1","chr2","chr3","enc1","enc2","enc3","enc4","remainingBytes","getTypeOf","decode","resultIndex","dataUrlPrefix","substr","totalLength","uint8array","2","external","DataWorker","Crc32Probe","DataLengthProbe","CompressedObject","compressedSize","uncompressedSize","crc32","compression","compressedContent","getContentWorker","worker","pipe","uncompressWorker","that","on","streamInfo","getCompressedWorker","withStreamInfo","createWorkerFrom","uncompressedWorker","compressionOptions","compressWorker","3","GenericWorker","STORE","magic","DEFLATE","4","makeTable","table","k","crcTable","crc","buf","crc32str","5","base64","binary","createFolders","date","comment","unixPermissions","dosPermissions","6","ES6Promise","7","USE_TYPEDARRAY","Uint16Array","Uint32Array","pako","ARRAY_TYPE","FlateWorker","action","_pako","_pakoAction","_pakoOptions","inherits","processChunk","chunk","_createPako","transformTo","flush","cleanUp","raw","level","onData","8","utf8","signature","decToHex","dec","bytes","hex","String","fromCharCode","generateUnixExternalFileAttr","isDir","generateDosExternalFileAttr","generateZipParts","streamedContent","streamingEnded","offset","encodeFileName","dosTime","dosDate","file","useCustomEncoding","utf8encode","encodedFileName","utfEncodedFileName","encodedComment","utfEncodedComment","useUTF8ForFileName","useUTF8ForComment","extraFields","unicodePathExtraField","unicodeCommentExtraField","dataInfo","bitflag","extFileAttr","versionMadeBy","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","header","fileRecord","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","generateCentralDirectoryEnd","entriesCount","centralDirLength","localDirLength","dirEnd","CENTRAL_DIRECTORY_END","generateDataDescriptors","descriptor","DATA_DESCRIPTOR","ZipFileWorker","streamFiles","bytesWritten","zipComment","zipPlatform","accumulate","contentBuffer","dirRecords","currentSourceOffset","currentFile","_sources","currentFilePercent","percent","remainingFiles","openedSource","record","closedSource","prepareNextSource","previous","isPaused","pause","resume","registerPrevious","generatedError","lock","9","compressions","getCompression","fileCompression","zipCompression","compressionName","generateWorker","zip","zipFileWorker","relativePath","_compressWorker","10","JSZip","files","create","clone","newObj","loadAsync","11","ZipEntries","nodejsUtils","checkEntryCRC32","zipEntry","decompressed","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","prepareContent","zipEntries","load","results","unsafeName","fileNameStr","safeName","fileCommentStr","unsafeOriginalName","12","NodejsStreamInputAdapter","stream","_upstreamEnded","_bindStream","_stream","13","Readable","NodejsStreamOutputAdapter","helper","updateCb","_helper","_read","14","Buffer","newBufferFrom","encoding","allocBuffer","size","alloc","fill","isBuffer","15","StreamHelper","ZipObject","generate","fileAdd","originalOptions","dataType","toUpperCase","forceTrailingSlash","parentFolder","folderAdd","isUnicodeString","isCompressedEmpty","zipObjectContent","lastIndexOf","isRegExp","cb","entry","regexp","folder","newFolder","kids","generateInternalStream","opts","mimeType","checkSupport","generateAsync","onUpdate","generateNodeStream","toNodejsStream","16","17","DataReader","ArrayReader","byteAt","zero","lastIndexOfSignature","sig","sig0","sig1","sig2","sig3","readAndCheckSignature","readData","checkOffset","18","checkIndex","newIndex","setIndex","skip","readInt","readString","readDate","dostime","UTC","19","Uint8ArrayReader","NodeBufferReader","20","StringReader","21","subarray","22","23","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","24","ConvertWorker","destType","25","26","27","DEFAULT_BLOCK_SIZE","dataP","dataIsReady","_tickScheduled","_tickAndRepeat","delay","isFinished","_tick","nextIndex","min","28","extraStreamInfo","isLocked","_listeners","listener","next","mergeStreamInfo","withError","me","29","nodestream","transformZipOutput","newBlob","concat","dataArray","set","updateCallback","chunkType","_internalType","resultType","_outputType","_mimeType","outputType","internalType","_worker","evt","objectMode","30","arraybuffer","ArrayBuffer","nodebuffer","buffer","Builder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","builder","append","getBlob","31","_utf8len","string2buf","c2","m_pos","str_len","buf_len","utf8border","buf2string","c_len","utf16buf","applyFromCharCode","Utf8DecodeWorker","leftOver","Utf8EncodeWorker","previousData","nextBoundary","usableData","32","string2binary","stringToArrayLike","identity","part","arrayToStringHelper","stringifyByChunk","stringifyByChar","resultStr","applyCanBeUsed","arrayLikeToString","canUseApply","arrayLikeToArrayLike","arrayFrom","arrayTo","transform","inputType","split","pop","supported","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","setImmediate","ctor","superCtor","Obj","attr","inputData","isBinary","isOptimizedBinaryString","isBase64","isBlob","onerror","readAsArrayBuffer","33","readerFor","ZipEntry","loadOptions","checkSignature","expectedSignature","isSignature","askedIndex","currentIndex","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","decodeParamType","decodeContent","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","extraFieldId","extraFieldLength","extraFieldValue","extraDataSize","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","isGarbage","endOfCentralDirOffset","expectedEndOfCentralDirOffset","abs","prepareReader","34","crc32fn","MADE_BY_DOS","MADE_BY_UNIX","findCompression","compressionMethod","method","isEncrypted","bitFlag","useUTF8","localExtraFieldsLength","fileNameLength","fileName","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","madeBy","extraReader","upath","findExtraFieldUnicodePath","fileNameByteArray","ucomment","findExtraFieldUnicodeComment","commentByteArray","upathField","ucommentField","35","_data","_dataBinary","internalStream","askUnicodeString","_decompressWorker","nodeStream","removedMethods","removedFn","36","scheduleDrain","draining","Mutation","WebKitMutationObserver","createTextNode","MessageChannel","scriptEl","removeChild","channel","port1","onmessage","port2","postMessage","queue","oldQueue","immediate","37","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","resolver","state","outcome","safelyResolveThenable","QueueItem","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","unwrap","returnValue","getThen","thenable","onError","onSuccess","tryToUnwrap","tryCatch","status","reason","iterable","values","resolved","allResolver","resolveFromAll","outValue","race","response","p","yes","no","38","deflate","inflate","constants","39","zlib_deflate","strings","msg","ZStream","Z_NO_FLUSH","Z_FINISH","Z_OK","Z_STREAM_END","Z_SYNC_FLUSH","Z_DEFAULT_COMPRESSION","Z_DEFAULT_STRATEGY","Z_DEFLATED","Deflate","chunkSize","windowBits","memLevel","strategy","opt","gzip","ended","chunks","strm","avail_out","deflateInit2","deflateSetHeader","dictionary","dict","deflateSetDictionary","_dict_set","deflator","deflateRaw","_mode","next_in","avail_in","Buf8","next_out","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","40","zlib_inflate","GZheader","Inflate","inflateInit2","inflateGetHeader","inflator","inflateRaw","next_out_utf8","tail","utf8str","allowBufError","binstring2buf","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","arraySet","inflateEnd","ungzip","41","TYPED_OK","Int32Array","fnTyped","dest","src_offs","dest_offs","fnUntyped","setTyped","Buf16","Buf32","42","STR_APPLY_OK","STR_APPLY_UIA_OK","__","43","adler32","adler","s1","s2","44","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_BINARY","Z_TEXT","Z_UNKNOWN","45","46","configuration_table","trees","MAX_MEM_LEVEL","MAX_WBITS","DEF_MEM_LEVEL","LENGTH_CODES","LITERALS","L_CODES","D_CODES","BL_CODES","HEAP_SIZE","MAX_BITS","MIN_MATCH","MAX_MATCH","MIN_LOOKAHEAD","PRESET_DICT","INIT_STATE","EXTRA_STATE","NAME_STATE","COMMENT_STATE","HCRC_STATE","BUSY_STATE","FINISH_STATE","BS_NEED_MORE","BS_BLOCK_DONE","BS_FINISH_STARTED","BS_FINISH_DONE","OS_CODE","errorCode","rank","flush_pending","pending","pending_buf","pending_out","total_out","flush_block_only","last","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","read_buf","wrap","total_in","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","limit","w_size","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","more","_w_size","window_size","hash_size","ins_h","hash_shift","hash_mask","deflate_stored","max_block_size","pending_buf_size","max_start","deflate_fast","hash_head","bflush","match_length","_tr_tally","max_lazy_match","last_lit","deflate_slow","max_insert","prev_match","match_available","deflate_rle","deflate_huff","Config","good_length","max_lazy","nice_length","max_chain","lm_init","DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","deflateResetKeep","data_type","_tr_init","deflateReset","deflateInit","old_flush","beg","hcrc","extra","time","os","level_flags","bstate","_tr_align","_tr_stored_block","avail","tmpDict","dictLength","deflateInfo","47","xflags","extra_len","done","48","BAD","TYPE","_in","_out","dmax","wsize","whave","wnext","s_window","hold","bits","lcode","dcode","lmask","dmask","here","op","dist","from_source","lencode","distcode","lenbits","distbits","dolen","dodist","sane","49","inflate_fast","inflate_table","CODES","LENS","DISTS","Z_MEM_ERROR","HEAD","FLAGS","TIME","OS","EXLEN","EXTRA","NAME","COMMENT","HCRC","DICTID","DICT","TYPEDO","STORED","COPY_","COPY","TABLE","LENLENS","CODELENS","LEN_","LEN","LENEXT","DIST","DISTEXT","MATCH","LIT","CHECK","LENGTH","DONE","MEM","SYNC","ENOUGH_LENS","ENOUGH_DISTS","DEF_WBITS","zswap32","InflateState","havedict","flags","check","total","wbits","ncode","nlen","ndist","have","work","lendyn","distdyn","back","was","inflateResetKeep","inflateReset","inflateReset2","inflateInit","lenfix","distfix","virgin","fixedtables","sym","updatewindow","copy","put","here_bits","here_op","here_val","last_bits","last_op","last_val","hbuf","order","inf_leave","dictid","inflateInfo","50","MAXBITS","lbase","lext","dbase","dext","lens_index","codes","table_index","incr","low","mask","curr","drop","used","huff","base_index","offs","extra_index","51","0","52","STORED_BLOCK","STATIC_TREES","DYN_TREES","Buf_size","MAX_BL_BITS","END_BLOCK","REP_3_6","REPZ_3_10","REPZ_11_138","extra_lbits","extra_dbits","extra_blbits","bl_order","DIST_CODE_LEN","static_ltree","static_dtree","_dist_code","_length_code","base_length","static_l_desc","static_d_desc","static_bl_desc","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","send_bits","send_code","tree","bi_reverse","bi_flush","gen_bitlen","desc","xbits","stree","gen_codes","next_code","tr_static_init","init_block","bi_windup","copy_block","smaller","_n2","_m2","pqdownheap","v","compress_block","ltree","dtree","lc","lx","build_tree","scan_tree","curlen","prevlen","nextlen","max_count","min_count","send_tree","build_bl_tree","max_blindex","send_all_trees","lcodes","dcodes","blcodes","detect_data_type","black_mask","static_init_done","stored_len","opt_lenb","static_lenb","53","54","registerImmediate","nextHandle","tasksByHandle","currentlyRunningATask","attachTo","getPrototypeOf","installNextTickImplementation","canUsePostMessage","installPostMessageImplementation","installMessageChannelImplementation","installReadyStateChangeImplementation","installSetTimeoutImplementation","clearImmediate","handle","run","runIfPresent","importScripts","postMessageIsAsynchronous","oldOnMessage","messagePrefix","onGlobalMessage","event","attachEvent","script","createElementNS","default","find","list","predicate","ac","oc","MIME_TYPE","HTML","isHTML","XML_APPLICATION","XML_TEXT","XML_XHTML_APPLICATION","XML_SVG_IMAGE","NAMESPACE","uri","SVG","XML","XMLNS","Layout","_spread","spread","_minSpreadWidth","minSpreadWidth","_evenSpreads","evenSpreads","flow","_flow","delta","update","_gap","pageWidth","formating","fit","pageLength","newProps","PI_D2","PI","EASING_EQUATIONS","easeOutSine","sin","easeInOutSine","cos","easeInOutQuint","pow","easeInCubic","manager","duration","minVelocity","minDistance","easing","supportsTouch","setup","fullsize","stage","scroller","disableScroll","afterScrolledTimeout","isVertical","isPaginated","touchCanceler","resizeCanceler","snapping","scrollLeft","scrollTop","startTouchX","startTouchY","startTime","endTouchX","endTouchY","endTime","addListeners","DocumentTouch","_onResize","_onScroll","onScroll","_onTouchStart","onTouchStart","_onTouchMove","onTouchMove","_onTouchEnd","onTouchEnd","_afterDisplayed","afterDisplayed","off","ev","triggerViewEvent","scrollX","scrollY","screenX","screenY","touches","enableScroll","deltaY","swipped","wasSwiped","snap","snapWidth","distance","velocity","howMany","snapTo","smoothScrollTo","destination","deferred","tick","scroll","performance","super","infinite","offsetDelta","allowScriptedContent","allowPopups","viewSettings","forceEvenPages","display","_full","full","enqueue","distX","distY","scrollBy","onDisplayed","createView","views","expanded","updateAxis","updateWritingMode","afterResized","request","counter","prepend","heightDelta","widthDelta","_offset","isVisible","viewsLength","visible","updating","displayed","show","hide","destroy","trimTimeout","catch","_offsetLeft","_offsetTop","checking","newViews","_bounds","visibleLength","contentLength","rtlScrollType","rtl","first","firstIndex","lastIndex","above","below","erase","prevTop","prevLeft","ignore","addScrollListeners","snapper","scrollDeltaVert","scrollDeltaHorz","_scrolled","scrolled","didScroll","prevScrollTop","prevScrollLeft","scrollTimeout","afterScrolled","needsSnap","rendered","updateFlow","reTrimStart","baseTrim","DOCUMENT_NODE","EpubCFI","cfiFrom","spinePos","parseComponent","steps","checkType","fromRange","fromNode","cfiStr","baseComponent","pathComponent","getChapterComponent","getPathComponent","getRange","componentStr","terminal","component","assertion","parseTerminal","step","parseStep","stepStr","has_brackets","termialStr","characterOffset","textLocationAssertion","indirection","splitStr","segment","segmentString","joinSteps","cfiString","cfiOne","cfiTwo","stepsA","stepsB","terminalA","terminalB","filteredNode","filteredPosition","currentNode","filteredStep","stepA","stepB","needsIgnoring","patchOffset","pathTo","equalStep","anchor","sibling","previousSibling","isText","totalOffset","currNodeType","prevNodeType","prevIndex","textNodes","normalizedMap","xpath","_doc","evaluate","walkToNode","stepsToXpath","XPathResult","FIRST_ORDERED_NODE_TYPE","singleNodeValue","child","findNode","lastStepIndex","childIndex","startSteps","endSteps","missed","fixMiss","_spineNodeIndex","_pos","spineNodeIndex","read","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","Infinity","write","rt","LN2","Queue","_q","running","paused","queued","inwait","dequeue","defered","rendition","_themes","_overrides","_current","_injected","register","inject","overrides","registerThemes","registerUrl","registerRules","theme","themes","getContents","removeClass","addClass","addStylesheet","serialized","addStylesheetCss","injected","addStylesheetRules","override","highlights","underlines","marks","_annotations","_annotationsBySectionIndex","render","unloaded","clear","cfiRange","styles","encodeURI","annotation","attach","_removeFromAnnotationBySectionIndex","detach","_annotationsAt","annotations","mark","highlight","underline","unhighlight","ununderline","unmark","book","stylesheet","resizeOnOrientationChange","defaultDirection","serialize","handleLinks","passEvents","adjustImages","spine","injectIdentifier","injectStylesheet","injectScript","opened","starting","started","viewManager","View","package","metadata","displayOptions","fixedLayout","ViewManager","requireManager","requireView","globalLayoutProperties","determineLayoutProperties","afterRemoved","onResized","onOrientationChange","reportLocation","displaying","_display","locations","cfiFromPercentage","get","triggerMarkEvent","trigger","orientation","moveTo","resize","_layout","applyLayout","isRendered","changed","updateLayout","currentLocation","located","percentage","totalPages","locationStart","locationFromCfi","locationEnd","percentageFromLocation","pageStart","pageList","pageFromCfi","pageEnd","atEnd","atStart","computed","paddingTop","paddingBottom","horizontalPadding","paddingLeft","paddingRight","ident","packaging","identifier","_dereq_","_typeof","iterator","_classCallCheck","instance","Constructor","getIDB","indexedDB","webkitIndexedDB","mozIndexedDB","OIndexedDB","msIndexedDB","idb","isIndexedDBValid","open","isSafari","openDatabase","hasFetch","fetch","IDBKeyRange","Promise$1","executeCallback","executeTwoCallbacks","errorCallback","normalizeKey","warn","getCallback","DETECT_BLOB_SUPPORT_STORE","supportsBlobs","dbContexts","READ_ONLY","READ_WRITE","_binStringToArrayBuffer","bin","_checkBlobSupportWithoutCaching","txn","transaction","objectStore","onabort","preventDefault","stopPropagation","oncomplete","matchedChrome","matchedEdge","_checkBlobSupport","_deferReadiness","dbInfo","dbContext","deferredOperation","deferredOperations","dbReady","_advanceReadiness","_rejectReadiness","_getConnection","upgradeNeeded","createDbContext","db","close","dbArgs","openreq","onupgradeneeded","createObjectStore","storeName","oldVersion","ex","newVersion","onsuccess","onversionchange","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","objectStoreNames","isDowngrade","isUpgrade","incVersion","_encodeBlob","__local_forage_encoded_blob","readAsBinaryString","_decodeBlob","encodedBlob","arrayBuff","atob","_isEncodedBlob","_fullyReady","_initReady","_dbInfo","_tryReconnect","forages","forage","createTransaction","retries","tx","_initStorage","initPromises","ignoreErrors","_defaultConfig","getItem","store","req","iterate","openCursor","iterationNumber","cursor","setItem","blobSupport","removeItem","advanced","openKeyCursor","advance","dropInstance","currentConfig","isCurrentDb","dbPromise","dropObjectPromise","deleteObjectStore","_forage2","dropDBPromise","deleteDatabase","onblocked","_forage","asyncStorage","_driver","_support","isWebSQLValid","BASE_CHARS","BLOB_TYPE_PREFIX","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER","SERIALIZED_MARKER_LENGTH","TYPE_ARRAYBUFFER","TYPE_BLOB","TYPE_INT8ARRAY","TYPE_UINT8ARRAY","TYPE_UINT8CLAMPEDARRAY","TYPE_INT16ARRAY","TYPE_INT32ARRAY","TYPE_UINT16ARRAY","TYPE_UINT32ARRAY","TYPE_FLOAT32ARRAY","TYPE_FLOAT64ARRAY","TYPE_SERIALIZED_MARKER_LENGTH","toString$1","stringToBuffer","serializedString","encoded1","encoded2","encoded3","encoded4","bufferLength","bufferToString","base64String","valueType","marker","fileReader","JSON","stringify","deserialize","blobType","matcher","Int8Array","Uint8ClampedArray","Int16Array","Float32Array","Float64Array","localforageSerializer","createDbTable","executeSql","_initStorage$1","dbInfoPromise","description","serializer","tryExecuteSql","sqlStatement","SYNTAX_ERR","rows","getItem$1","iterate$1","_setItem","retriesLeft","originalValue","sqlError","QUOTA_ERR","setItem$1","removeItem$1","clear$1","length$1","key$1","keys$1","getAllStoreNames","storeNames","dropInstance$1","operationInfo","dropTable","operations","webSQLStorage","isLocalStorageValid","localStorage","_getKeyPrefix","defaultConfig","keyPrefix","checkIfLocalStorageThrows","localStorageTestKey","_isLocalStorageUsable","_initStorage$2","clear$2","getItem$2","iterate$2","keyPrefixLength","key$2","keys$2","itemKey","length$2","removeItem$2","setItem$2","dropInstance$2","localStorageWrapper","sameValue","x","y","searchElement","DefinedDrivers","DriverSupport","DefaultDrivers","INDEXEDDB","WEBSQL","LOCALSTORAGE","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","DefaultConfig","driver","callWhenReady","localForageInstance","libraryMethod","_args","_key","LocalForage","driverTypeKey","driverName","defineDriver","_config","_driverSet","_initDriver","_ready","_wrapLibraryMethodsWithReady","setDriver","driverObject","complianceError","driverMethods","driverMethodName","isRequired","configureMissingMethods","methodNotImplementedFactory","methodName","_i","_len","optionalDriverMethod","setDriverSupport","info","getDriver","getDriverPromise","getSerializer","serializerPromise","drivers","supportedDrivers","_getSupportedDrivers","setDriverToConfig","extendSelfWithDriver","_extend","initDriver","currentDriverIndex","driverPromiseLoop","oldDriverSetDone","supports","libraryMethodsAndProperties","createInstance","localforage_js","fails","METHOD_NAME","argument","_vm","_h","$createElement","_c","_self","staticClass","attrs","ifTitleAndMenuShow","_v","_s","bookname","prevPage","toggleTitleAndMenu","nextPage","ref","fontSizeList","defaultFontSize","themeList","defaultTheme","bookAvailable","navigation","progress","getCurrentLocation","setFontSize","setTheme","onProgressChange","jumpTo","staticRenderFns","dataSize","isbn","methods","created","showEpub","$http","withCredentials","headers","supportsURL","BLOB_RESPONSE","xhr","XMLHttpRequest","xhrPrototype","handler","setRequestHeader","responseXML","responseType","message","overrideMimeType","send","linear","_request","loading","loaded","xml","rendering","Serializer","isIE","serializeToString","_query","excerpt","cfiFromRange","maxSeqEle","excerptLimit","nodeList","textWithCase","reduce","acc","current","startNodeIndex","endPos","endNodeIndex","beforeEndLengthCount","globalLayout","_range","unload","spineItems","spineByHref","spineById","items","manifest","baseUrl","_package","spineItem","manifestItem","generateChapterComponent","decodeURI","each","_locations","_locationsWords","break","_wordCounter","_currentCfi","processingTimeout","chars","completed","_break","parser","wordCount","processWords","parseWords","remainingCount","foundStartNode","countWords","loc","compare","cfiFromLocation","setCurrent","stop","containerDocument","packagePath","rootfile","xmlEncoding","packageDocument","navPath","ncxPath","coverPath","metadataNode","manifestNode","spineNode","parseManifest","findNavPath","findNcxPath","findCoverPath","parseSpine","uniqueIdentifier","findUniqueIdentifier","parseMetadata","getElementText","creator","pubdate","publisher","language","rights","modified_date","getPropertyText","media_active_class","manifestXml","selected","overlay","spineXml","propArray","itemref","packageXml","uniqueIdentifierId","localName","namespaceURI","nodeValue","tocId","pkg","metaCover","coverId","cover","getElementsByTagNameNS","json","readingOrder","resources","toc","label","tocByHref","tocById","landmarks","landmarksByType","ncx","parseNav","parseLandmarks","parseNcx","unpack","subitems","getByIndex","navItems","navHtml","navElement","navList","parseNavList","navListHtml","navItem","nested","landmarkItem","tocXml","navPoints","ncxItem","navLabel","subtype","mimeTypes","defaultValue","archive","replacementUrls","assets","cssUrls","splitUrls","parsedUrl","createUrl","replaced","replacement","createCssFile","replacementUrl","indexInUrls","newUrl","textResponse","getText","relUrls","assetHref","relativeTo","firstPage","lastPage","navXml","pageTargets","navLabelText","pageText","packageUrl","isCfi","pg","percentageFromPage","urlCache","checkRequirements","zipUrl","handleResponse","decodededUrl","decodeURIComponent","useBase64","getBase64","fromCache","requester","storage","online","_status","onLine","force","mapped","encodedUrl","encodeURIComponent","retrieve","readAsText","displayOptionsDocument","interactive","openToSpread","orientationLock","displayOptionsNode","CONTAINER_PATH","IBOOKS_DISPLAY_OPTIONS_PATH","INPUT_TYPE","BINARY","BASE64","EPUB","OPF","MANIFEST","DIRECTORY","requestMethod","requestCredentials","requestHeaders","openAs","opening","isOpen","archived","determineType","openEpub","openPackaging","openManifest","openContainer","unarchive","loadNavigation","credentials","replacementsSetting","originalUrl","substituteResources","replaceCss","deregister","Underline","Highlight","Mark","Pane","_get","receiver","getter","_createClass","defineProperties","enumerable","configurable","writable","protoProps","staticProps","_svg","_svg2","_interopRequireDefault","_events","_events2","__esModule","_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","setPrototypeOf","__proto__","proxyMouse","g","idx","unbind","setCoords","coords","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","return","dispatchEvent","rects","getClientRects","box","contained","_Mark","_this","dataset","docFrag","createDocumentFragment","filteredRanges","_Highlight","line","rect1","rect2","toNumber","nativeMax","nativeMin","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","maxing","invokeFunc","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","debounced","isInvoking","conventions","entities","sax","ParseError","XMLReader","locator","buildErrorHandler","errorImpl","domBuilder","DOMHandler","errorHandler","isCallback","build","_locator","cdata","lineNumber","columnNumber","systemId","_toString","java","lang","appendElement","hander","currentElement","defaultNSMap","xmlns","entityMap","HTML_ENTITIES","XML_ENTITIES","setDocumentLocator","startDocument","createDocument","documentURI","startElement","qName","getURI","getValue","getQName","createAttributeNS","getLocator","setAttributeNode","endElement","startPrefixMapping","prefix","endPrefixMapping","processingInstruction","ins","createProcessingInstruction","ignorableWhitespace","ch","characters","charNode","createCDATASection","skippedEntity","endDocument","comm","createComment","startCDATA","endCDATA","startDTD","publicId","impl","implementation","createDocumentType","dt","doctype","warning","fatalError","__DOMHandler","amp","apos","gt","lt","quot","Aacute","aacute","Abreve","abreve","acd","acE","Acirc","acirc","acute","Acy","acy","AElig","aelig","af","Afr","afr","Agrave","agrave","alefsym","aleph","Alpha","alpha","Amacr","amacr","amalg","AMP","And","and","andand","andd","andslope","andv","ang","ange","angle","angmsd","angmsdaa","angmsdab","angmsdac","angmsdad","angmsdae","angmsdaf","angmsdag","angmsdah","angrt","angrtvb","angrtvbd","angsph","angst","angzarr","Aogon","aogon","Aopf","aopf","ap","apacir","apE","ape","apid","ApplyFunction","approx","approxeq","Aring","aring","Ascr","ascr","Assign","ast","asymp","asympeq","Atilde","atilde","Auml","auml","awconint","awint","backcong","backepsilon","backprime","backsim","backsimeq","Backslash","Barv","barvee","Barwed","barwed","barwedge","bbrk","bbrktbrk","bcong","Bcy","bcy","bdquo","becaus","Because","because","bemptyv","bepsi","bernou","Bernoullis","Beta","beta","beth","between","Bfr","bfr","bigcap","bigcirc","bigcup","bigodot","bigoplus","bigotimes","bigsqcup","bigstar","bigtriangledown","bigtriangleup","biguplus","bigvee","bigwedge","bkarow","blacklozenge","blacksquare","blacktriangle","blacktriangledown","blacktriangleleft","blacktriangleright","blank","blk12","blk14","blk34","block","bne","bnequiv","bNot","bnot","Bopf","bopf","bot","bowtie","boxbox","boxDL","boxDl","boxdL","boxdl","boxDR","boxDr","boxdR","boxdr","boxH","boxh","boxHD","boxHd","boxhD","boxhd","boxHU","boxHu","boxhU","boxhu","boxminus","boxplus","boxtimes","boxUL","boxUl","boxuL","boxul","boxUR","boxUr","boxuR","boxur","boxV","boxv","boxVH","boxVh","boxvH","boxvh","boxVL","boxVl","boxvL","boxvl","boxVR","boxVr","boxvR","boxvr","bprime","Breve","breve","brvbar","Bscr","bscr","bsemi","bsim","bsime","bsol","bsolb","bsolhsub","bull","bullet","bump","bumpE","bumpe","Bumpeq","bumpeq","Cacute","cacute","Cap","cap","capand","capbrcup","capcap","capcup","capdot","CapitalDifferentialD","caps","caret","caron","Cayleys","ccaps","Ccaron","ccaron","Ccedil","ccedil","Ccirc","ccirc","Cconint","ccups","ccupssm","Cdot","cdot","cedil","Cedilla","cemptyv","cent","CenterDot","centerdot","Cfr","cfr","CHcy","chcy","checkmark","Chi","chi","cir","circ","circeq","circlearrowleft","circlearrowright","circledast","circledcirc","circleddash","CircleDot","circledR","circledS","CircleMinus","CirclePlus","CircleTimes","cirE","cire","cirfnint","cirmid","cirscir","ClockwiseContourIntegral","CloseCurlyDoubleQuote","CloseCurlyQuote","clubs","clubsuit","Colon","colon","Colone","colone","coloneq","comma","commat","comp","compfn","complement","complexes","cong","congdot","Congruent","Conint","conint","ContourIntegral","Copf","copf","coprod","Coproduct","copysr","CounterClockwiseContourIntegral","crarr","Cross","cross","Cscr","cscr","csub","csube","csup","csupe","ctdot","cudarrl","cudarrr","cuepr","cuesc","cularr","cularrp","Cup","cup","cupbrcap","CupCap","cupcap","cupcup","cupdot","cupor","cups","curarr","curarrm","curlyeqprec","curlyeqsucc","curlyvee","curlywedge","curren","curvearrowleft","curvearrowright","cuvee","cuwed","cwconint","cwint","cylcty","Dagger","dagger","daleth","Darr","dArr","darr","dash","Dashv","dashv","dbkarow","dblac","Dcaron","dcaron","Dcy","dcy","DD","dd","ddagger","ddarr","DDotrahd","ddotseq","deg","Del","Delta","demptyv","dfisht","Dfr","dfr","dHar","dharl","dharr","DiacriticalAcute","DiacriticalDot","DiacriticalDoubleAcute","DiacriticalGrave","DiacriticalTilde","diam","Diamond","diamond","diamondsuit","diams","die","DifferentialD","digamma","disin","div","divide","divideontimes","divonx","DJcy","djcy","dlcorn","dlcrop","dollar","Dopf","dopf","Dot","dot","DotDot","doteq","doteqdot","DotEqual","dotminus","dotplus","dotsquare","doublebarwedge","DoubleContourIntegral","DoubleDot","DoubleDownArrow","DoubleLeftArrow","DoubleLeftRightArrow","DoubleLeftTee","DoubleLongLeftArrow","DoubleLongLeftRightArrow","DoubleLongRightArrow","DoubleRightArrow","DoubleRightTee","DoubleUpArrow","DoubleUpDownArrow","DoubleVerticalBar","DownArrow","Downarrow","downarrow","DownArrowBar","DownArrowUpArrow","DownBreve","downdownarrows","downharpoonleft","downharpoonright","DownLeftRightVector","DownLeftTeeVector","DownLeftVector","DownLeftVectorBar","DownRightTeeVector","DownRightVector","DownRightVectorBar","DownTee","DownTeeArrow","drbkarow","drcorn","drcrop","Dscr","dscr","DScy","dscy","dsol","Dstrok","dstrok","dtdot","dtri","dtrif","duarr","duhar","dwangle","DZcy","dzcy","dzigrarr","Eacute","eacute","easter","Ecaron","ecaron","ecir","Ecirc","ecirc","ecolon","Ecy","ecy","eDDot","Edot","eDot","edot","ee","efDot","Efr","efr","eg","Egrave","egrave","egs","egsdot","Element","elinters","ell","els","elsdot","Emacr","emacr","empty","emptyset","EmptySmallSquare","emptyv","EmptyVerySmallSquare","emsp","emsp13","emsp14","ENG","eng","ensp","Eogon","eogon","Eopf","eopf","epar","eparsl","eplus","epsi","Epsilon","epsilon","epsiv","eqcirc","eqcolon","eqsim","eqslantgtr","eqslantless","Equal","equals","EqualTilde","equest","Equilibrium","equiv","equivDD","eqvparsl","erarr","erDot","Escr","escr","esdot","Esim","esim","Eta","eta","ETH","eth","Euml","euml","euro","excl","exist","Exists","expectation","ExponentialE","exponentiale","fallingdotseq","Fcy","fcy","female","ffilig","fflig","ffllig","Ffr","ffr","filig","FilledSmallSquare","FilledVerySmallSquare","fjlig","flat","fllig","fltns","fnof","Fopf","fopf","ForAll","forall","fork","forkv","Fouriertrf","fpartint","frac12","frac13","frac14","frac15","frac16","frac18","frac23","frac25","frac34","frac35","frac38","frac45","frac56","frac58","frac78","frasl","frown","Fscr","fscr","gacute","Gamma","gamma","Gammad","gammad","Gbreve","gbreve","Gcedil","Gcirc","gcirc","Gcy","gcy","Gdot","gdot","gE","ge","gEl","gel","geq","geqq","geqslant","ges","gescc","gesdot","gesdoto","gesdotol","gesl","gesles","Gfr","gfr","Gg","gg","ggg","gimel","GJcy","gjcy","gl","gla","glE","glj","gnap","gnapprox","gnE","gne","gneq","gneqq","gnsim","Gopf","gopf","grave","GreaterEqual","GreaterEqualLess","GreaterFullEqual","GreaterGreater","GreaterLess","GreaterSlantEqual","GreaterTilde","Gscr","gscr","gsim","gsime","gsiml","Gt","GT","gtcc","gtcir","gtdot","gtlPar","gtquest","gtrapprox","gtrarr","gtrdot","gtreqless","gtreqqless","gtrless","gtrsim","gvertneqq","gvnE","Hacek","hairsp","half","hamilt","HARDcy","hardcy","hArr","harr","harrcir","harrw","Hat","hbar","Hcirc","hcirc","hearts","heartsuit","hellip","hercon","Hfr","hfr","HilbertSpace","hksearow","hkswarow","hoarr","homtht","hookleftarrow","hookrightarrow","Hopf","hopf","horbar","HorizontalLine","Hscr","hscr","hslash","Hstrok","hstrok","HumpDownHump","HumpEqual","hybull","hyphen","Iacute","iacute","ic","Icirc","icirc","Icy","icy","Idot","IEcy","iecy","iexcl","iff","Ifr","ifr","Igrave","igrave","ii","iiiint","iiint","iinfin","iiota","IJlig","ijlig","Im","Imacr","imacr","image","ImaginaryI","imagline","imagpart","imath","imof","imped","Implies","in","incare","infin","infintie","inodot","Int","int","intcal","integers","Integral","intercal","Intersection","intlarhk","intprod","InvisibleComma","InvisibleTimes","IOcy","iocy","Iogon","iogon","Iopf","iopf","Iota","iota","iprod","iquest","Iscr","iscr","isin","isindot","isinE","isins","isinsv","isinv","it","Itilde","itilde","Iukcy","iukcy","Iuml","iuml","Jcirc","jcirc","Jcy","jcy","Jfr","jfr","jmath","Jopf","jopf","Jscr","jscr","Jsercy","jsercy","Jukcy","jukcy","Kappa","kappa","kappav","Kcedil","kcedil","Kcy","kcy","Kfr","kfr","kgreen","KHcy","khcy","KJcy","kjcy","Kopf","kopf","Kscr","kscr","lAarr","Lacute","lacute","laemptyv","lagran","Lambda","lambda","Lang","langd","langle","lap","Laplacetrf","laquo","Larr","lArr","larr","larrb","larrbfs","larrfs","larrhk","larrlp","larrpl","larrsim","larrtl","lat","lAtail","latail","late","lates","lBarr","lbarr","lbbrk","lbrace","lbrack","lbrke","lbrksld","lbrkslu","Lcaron","lcaron","Lcedil","lcedil","lceil","lcub","Lcy","lcy","ldca","ldquo","ldquor","ldrdhar","ldrushar","ldsh","lE","le","LeftAngleBracket","LeftArrow","Leftarrow","leftarrow","LeftArrowBar","LeftArrowRightArrow","leftarrowtail","LeftCeiling","LeftDoubleBracket","LeftDownTeeVector","LeftDownVector","LeftDownVectorBar","LeftFloor","leftharpoondown","leftharpoonup","leftleftarrows","LeftRightArrow","Leftrightarrow","leftrightarrow","leftrightarrows","leftrightharpoons","leftrightsquigarrow","LeftRightVector","LeftTee","LeftTeeArrow","LeftTeeVector","leftthreetimes","LeftTriangle","LeftTriangleBar","LeftTriangleEqual","LeftUpDownVector","LeftUpTeeVector","LeftUpVector","LeftUpVectorBar","LeftVector","LeftVectorBar","lEg","leg","leq","leqq","leqslant","les","lescc","lesdot","lesdoto","lesdotor","lesg","lesges","lessapprox","lessdot","lesseqgtr","lesseqqgtr","LessEqualGreater","LessFullEqual","LessGreater","lessgtr","LessLess","lesssim","LessSlantEqual","LessTilde","lfisht","lfloor","Lfr","lfr","lg","lgE","lHar","lhard","lharu","lharul","lhblk","LJcy","ljcy","Ll","ll","llarr","llcorner","Lleftarrow","llhard","lltri","Lmidot","lmidot","lmoust","lmoustache","lnap","lnapprox","lnE","lne","lneq","lneqq","lnsim","loang","loarr","lobrk","LongLeftArrow","Longleftarrow","longleftarrow","LongLeftRightArrow","Longleftrightarrow","longleftrightarrow","longmapsto","LongRightArrow","Longrightarrow","longrightarrow","looparrowleft","looparrowright","lopar","Lopf","lopf","loplus","lotimes","lowast","lowbar","LowerLeftArrow","LowerRightArrow","loz","lozenge","lozf","lpar","lparlt","lrarr","lrcorner","lrhar","lrhard","lrm","lrtri","lsaquo","Lscr","lscr","Lsh","lsh","lsim","lsime","lsimg","lsqb","lsquo","lsquor","Lstrok","lstrok","Lt","LT","ltcc","ltcir","ltdot","lthree","ltimes","ltlarr","ltquest","ltri","ltrie","ltrif","ltrPar","lurdshar","luruhar","lvertneqq","lvnE","macr","male","malt","maltese","Map","mapsto","mapstodown","mapstoleft","mapstoup","mcomma","Mcy","mcy","mdash","mDDot","measuredangle","MediumSpace","Mellintrf","Mfr","mfr","mho","micro","mid","midast","midcir","middot","minus","minusb","minusd","minusdu","MinusPlus","mlcp","mldr","mnplus","models","Mopf","mopf","mp","Mscr","mscr","mstpos","Mu","mu","multimap","mumap","nabla","Nacute","nacute","nang","nap","napE","napid","napos","napprox","natur","natural","naturals","nbsp","nbump","nbumpe","ncap","Ncaron","ncaron","Ncedil","ncedil","ncong","ncongdot","ncup","Ncy","ncy","ndash","ne","nearhk","neArr","nearr","nearrow","nedot","NegativeMediumSpace","NegativeThickSpace","NegativeThinSpace","NegativeVeryThinSpace","nequiv","nesear","nesim","NestedGreaterGreater","NestedLessLess","NewLine","nexist","nexists","Nfr","nfr","ngE","nge","ngeq","ngeqq","ngeqslant","nges","nGg","ngsim","nGt","ngt","ngtr","nGtv","nhArr","nharr","nhpar","ni","nis","nisd","niv","NJcy","njcy","nlArr","nlarr","nldr","nlE","nle","nLeftarrow","nleftarrow","nLeftrightarrow","nleftrightarrow","nleq","nleqq","nleqslant","nles","nless","nLl","nlsim","nLt","nlt","nltri","nltrie","nLtv","nmid","NoBreak","NonBreakingSpace","Nopf","nopf","Not","not","NotCongruent","NotCupCap","NotDoubleVerticalBar","NotElement","NotEqual","NotEqualTilde","NotExists","NotGreater","NotGreaterEqual","NotGreaterFullEqual","NotGreaterGreater","NotGreaterLess","NotGreaterSlantEqual","NotGreaterTilde","NotHumpDownHump","NotHumpEqual","notin","notindot","notinE","notinva","notinvb","notinvc","NotLeftTriangle","NotLeftTriangleBar","NotLeftTriangleEqual","NotLess","NotLessEqual","NotLessGreater","NotLessLess","NotLessSlantEqual","NotLessTilde","NotNestedGreaterGreater","NotNestedLessLess","notni","notniva","notnivb","notnivc","NotPrecedes","NotPrecedesEqual","NotPrecedesSlantEqual","NotReverseElement","NotRightTriangle","NotRightTriangleBar","NotRightTriangleEqual","NotSquareSubset","NotSquareSubsetEqual","NotSquareSuperset","NotSquareSupersetEqual","NotSubset","NotSubsetEqual","NotSucceeds","NotSucceedsEqual","NotSucceedsSlantEqual","NotSucceedsTilde","NotSuperset","NotSupersetEqual","NotTilde","NotTildeEqual","NotTildeFullEqual","NotTildeTilde","NotVerticalBar","npar","nparallel","nparsl","npart","npolint","npr","nprcue","npre","nprec","npreceq","nrArr","nrarr","nrarrc","nrarrw","nRightarrow","nrightarrow","nrtri","nrtrie","nsc","nsccue","nsce","Nscr","nscr","nshortmid","nshortparallel","nsim","nsime","nsimeq","nsmid","nspar","nsqsube","nsqsupe","nsub","nsubE","nsube","nsubset","nsubseteq","nsubseteqq","nsucc","nsucceq","nsup","nsupE","nsupe","nsupset","nsupseteq","nsupseteqq","ntgl","Ntilde","ntilde","ntlg","ntriangleleft","ntrianglelefteq","ntriangleright","ntrianglerighteq","Nu","nu","numero","numsp","nvap","nVDash","nVdash","nvDash","nvdash","nvge","nvgt","nvHarr","nvinfin","nvlArr","nvle","nvlt","nvltrie","nvrArr","nvrtrie","nvsim","nwarhk","nwArr","nwarr","nwarrow","nwnear","Oacute","oacute","oast","ocir","Ocirc","ocirc","Ocy","ocy","odash","Odblac","odblac","odiv","odot","odsold","OElig","oelig","ofcir","Ofr","ofr","ogon","Ograve","ograve","ogt","ohbar","ohm","oint","olarr","olcir","olcross","oline","olt","Omacr","omacr","Omega","omega","Omicron","omicron","omid","ominus","Oopf","oopf","opar","OpenCurlyDoubleQuote","OpenCurlyQuote","operp","oplus","Or","or","orarr","ord","orderof","ordf","ordm","origof","oror","orslope","orv","oS","Oscr","oscr","Oslash","oslash","osol","Otilde","otilde","Otimes","otimes","otimesas","Ouml","ouml","ovbar","OverBar","OverBrace","OverBracket","OverParenthesis","par","para","parallel","parsim","parsl","PartialD","Pcy","pcy","percnt","period","permil","perp","pertenk","Pfr","pfr","Phi","phi","phiv","phmmat","phone","Pi","pi","pitchfork","piv","planck","planckh","plankv","plus","plusacir","plusb","pluscir","plusdo","plusdu","pluse","PlusMinus","plusmn","plussim","plustwo","pm","Poincareplane","pointint","Popf","popf","pound","Pr","pr","prap","prcue","prE","pre","prec","precapprox","preccurlyeq","Precedes","PrecedesEqual","PrecedesSlantEqual","PrecedesTilde","preceq","precnapprox","precneqq","precnsim","precsim","Prime","prime","primes","prnap","prnE","prnsim","prod","Product","profalar","profline","profsurf","Proportion","Proportional","propto","prsim","prurel","Pscr","pscr","Psi","psi","puncsp","Qfr","qfr","qint","Qopf","qopf","qprime","Qscr","qscr","quaternions","quatint","quest","questeq","QUOT","rAarr","Racute","racute","radic","raemptyv","Rang","rang","rangd","rangle","raquo","Rarr","rArr","rarr","rarrap","rarrb","rarrbfs","rarrc","rarrfs","rarrhk","rarrlp","rarrpl","rarrsim","Rarrtl","rarrtl","rarrw","rAtail","ratail","ratio","rationals","RBarr","rBarr","rbarr","rbbrk","rbrace","rbrack","rbrke","rbrksld","rbrkslu","Rcaron","rcaron","Rcedil","rcedil","rceil","rcub","Rcy","rcy","rdca","rdldhar","rdquo","rdquor","rdsh","Re","real","realine","realpart","reals","REG","reg","ReverseElement","ReverseEquilibrium","ReverseUpEquilibrium","rfisht","rfloor","Rfr","rfr","rHar","rhard","rharu","rharul","Rho","rho","rhov","RightAngleBracket","RightArrow","Rightarrow","rightarrow","RightArrowBar","RightArrowLeftArrow","rightarrowtail","RightCeiling","RightDoubleBracket","RightDownTeeVector","RightDownVector","RightDownVectorBar","RightFloor","rightharpoondown","rightharpoonup","rightleftarrows","rightleftharpoons","rightrightarrows","rightsquigarrow","RightTee","RightTeeArrow","RightTeeVector","rightthreetimes","RightTriangle","RightTriangleBar","RightTriangleEqual","RightUpDownVector","RightUpTeeVector","RightUpVector","RightUpVectorBar","RightVector","RightVectorBar","ring","risingdotseq","rlarr","rlhar","rlm","rmoust","rmoustache","rnmid","roang","roarr","robrk","ropar","Ropf","ropf","roplus","rotimes","RoundImplies","rpar","rpargt","rppolint","rrarr","Rrightarrow","rsaquo","Rscr","rscr","Rsh","rsh","rsqb","rsquo","rsquor","rthree","rtimes","rtri","rtrie","rtrif","rtriltri","RuleDelayed","ruluhar","rx","Sacute","sacute","sbquo","Sc","sc","scap","Scaron","scaron","sccue","scE","sce","Scedil","scedil","Scirc","scirc","scnap","scnE","scnsim","scpolint","scsim","Scy","scy","sdot","sdotb","sdote","searhk","seArr","searr","searrow","sect","semi","seswar","setminus","setmn","sext","Sfr","sfr","sfrown","sharp","SHCHcy","shchcy","SHcy","shcy","ShortDownArrow","ShortLeftArrow","shortmid","shortparallel","ShortRightArrow","ShortUpArrow","shy","Sigma","sigma","sigmaf","sigmav","sim","simdot","sime","simeq","simg","simgE","siml","simlE","simne","simplus","simrarr","slarr","SmallCircle","smallsetminus","smashp","smeparsl","smid","smile","smt","smte","smtes","SOFTcy","softcy","sol","solb","solbar","Sopf","sopf","spades","spadesuit","spar","sqcap","sqcaps","sqcup","sqcups","Sqrt","sqsub","sqsube","sqsubset","sqsubseteq","sqsup","sqsupe","sqsupset","sqsupseteq","squ","Square","square","SquareIntersection","SquareSubset","SquareSubsetEqual","SquareSuperset","SquareSupersetEqual","SquareUnion","squarf","squf","srarr","Sscr","sscr","ssetmn","ssmile","sstarf","Star","star","starf","straightepsilon","straightphi","strns","Sub","sub","subdot","subE","sube","subedot","submult","subnE","subne","subplus","subrarr","Subset","subset","subseteq","subseteqq","SubsetEqual","subsetneq","subsetneqq","subsim","subsub","subsup","succ","succapprox","succcurlyeq","Succeeds","SucceedsEqual","SucceedsSlantEqual","SucceedsTilde","succeq","succnapprox","succneqq","succnsim","succsim","SuchThat","Sum","sum","sung","Sup","sup","sup1","sup2","sup3","supdot","supdsub","supE","supe","supedot","Superset","SupersetEqual","suphsol","suphsub","suplarr","supmult","supnE","supne","supplus","Supset","supset","supseteq","supseteqq","supsetneq","supsetneqq","supsim","supsub","supsup","swarhk","swArr","swarr","swarrow","swnwar","szlig","Tab","Tau","tau","tbrk","Tcaron","tcaron","Tcedil","tcedil","Tcy","tcy","tdot","telrec","Tfr","tfr","there4","Therefore","therefore","Theta","theta","thetasym","thetav","thickapprox","thicksim","ThickSpace","thinsp","ThinSpace","thkap","thksim","THORN","thorn","Tilde","tilde","TildeEqual","TildeFullEqual","TildeTilde","times","timesb","timesbar","timesd","tint","toea","topbot","topcir","Topf","topf","topfork","tosa","tprime","TRADE","trade","triangle","triangledown","triangleleft","trianglelefteq","triangleq","triangleright","trianglerighteq","tridot","trie","triminus","TripleDot","triplus","trisb","tritime","trpezium","Tscr","tscr","TScy","tscy","TSHcy","tshcy","Tstrok","tstrok","twixt","twoheadleftarrow","twoheadrightarrow","Uacute","uacute","Uarr","uArr","uarr","Uarrocir","Ubrcy","ubrcy","Ubreve","ubreve","Ucirc","ucirc","Ucy","ucy","udarr","Udblac","udblac","udhar","ufisht","Ufr","ufr","Ugrave","ugrave","uHar","uharl","uharr","uhblk","ulcorn","ulcorner","ulcrop","ultri","Umacr","umacr","uml","UnderBar","UnderBrace","UnderBracket","UnderParenthesis","Union","UnionPlus","Uogon","uogon","Uopf","uopf","UpArrow","Uparrow","uparrow","UpArrowBar","UpArrowDownArrow","UpDownArrow","Updownarrow","updownarrow","UpEquilibrium","upharpoonleft","upharpoonright","uplus","UpperLeftArrow","UpperRightArrow","Upsi","upsi","upsih","Upsilon","upsilon","UpTee","UpTeeArrow","upuparrows","urcorn","urcorner","urcrop","Uring","uring","urtri","Uscr","uscr","utdot","Utilde","utilde","utri","utrif","uuarr","Uuml","uuml","uwangle","vangrt","varepsilon","varkappa","varnothing","varphi","varpi","varpropto","vArr","varr","varrho","varsigma","varsubsetneq","varsubsetneqq","varsupsetneq","varsupsetneqq","vartheta","vartriangleleft","vartriangleright","Vbar","vBar","vBarv","Vcy","vcy","VDash","Vdash","vDash","vdash","Vdashl","Vee","vee","veebar","veeeq","vellip","Verbar","verbar","Vert","vert","VerticalBar","VerticalLine","VerticalSeparator","VerticalTilde","VeryThinSpace","Vfr","vfr","vltri","vnsub","vnsup","Vopf","vopf","vprop","vrtri","Vscr","vscr","vsubnE","vsubne","vsupnE","vsupne","Vvdash","vzigzag","Wcirc","wcirc","wedbar","Wedge","wedge","wedgeq","weierp","Wfr","wfr","Wopf","wopf","wp","wr","wreath","Wscr","wscr","xcap","xcirc","xcup","xdtri","Xfr","xfr","xhArr","xharr","Xi","xi","xlArr","xlarr","xmap","xnis","xodot","Xopf","xopf","xoplus","xotime","xrArr","xrarr","Xscr","xscr","xsqcup","xuplus","xutri","xvee","xwedge","Yacute","yacute","YAcy","yacy","Ycirc","ycirc","Ycy","ycy","yen","Yfr","yfr","YIcy","yicy","Yopf","yopf","Yscr","yscr","YUcy","yucy","Yuml","yuml","Zacute","zacute","Zcaron","zcaron","Zcy","zcy","Zdot","zdot","zeetrf","ZeroWidthSpace","Zeta","zeta","Zfr","zfr","ZHcy","zhcy","zigrarr","Zopf","zopf","Zscr","zscr","zwj","zwnj","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","other","valueOf","ieee754","typedArraySupport","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","RangeError","encodingOrOffset","allocUnsafe","fromArrayBuffer","fromString","fromObject","assertSize","checked","isEncoding","actual","fromArrayLike","byteOffset","isnan","SlowBuffer","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","hexWrite","Number","remaining","strLen","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","decodeCodePointsArray","INSPECT_MAX_BYTES","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","swap16","swap32","swap64","inspect","thisStart","thisEnd","thisCopy","targetCopy","toJSON","_arr","MAX_ARGUMENTS_LENGTH","codePoints","toHex","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","maxBytes","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","base64clean","stringtrim","units","leadSurrogate","byteArray","hi","lo","dst","once","descriptors","callable","__ee__","__eeOnceListener__","candidate","tracked","dispatch","clientX","clientY","contentDocument","bubbles","MouseEvent","createEvent","initMouseEvent","cancelable","detail","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","rectContains","IframeView","forceRight","added","fixedWidth","fixedHeight","pane","flex","iframe","createContainer","scrolling","seamless","sandbox","resizing","visibility","elementBounds","supportsSrcdoc","sectionRender","setAxis","setWritingMode","_textWidth","_contentWidth","_textHeight","_contentHeight","_needsReframe","iframeBorders","elBorders","lockedWidth","lockedHeight","reframe","prevBounds","placeMark","onLoad","blobUrl","srcdoc","MSApp","execUnsafeLocalFunction","outerThis","contentWindow","layoutFunc","offsetWidth","stopExpanding","offsetTop","offsetLeft","emitter","addMark","removeMark","normalizeArray","up","xs","trailingSlash","paths","fromParts","toParts","samePartsLength","outputParts","nameStartChar","nameChar","tagNamePattern","S_TAG","S_ATTR","S_ATTR_SPACE","S_EQ","S_ATTR_NOQUOT_VALUE","S_ATTR_END","S_TAG_SPACE","S_TAG_CLOSE","captureStackTrace","defaultNSMapCopy","fixedFromCharCode","surrogate1","surrogate2","entityReplacer","appendText","xt","lineEnd","linePattern","lineStart","parseStack","currentNSMap","closeMap","tagStart","localNSMap","endMatch","endIgnoreCaseMach","parseInstruction","parseDCC","ElementAttributes","parseElementStartPart","closed","fixSelfClosed","locator2","copyLocator","parseHtmlSpecialContent","addAttribute","qname","startIndex","attributeNames","addValue","attrName","setTagName","nsp","nsPrefix","_copy","ns","elStartEnd","elEndStart","matchs","pubid","sysid","lastMatch","endDTD","getLocalName","notEmptyString","splitOnASCIIWhitespace","orderedSetReducer","toOrderedSet","arrayIncludes","_extends","Class","Super","pt","NodeType","ATTRIBUTE_NODE","CDATA_SECTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","PROCESSING_INSTRUCTION_NODE","COMMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","NOTATION_NODE","ExceptionCode","ExceptionMessage","HIERARCHY_REQUEST_ERR","INDEX_SIZE_ERR","DOMSTRING_SIZE_ERR","NOT_FOUND_ERR","WRONG_DOCUMENT_ERR","INVALID_CHARACTER_ERR","NO_DATA_ALLOWED_ERR","NO_MODIFICATION_ALLOWED_ERR","INUSE_ATTRIBUTE_ERR","NOT_SUPPORTED_ERR","INVALID_STATE_ERR","INVALID_MODIFICATION_ERR","NAMESPACE_ERR","INVALID_ACCESS_ERR","DOMException","NodeList","LiveNodeList","refresh","_node","_refresh","_updateLiveList","inc","_inc","ls","__set__","$$length","NamedNodeMap","_findNodeIndex","_addNamedNode","newAttr","oldAttr","ownerElement","_onRemoveAttribute","_onAddAttribute","_removeNamedNode","_xmlEncoder","_visitNode","Document","_nsMap","_onUpdateChild","newChild","cs","_removeChild","lastChild","hasValidParentNodeType","hasInsertableNodeType","isElementNode","isTextNode","isDocTypeNode","isElementInsertionPossible","parentChildNodes","docTypeNode","isElementReplacementPossible","hasElementChildThatIsNotChild","assertPreInsertionValidity1to5","assertPreInsertionValidityInDocument","nodeChildNodes","nodeChildElements","parentElementChild","assertPreReplacementValidityInDocument","hasDoctypeChildThatIsNotChild","_insertBefore","_inDocumentAssertion","cp","newFirst","newLast","_appendSingleChild","Attr","CharacterData","Text","Comment","CDATASection","DocumentType","Notation","Entity","EntityReference","DocumentFragment","ProcessingInstruction","nodeSerializeToString","isHtml","nodeFilter","refNode","lookupPrefix","visibleNamespaces","namespace","needNamespaceDefine","addSerializedAttribute","qualifiedName","prefixedNodeName","defaultNS","ai","nsi","internalSubset","importNode","deep","node2","cloneNode","attrs2","_ownerElement","getNamedItem","setNamedItem","setNamedItemNS","getNamedItemNS","removeNamedItem","removeNamedItemNS","refChild","replaceChild","oldChild","hasChildNodes","appendData","isSupported","hasAttributes","lookupNamespaceURI","isDefaultNamespace","importedNode","rtv","getElementsByClassName","classNames","classNamesSet","nodeClassNames","nodeClassNamesSet","every","createAttribute","specified","createEntityReference","getAttributeNode","removeAttribute","removeAttributeNode","setAttributeNodeNS","removeAttributeNS","old","getAttributeNodeNS","hasAttributeNS","setAttributeNS","substringData","insertData","replaceData","deleteData","splitText","newText","newNode","getTextContent","scrollType","definer","createDefiner","scrollIntoView","innerDiv","spanA","spanB","_options","hidden","wrapper","wordSpacing","lineHeight","verticalAlign","flexDirection","flexWrap","_element","getElement","resizeFunc","orientationChangeFunc","clientWidth","containerStyles","containerPadding","_windowBounds","bodyStyles","bodyPadding","rulesArray","scope","getSheet","Views","_views","optsSettings","renditionQueue","getContainer","_stageSize","orientationTimeout","resizeTimeout","stageSize","winBounds","handleNextPrePaginated","paginatedLocation","scrolledLocation","pageHeight","vertical","sections","startPos","stopPos","currPage","endPage","tempStartPage","startPage","offsetPrev","offsetNext","_container","silent","calculate","setLayout","forceUpdate","defaultScrolledOverflow","viewContents","opts1","isPlainFunction","normalizeOpts","gs","searchString","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","symbolTag"],"mappings":"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","file":"js/readBook.d7f8237e.js","sourcesContent":["var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","export const EPUBJS_VERSION = \"0.3\";\n\n// Dom events to listen for\nexport const DOM_EVENTS = [\"keydown\", \"keyup\", \"keypressed\", \"mouseup\", \"mousedown\", \"mousemove\", \"click\", \"touchend\", \"touchstart\", \"touchmove\"];\n\nexport const EVENTS = {\n BOOK : {\n OPEN_FAILED : \"openFailed\"\n },\n CONTENTS : {\n EXPAND : \"expand\",\n RESIZE : \"resize\",\n SELECTED : \"selected\",\n SELECTED_RANGE : \"selectedRange\",\n LINK_CLICKED : \"linkClicked\"\n },\n LOCATIONS : {\n CHANGED : \"changed\"\n },\n MANAGERS : {\n RESIZE : \"resize\",\n RESIZED : \"resized\",\n ORIENTATION_CHANGE : \"orientationchange\",\n ADDED : \"added\",\n SCROLL : \"scroll\",\n SCROLLED : \"scrolled\",\n REMOVED : \"removed\",\n },\n VIEWS : {\n AXIS: \"axis\",\n WRITING_MODE: \"writingMode\",\n LOAD_ERROR : \"loaderror\",\n RENDERED : \"rendered\",\n RESIZED : \"resized\",\n DISPLAYED : \"displayed\",\n SHOWN : \"shown\",\n HIDDEN : \"hidden\",\n MARK_CLICKED : \"markClicked\"\n },\n RENDITION : {\n STARTED : \"started\",\n ATTACHED : \"attached\",\n DISPLAYED : \"displayed\",\n DISPLAY_ERROR : \"displayerror\",\n RENDERED : \"rendered\",\n REMOVED : \"removed\",\n RESIZED : \"resized\",\n ORIENTATION_CHANGE : \"orientationchange\",\n LOCATION_CHANGED : \"locationChanged\",\n RELOCATED : \"relocated\",\n MARK_CLICKED : \"markClicked\",\n SELECTED : \"selected\",\n LAYOUT: \"layout\"\n },\n LAYOUT : {\n UPDATED : \"updated\"\n },\n ANNOTATION : {\n ATTACH : \"attach\",\n DETACH : \"detach\"\n }\n}\n","/**\n * Core Utilities and Helpers\n * @module Core\n*/\nimport { DOMParser as XMLDOMParser } from \"@xmldom/xmldom\";\n\n/**\n * Vendor prefixed requestAnimationFrame\n * @returns {function} requestAnimationFrame\n * @memberof Core\n */\nexport const requestAnimationFrame = (typeof window != \"undefined\") ? (window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame) : false;\nconst ELEMENT_NODE = 1;\nconst TEXT_NODE = 3;\nconst COMMENT_NODE = 8;\nconst DOCUMENT_NODE = 9;\nconst _URL = typeof URL != \"undefined\" ? URL : (typeof window != \"undefined\" ? (window.URL || window.webkitURL || window.mozURL) : undefined);\n\n/**\n * Generates a UUID\n * based on: http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript\n * @returns {string} uuid\n * @memberof Core\n */\nexport function uuid() {\n\tvar d = new Date().getTime();\n\tvar uuid = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n\t\tvar r = (d + Math.random()*16)%16 | 0;\n\t\td = Math.floor(d/16);\n\t\treturn (c==\"x\" ? r : (r&0x7|0x8)).toString(16);\n\t});\n\treturn uuid;\n}\n\n/**\n * Gets the height of a document\n * @returns {number} height\n * @memberof Core\n */\nexport function documentHeight() {\n\treturn Math.max(\n\t\t\tdocument.documentElement.clientHeight,\n\t\t\tdocument.body.scrollHeight,\n\t\t\tdocument.documentElement.scrollHeight,\n\t\t\tdocument.body.offsetHeight,\n\t\t\tdocument.documentElement.offsetHeight\n\t);\n}\n\n/**\n * Checks if a node is an element\n * @param {object} obj\n * @returns {boolean}\n * @memberof Core\n */\nexport function isElement(obj) {\n\treturn !!(obj && obj.nodeType == 1);\n}\n\n/**\n * @param {any} n\n * @returns {boolean}\n * @memberof Core\n */\nexport function isNumber(n) {\n\treturn !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * @param {any} n\n * @returns {boolean}\n * @memberof Core\n */\nexport function isFloat(n) {\n\tlet f = parseFloat(n);\n\n\tif (isNumber(n) === false) {\n\t\treturn false;\n\t}\n\n\tif (typeof n === \"string\" && n.indexOf(\".\") > -1) {\n\t\treturn true;\n\t}\n\n\treturn Math.floor(f) !== f;\n}\n\n/**\n * Get a prefixed css property\n * @param {string} unprefixed\n * @returns {string}\n * @memberof Core\n */\nexport function prefixed(unprefixed) {\n\tvar vendors = [\"Webkit\", \"webkit\", \"Moz\", \"O\", \"ms\" ];\n\tvar prefixes = [\"-webkit-\", \"-webkit-\", \"-moz-\", \"-o-\", \"-ms-\"];\n\tvar lower = unprefixed.toLowerCase();\n\tvar length = vendors.length;\n\n\tif (typeof(document) === \"undefined\" || typeof(document.body.style[lower]) != \"undefined\") {\n\t\treturn unprefixed;\n\t}\n\n\tfor (var i = 0; i < length; i++) {\n\t\tif (typeof(document.body.style[prefixes[i] + lower]) != \"undefined\") {\n\t\t\treturn prefixes[i] + lower;\n\t\t}\n\t}\n\n\treturn unprefixed;\n}\n\n/**\n * Apply defaults to an object\n * @param {object} obj\n * @returns {object}\n * @memberof Core\n */\nexport function defaults(obj) {\n\tfor (var i = 1, length = arguments.length; i < length; i++) {\n\t\tvar source = arguments[i];\n\t\tfor (var prop in source) {\n\t\t\tif (obj[prop] === void 0) obj[prop] = source[prop];\n\t\t}\n\t}\n\treturn obj;\n}\n\n/**\n * Extend properties of an object\n * @param {object} target\n * @returns {object}\n * @memberof Core\n */\nexport function extend(target) {\n\tvar sources = [].slice.call(arguments, 1);\n\tsources.forEach(function (source) {\n\t\tif(!source) return;\n\t\tObject.getOwnPropertyNames(source).forEach(function(propName) {\n\t\t\tObject.defineProperty(target, propName, Object.getOwnPropertyDescriptor(source, propName));\n\t\t});\n\t});\n\treturn target;\n}\n\n/**\n * Fast quicksort insert for sorted array -- based on:\n * http://stackoverflow.com/questions/1344500/efficient-way-to-insert-a-number-into-a-sorted-array-of-numbers\n * @param {any} item\n * @param {array} array\n * @param {function} [compareFunction]\n * @returns {number} location (in array)\n * @memberof Core\n */\nexport function insert(item, array, compareFunction) {\n\tvar location = locationOf(item, array, compareFunction);\n\tarray.splice(location, 0, item);\n\n\treturn location;\n}\n\n/**\n * Finds where something would fit into a sorted array\n * @param {any} item\n * @param {array} array\n * @param {function} [compareFunction]\n * @param {function} [_start]\n * @param {function} [_end]\n * @returns {number} location (in array)\n * @memberof Core\n */\nexport function locationOf(item, array, compareFunction, _start, _end) {\n\tvar start = _start || 0;\n\tvar end = _end || array.length;\n\tvar pivot = parseInt(start + (end - start) / 2);\n\tvar compared;\n\tif(!compareFunction){\n\t\tcompareFunction = function(a, b) {\n\t\t\tif(a > b) return 1;\n\t\t\tif(a < b) return -1;\n\t\t\tif(a == b) return 0;\n\t\t};\n\t}\n\tif(end-start <= 0) {\n\t\treturn pivot;\n\t}\n\n\tcompared = compareFunction(array[pivot], item);\n\tif(end-start === 1) {\n\t\treturn compared >= 0 ? pivot : pivot + 1;\n\t}\n\tif(compared === 0) {\n\t\treturn pivot;\n\t}\n\tif(compared === -1) {\n\t\treturn locationOf(item, array, compareFunction, pivot, end);\n\t} else{\n\t\treturn locationOf(item, array, compareFunction, start, pivot);\n\t}\n}\n\n/**\n * Finds index of something in a sorted array\n * Returns -1 if not found\n * @param {any} item\n * @param {array} array\n * @param {function} [compareFunction]\n * @param {function} [_start]\n * @param {function} [_end]\n * @returns {number} index (in array) or -1\n * @memberof Core\n */\nexport function indexOfSorted(item, array, compareFunction, _start, _end) {\n\tvar start = _start || 0;\n\tvar end = _end || array.length;\n\tvar pivot = parseInt(start + (end - start) / 2);\n\tvar compared;\n\tif(!compareFunction){\n\t\tcompareFunction = function(a, b) {\n\t\t\tif(a > b) return 1;\n\t\t\tif(a < b) return -1;\n\t\t\tif(a == b) return 0;\n\t\t};\n\t}\n\tif(end-start <= 0) {\n\t\treturn -1; // Not found\n\t}\n\n\tcompared = compareFunction(array[pivot], item);\n\tif(end-start === 1) {\n\t\treturn compared === 0 ? pivot : -1;\n\t}\n\tif(compared === 0) {\n\t\treturn pivot; // Found\n\t}\n\tif(compared === -1) {\n\t\treturn indexOfSorted(item, array, compareFunction, pivot, end);\n\t} else{\n\t\treturn indexOfSorted(item, array, compareFunction, start, pivot);\n\t}\n}\n/**\n * Find the bounds of an element\n * taking padding and margin into account\n * @param {element} el\n * @returns {{ width: Number, height: Number}}\n * @memberof Core\n */\nexport function bounds(el) {\n\n\tvar style = window.getComputedStyle(el);\n\tvar widthProps = [\"width\", \"paddingRight\", \"paddingLeft\", \"marginRight\", \"marginLeft\", \"borderRightWidth\", \"borderLeftWidth\"];\n\tvar heightProps = [\"height\", \"paddingTop\", \"paddingBottom\", \"marginTop\", \"marginBottom\", \"borderTopWidth\", \"borderBottomWidth\"];\n\n\tvar width = 0;\n\tvar height = 0;\n\n\twidthProps.forEach(function(prop){\n\t\twidth += parseFloat(style[prop]) || 0;\n\t});\n\n\theightProps.forEach(function(prop){\n\t\theight += parseFloat(style[prop]) || 0;\n\t});\n\n\treturn {\n\t\theight: height,\n\t\twidth: width\n\t};\n\n}\n\n/**\n * Find the bounds of an element\n * taking padding, margin and borders into account\n * @param {element} el\n * @returns {{ width: Number, height: Number}}\n * @memberof Core\n */\nexport function borders(el) {\n\n\tvar style = window.getComputedStyle(el);\n\tvar widthProps = [\"paddingRight\", \"paddingLeft\", \"marginRight\", \"marginLeft\", \"borderRightWidth\", \"borderLeftWidth\"];\n\tvar heightProps = [\"paddingTop\", \"paddingBottom\", \"marginTop\", \"marginBottom\", \"borderTopWidth\", \"borderBottomWidth\"];\n\n\tvar width = 0;\n\tvar height = 0;\n\n\twidthProps.forEach(function(prop){\n\t\twidth += parseFloat(style[prop]) || 0;\n\t});\n\n\theightProps.forEach(function(prop){\n\t\theight += parseFloat(style[prop]) || 0;\n\t});\n\n\treturn {\n\t\theight: height,\n\t\twidth: width\n\t};\n\n}\n\n/**\n * Find the bounds of any node\n * allows for getting bounds of text nodes by wrapping them in a range\n * @param {node} node\n * @returns {BoundingClientRect}\n * @memberof Core\n */\nexport function nodeBounds(node) {\n\tlet elPos;\n\tlet doc = node.ownerDocument;\n\tif(node.nodeType == Node.TEXT_NODE){\n\t\tlet elRange = doc.createRange();\n\t\telRange.selectNodeContents(node);\n\t\telPos = elRange.getBoundingClientRect();\n\t} else {\n\t\telPos = node.getBoundingClientRect();\n\t}\n\treturn elPos;\n}\n\n/**\n * Find the equivalent of getBoundingClientRect of a browser window\n * @returns {{ width: Number, height: Number, top: Number, left: Number, right: Number, bottom: Number }}\n * @memberof Core\n */\nexport function windowBounds() {\n\n\tvar width = window.innerWidth;\n\tvar height = window.innerHeight;\n\n\treturn {\n\t\ttop: 0,\n\t\tleft: 0,\n\t\tright: width,\n\t\tbottom: height,\n\t\twidth: width,\n\t\theight: height\n\t};\n\n}\n\n/**\n * Gets the index of a node in its parent\n * @param {Node} node\n * @param {string} typeId\n * @return {number} index\n * @memberof Core\n */\nexport function indexOfNode(node, typeId) {\n\tvar parent = node.parentNode;\n\tvar children = parent.childNodes;\n\tvar sib;\n\tvar index = -1;\n\tfor (var i = 0; i < children.length; i++) {\n\t\tsib = children[i];\n\t\tif (sib.nodeType === typeId) {\n\t\t\tindex++;\n\t\t}\n\t\tif (sib == node) break;\n\t}\n\n\treturn index;\n}\n\n/**\n * Gets the index of a text node in its parent\n * @param {node} textNode\n * @returns {number} index\n * @memberof Core\n */\nexport function indexOfTextNode(textNode) {\n\treturn indexOfNode(textNode, TEXT_NODE);\n}\n\n/**\n * Gets the index of an element node in its parent\n * @param {element} elementNode\n * @returns {number} index\n * @memberof Core\n */\nexport function indexOfElementNode(elementNode) {\n\treturn indexOfNode(elementNode, ELEMENT_NODE);\n}\n\n/**\n * Check if extension is xml\n * @param {string} ext\n * @returns {boolean}\n * @memberof Core\n */\nexport function isXml(ext) {\n\treturn [\"xml\", \"opf\", \"ncx\"].indexOf(ext) > -1;\n}\n\n/**\n * Create a new blob\n * @param {any} content\n * @param {string} mime\n * @returns {Blob}\n * @memberof Core\n */\nexport function createBlob(content, mime){\n\treturn new Blob([content], {type : mime });\n}\n\n/**\n * Create a new blob url\n * @param {any} content\n * @param {string} mime\n * @returns {string} url\n * @memberof Core\n */\nexport function createBlobUrl(content, mime){\n\tvar tempUrl;\n\tvar blob = createBlob(content, mime);\n\n\ttempUrl = _URL.createObjectURL(blob);\n\n\treturn tempUrl;\n}\n\n/**\n * Remove a blob url\n * @param {string} url\n * @memberof Core\n */\nexport function revokeBlobUrl(url){\n\treturn _URL.revokeObjectURL(url);\n}\n\n/**\n * Create a new base64 encoded url\n * @param {any} content\n * @param {string} mime\n * @returns {string} url\n * @memberof Core\n */\nexport function createBase64Url(content, mime){\n\tvar data;\n\tvar datauri;\n\n\tif (typeof(content) !== \"string\") {\n\t\t// Only handles strings\n\t\treturn;\n\t}\n\n\tdata = btoa(content);\n\n\tdatauri = \"data:\" + mime + \";base64,\" + data;\n\n\treturn datauri;\n}\n\n/**\n * Get type of an object\n * @param {object} obj\n * @returns {string} type\n * @memberof Core\n */\nexport function type(obj){\n\treturn Object.prototype.toString.call(obj).slice(8, -1);\n}\n\n/**\n * Parse xml (or html) markup\n * @param {string} markup\n * @param {string} mime\n * @param {boolean} forceXMLDom force using xmlDom to parse instead of native parser\n * @returns {document} document\n * @memberof Core\n */\nexport function parse(markup, mime, forceXMLDom) {\n\tvar doc;\n\tvar Parser;\n\n\tif (typeof DOMParser === \"undefined\" || forceXMLDom) {\n\t\tParser = XMLDOMParser;\n\t} else {\n\t\tParser = DOMParser;\n\t}\n\n\t// Remove byte order mark before parsing\n\t// https://www.w3.org/International/questions/qa-byte-order-mark\n\tif(markup.charCodeAt(0) === 0xFEFF) {\n\t\tmarkup = markup.slice(1);\n\t}\n\n\tdoc = new Parser().parseFromString(markup, mime);\n\n\treturn doc;\n}\n\n/**\n * querySelector polyfill\n * @param {element} el\n * @param {string} sel selector string\n * @returns {element} element\n * @memberof Core\n */\nexport function qs(el, sel) {\n\tvar elements;\n\tif (!el) {\n\t\tthrow new Error(\"No Element Provided\");\n\t}\n\n\tif (typeof el.querySelector != \"undefined\") {\n\t\treturn el.querySelector(sel);\n\t} else {\n\t\telements = el.getElementsByTagName(sel);\n\t\tif (elements.length) {\n\t\t\treturn elements[0];\n\t\t}\n\t}\n}\n\n/**\n * querySelectorAll polyfill\n * @param {element} el\n * @param {string} sel selector string\n * @returns {element[]} elements\n * @memberof Core\n */\nexport function qsa(el, sel) {\n\n\tif (typeof el.querySelector != \"undefined\") {\n\t\treturn el.querySelectorAll(sel);\n\t} else {\n\t\treturn el.getElementsByTagName(sel);\n\t}\n}\n\n/**\n * querySelector by property\n * @param {element} el\n * @param {string} sel selector string\n * @param {object[]} props\n * @returns {element[]} elements\n * @memberof Core\n */\nexport function qsp(el, sel, props) {\n\tvar q, filtered;\n\tif (typeof el.querySelector != \"undefined\") {\n\t\tsel += \"[\";\n\t\tfor (var prop in props) {\n\t\t\tsel += prop + \"~='\" + props[prop] + \"'\";\n\t\t}\n\t\tsel += \"]\";\n\t\treturn el.querySelector(sel);\n\t} else {\n\t\tq = el.getElementsByTagName(sel);\n\t\tfiltered = Array.prototype.slice.call(q, 0).filter(function(el) {\n\t\t\tfor (var prop in props) {\n\t\t\t\tif(el.getAttribute(prop) === props[prop]){\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\n\t\tif (filtered) {\n\t\t\treturn filtered[0];\n\t\t}\n\t}\n}\n\n/**\n * Sprint through all text nodes in a document\n * @memberof Core\n * @param {element} root element to start with\n * @param {function} func function to run on each element\n */\nexport function sprint(root, func) {\n\tvar doc = root.ownerDocument || root;\n\tif (typeof(doc.createTreeWalker) !== \"undefined\") {\n\t\ttreeWalker(root, func, NodeFilter.SHOW_TEXT);\n\t} else {\n\t\twalk(root, function(node) {\n\t\t\tif (node && node.nodeType === 3) { // Node.TEXT_NODE\n\t\t\t\tfunc(node);\n\t\t\t}\n\t\t}, true);\n\t}\n}\n\n/**\n * Create a treeWalker\n * @memberof Core\n * @param {element} root element to start with\n * @param {function} func function to run on each element\n * @param {function | object} filter function or object to filter with\n */\nexport function treeWalker(root, func, filter) {\n\tvar treeWalker = document.createTreeWalker(root, filter, null, false);\n\tlet node;\n\twhile ((node = treeWalker.nextNode())) {\n\t\tfunc(node);\n\t}\n}\n\n/**\n * @memberof Core\n * @param {node} node\n * @param {callback} return false for continue,true for break inside callback\n */\nexport function walk(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tnode = node.firstChild;\n\tif(node){\n\t\tdo{\n\t\t\tlet walked = walk(node,callback);\n\t\t\tif(walked){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tnode = node.nextSibling;\n\t\t} while(node);\n\t}\n}\n\n/**\n * Convert a blob to a base64 encoded string\n * @param {Blog} blob\n * @returns {string}\n * @memberof Core\n */\nexport function blob2base64(blob) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar reader = new FileReader();\n\t\treader.readAsDataURL(blob);\n\t\treader.onloadend = function() {\n\t\t\tresolve(reader.result);\n\t\t};\n\t});\n}\n\n\n/**\n * Creates a new pending promise and provides methods to resolve or reject it.\n * From: https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Deferred#backwards_forwards_compatible\n * @memberof Core\n */\nexport function defer() {\n\t/* A method to resolve the associated Promise with the value passed.\n\t * If the promise is already settled it does nothing.\n\t *\n\t * @param {anything} value : This value is used to resolve the promise\n\t * If the value is a Promise then the associated promise assumes the state\n\t * of Promise passed as value.\n\t */\n\tthis.resolve = null;\n\n\t/* A method to reject the associated Promise with the value passed.\n\t * If the promise is already settled it does nothing.\n\t *\n\t * @param {anything} reason: The reason for the rejection of the Promise.\n\t * Generally its an Error object. If however a Promise is passed, then the Promise\n\t * itself will be the reason for rejection no matter the state of the Promise.\n\t */\n\tthis.reject = null;\n\n\tthis.id = uuid();\n\n\t/* A newly created Pomise object.\n\t * Initially in pending state.\n\t */\n\tthis.promise = new Promise((resolve, reject) => {\n\t\tthis.resolve = resolve;\n\t\tthis.reject = reject;\n\t});\n\tObject.freeze(this);\n}\n\n/**\n * querySelector with filter by epub type\n * @param {element} html\n * @param {string} element element type to find\n * @param {string} type epub type to find\n * @returns {element[]} elements\n * @memberof Core\n */\nexport function querySelectorByType(html, element, type){\n\tvar query;\n\tif (typeof html.querySelector != \"undefined\") {\n\t\tquery = html.querySelector(`${element}[*|type=\"${type}\"]`);\n\t}\n\t// Handle IE not supporting namespaced epub:type in querySelector\n\tif(!query || query.length === 0) {\n\t\tquery = qsa(html, element);\n\t\tfor (var i = 0; i < query.length; i++) {\n\t\t\tif(query[i].getAttributeNS(\"http://www.idpf.org/2007/ops\", \"type\") === type ||\n\t\t\t\t query[i].getAttribute(\"epub:type\") === type) {\n\t\t\t\treturn query[i];\n\t\t\t}\n\t\t}\n\t} else {\n\t\treturn query;\n\t}\n}\n\n/**\n * Find direct descendents of an element\n * @param {element} el\n * @returns {element[]} children\n * @memberof Core\n */\nexport function findChildren(el) {\n\tvar result = [];\n\tvar childNodes = el.childNodes;\n\tfor (var i = 0; i < childNodes.length; i++) {\n\t\tlet node = childNodes[i];\n\t\tif (node.nodeType === 1) {\n\t\t\tresult.push(node);\n\t\t}\n\t}\n\treturn result;\n}\n\n/**\n * Find all parents (ancestors) of an element\n * @param {element} node\n * @returns {element[]} parents\n * @memberof Core\n */\nexport function parents(node) {\n\tvar nodes = [node];\n\tfor (; node; node = node.parentNode) {\n\t\tnodes.unshift(node);\n\t}\n\treturn nodes\n}\n\n/**\n * Find all direct descendents of a specific type\n * @param {element} el\n * @param {string} nodeName\n * @param {boolean} [single]\n * @returns {element[]} children\n * @memberof Core\n */\nexport function filterChildren(el, nodeName, single) {\n\tvar result = [];\n\tvar childNodes = el.childNodes;\n\tfor (var i = 0; i < childNodes.length; i++) {\n\t\tlet node = childNodes[i];\n\t\tif (node.nodeType === 1 && node.nodeName.toLowerCase() === nodeName) {\n\t\t\tif (single) {\n\t\t\t\treturn node;\n\t\t\t} else {\n\t\t\t\tresult.push(node);\n\t\t\t}\n\t\t}\n\t}\n\tif (!single) {\n\t\treturn result;\n\t}\n}\n\n/**\n * Filter all parents (ancestors) with tag name\n * @param {element} node\n * @param {string} tagname\n * @returns {element[]} parents\n * @memberof Core\n */\nexport function getParentByTagName(node, tagname) {\n\tlet parent;\n\tif (node === null || tagname === '') return;\n\tparent = node.parentNode;\n\twhile (parent.nodeType === 1) {\n\t\tif (parent.tagName.toLowerCase() === tagname) {\n\t\t\treturn parent;\n\t\t}\n\t\tparent = parent.parentNode;\n\t}\n}\n\n/**\n * Lightweight Polyfill for DOM Range\n * @class\n * @memberof Core\n */\nexport class RangeObject {\n\tconstructor() {\n\t\tthis.collapsed = false;\n\t\tthis.commonAncestorContainer = undefined;\n\t\tthis.endContainer = undefined;\n\t\tthis.endOffset = undefined;\n\t\tthis.startContainer = undefined;\n\t\tthis.startOffset = undefined;\n\t}\n\n\tsetStart(startNode, startOffset) {\n\t\tthis.startContainer = startNode;\n\t\tthis.startOffset = startOffset;\n\n\t\tif (!this.endContainer) {\n\t\t\tthis.collapse(true);\n\t\t} else {\n\t\t\tthis.commonAncestorContainer = this._commonAncestorContainer();\n\t\t}\n\n\t\tthis._checkCollapsed();\n\t}\n\n\tsetEnd(endNode, endOffset) {\n\t\tthis.endContainer = endNode;\n\t\tthis.endOffset = endOffset;\n\n\t\tif (!this.startContainer) {\n\t\t\tthis.collapse(false);\n\t\t} else {\n\t\t\tthis.collapsed = false;\n\t\t\tthis.commonAncestorContainer = this._commonAncestorContainer();\n\t\t}\n\n\t\tthis._checkCollapsed();\n\t}\n\n\tcollapse(toStart) {\n\t\tthis.collapsed = true;\n\t\tif (toStart) {\n\t\t\tthis.endContainer = this.startContainer;\n\t\t\tthis.endOffset = this.startOffset;\n\t\t\tthis.commonAncestorContainer = this.startContainer.parentNode;\n\t\t} else {\n\t\t\tthis.startContainer = this.endContainer;\n\t\t\tthis.startOffset = this.endOffset;\n\t\t\tthis.commonAncestorContainer = this.endOffset.parentNode;\n\t\t}\n\t}\n\n\tselectNode(referenceNode) {\n\t\tlet parent = referenceNode.parentNode;\n\t\tlet index = Array.prototype.indexOf.call(parent.childNodes, referenceNode);\n\t\tthis.setStart(parent, index);\n\t\tthis.setEnd(parent, index + 1);\n\t}\n\n\tselectNodeContents(referenceNode) {\n\t\tlet end = referenceNode.childNodes[referenceNode.childNodes - 1];\n\t\tlet endIndex = (referenceNode.nodeType === 3) ?\n\t\t\t\treferenceNode.textContent.length : parent.childNodes.length;\n\t\tthis.setStart(referenceNode, 0);\n\t\tthis.setEnd(referenceNode, endIndex);\n\t}\n\n\t_commonAncestorContainer(startContainer, endContainer) {\n\t\tvar startParents = parents(startContainer || this.startContainer);\n\t\tvar endParents = parents(endContainer || this.endContainer);\n\n\t\tif (startParents[0] != endParents[0]) return undefined;\n\n\t\tfor (var i = 0; i < startParents.length; i++) {\n\t\t\tif (startParents[i] != endParents[i]) {\n\t\t\t\treturn startParents[i - 1];\n\t\t\t}\n\t\t}\n\t}\n\n\t_checkCollapsed() {\n\t\tif (this.startContainer === this.endContainer &&\n\t\t\t\tthis.startOffset === this.endOffset) {\n\t\t\tthis.collapsed = true;\n\t\t} else {\n\t\t\tthis.collapsed = false;\n\t\t}\n\t}\n\n\ttoString() {\n\t\t// TODO: implement walking between start and end to find text\n\t}\n}\n","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","import Path from \"./path\";\nimport path from \"path-webpack\";\n\n/**\n * creates a Url object for parsing and manipulation of a url string\n * @param\t{string} urlString\ta url string (relative or absolute)\n * @param\t{string} [baseString] optional base for the url,\n * default to window.location.href\n */\nclass Url {\n\tconstructor(urlString, baseString) {\n\t\tvar absolute = (urlString.indexOf(\"://\") > -1);\n\t\tvar pathname = urlString;\n\t\tvar basePath;\n\n\t\tthis.Url = undefined;\n\t\tthis.href = urlString;\n\t\tthis.protocol = \"\";\n\t\tthis.origin = \"\";\n\t\tthis.hash = \"\";\n\t\tthis.hash = \"\";\n\t\tthis.search = \"\";\n\t\tthis.base = baseString;\n\n\t\tif (!absolute &&\n\t\t\t\tbaseString !== false &&\n\t\t\t\ttypeof(baseString) !== \"string\" &&\n\t\t\t\twindow && window.location) {\n\t\t\tthis.base = window.location.href;\n\t\t}\n\n\t\t// URL Polyfill doesn't throw an error if base is empty\n\t\tif (absolute || this.base) {\n\t\t\ttry {\n\t\t\t\tif (this.base) { // Safari doesn't like an undefined base\n\t\t\t\t\tthis.Url = new URL(urlString, this.base);\n\t\t\t\t} else {\n\t\t\t\t\tthis.Url = new URL(urlString);\n\t\t\t\t}\n\t\t\t\tthis.href = this.Url.href;\n\n\t\t\t\tthis.protocol = this.Url.protocol;\n\t\t\t\tthis.origin = this.Url.origin;\n\t\t\t\tthis.hash = this.Url.hash;\n\t\t\t\tthis.search = this.Url.search;\n\n\t\t\t\tpathname = this.Url.pathname + (this.Url.search ? this.Url.search : '');\n\t\t\t} catch (e) {\n\t\t\t\t// Skip URL parsing\n\t\t\t\tthis.Url = undefined;\n\t\t\t\t// resolve the pathname from the base\n\t\t\t\tif (this.base) {\n\t\t\t\t\tbasePath = new Path(this.base);\n\t\t\t\t\tpathname = basePath.resolve(pathname);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.Path = new Path(pathname);\n\n\t\tthis.directory = this.Path.directory;\n\t\tthis.filename = this.Path.filename;\n\t\tthis.extension = this.Path.extension;\n\n\t}\n\n\t/**\n\t * @returns {Path}\n\t */\n\tpath () {\n\t\treturn this.Path;\n\t}\n\n\t/**\n\t * Resolves a relative path to a absolute url\n\t * @param {string} what\n\t * @returns {string} url\n\t */\n\tresolve (what) {\n\t\tvar isAbsolute = (what.indexOf(\"://\") > -1);\n\t\tvar fullpath;\n\n\t\tif (isAbsolute) {\n\t\t\treturn what;\n\t\t}\n\n\t\tfullpath = path.resolve(this.directory, what);\n\t\treturn this.origin + fullpath;\n\t}\n\n\t/**\n\t * Resolve a path relative to the url\n\t * @param {string} what\n\t * @returns {string} path\n\t */\n\trelative (what) {\n\t\treturn path.relative(what, this.directory);\n\t}\n\n\t/**\n\t * @returns {string}\n\t */\n\ttoString () {\n\t\treturn this.href;\n\t}\n}\n\nexport default Url;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","\"use strict\";\n\nmodule.exports = function () {\n\tvar assign = Object.assign, obj;\n\tif (typeof assign !== \"function\") return false;\n\tobj = { foo: \"raz\" };\n\tassign(obj, { bar: \"dwa\" }, { trzy: \"trzy\" });\n\treturn obj.foo + obj.bar + obj.trzy === \"razdwatrzy\";\n};\n","'use strict';\nvar global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar handlePrototype = function (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n if (DOMIterables[COLLECTION_NAME]) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);\n }\n}\n\nhandlePrototype(DOMTokenListPrototype);\n","\"use strict\";\n\nvar isFunction = require(\"../function/is\");\n\nvar classRe = /^\\s*class[\\s{/}]/, functionToString = Function.prototype.toString;\n\nmodule.exports = function (value) {\n\tif (!isFunction(value)) return false;\n\tif (classRe.test(functionToString.call(value))) return false;\n\treturn true;\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","import { qs, qsa } from \"./core\";\nimport Url from \"./url\";\nimport Path from \"./path\";\n\nexport function replaceBase(doc, section){\n\tvar base;\n\tvar head;\n\tvar url = section.url;\n\tvar absolute = (url.indexOf(\"://\") > -1);\n\n\tif(!doc){\n\t\treturn;\n\t}\n\n\thead = qs(doc, \"head\");\n\tbase = qs(head, \"base\");\n\n\tif(!base) {\n\t\tbase = doc.createElement(\"base\");\n\t\thead.insertBefore(base, head.firstChild);\n\t}\n\n\t// Fix for Safari crashing if the url doesn't have an origin\n\tif (!absolute && window && window.location) {\n\t\turl = window.location.origin + url;\n\t}\n\n\tbase.setAttribute(\"href\", url);\n}\n\nexport function replaceCanonical(doc, section){\n\tvar head;\n\tvar link;\n\tvar url = section.canonical;\n\n\tif(!doc){\n\t\treturn;\n\t}\n\n\thead = qs(doc, \"head\");\n\tlink = qs(head, \"link[rel='canonical']\");\n\n\tif (link) {\n\t\tlink.setAttribute(\"href\", url);\n\t} else {\n\t\tlink = doc.createElement(\"link\");\n\t\tlink.setAttribute(\"rel\", \"canonical\");\n\t\tlink.setAttribute(\"href\", url);\n\t\thead.appendChild(link);\n\t}\n}\n\nexport function replaceMeta(doc, section){\n\tvar head;\n\tvar meta;\n\tvar id = section.idref;\n\tif(!doc){\n\t\treturn;\n\t}\n\n\thead = qs(doc, \"head\");\n\tmeta = qs(head, \"link[property='dc.identifier']\");\n\n\tif (meta) {\n\t\tmeta.setAttribute(\"content\", id);\n\t} else {\n\t\tmeta = doc.createElement(\"meta\");\n\t\tmeta.setAttribute(\"name\", \"dc.identifier\");\n\t\tmeta.setAttribute(\"content\", id);\n\t\thead.appendChild(meta);\n\t}\n}\n\n// TODO: move me to Contents\nexport function replaceLinks(contents, fn) {\n\n\tvar links = contents.querySelectorAll(\"a[href]\");\n\n\tif (!links.length) {\n\t\treturn;\n\t}\n\n\tvar base = qs(contents.ownerDocument, \"base\");\n\tvar location = base ? base.getAttribute(\"href\") : undefined;\n\tvar replaceLink = function(link){\n\t\tvar href = link.getAttribute(\"href\");\n\n\t\tif(href.indexOf(\"mailto:\") === 0){\n\t\t\treturn;\n\t\t}\n\n\t\tvar absolute = (href.indexOf(\"://\") > -1);\n\n\t\tif(absolute){\n\n\t\t\tlink.setAttribute(\"target\", \"_blank\");\n\n\t\t}else{\n\t\t\tvar linkUrl;\n\t\t\ttry {\n\t\t\t\tlinkUrl = new Url(href, location);\t\n\t\t\t} catch(error) {\n\t\t\t\t// NOOP\n\t\t\t}\n\n\t\t\tlink.onclick = function(){\n\n\t\t\t\tif(linkUrl && linkUrl.hash) {\n\t\t\t\t\tfn(linkUrl.Path.path + linkUrl.hash);\n\t\t\t\t} else if(linkUrl){\n\t\t\t\t\tfn(linkUrl.Path.path);\n\t\t\t\t} else {\n\t\t\t\t\tfn(href);\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\t}.bind(this);\n\n\tfor (var i = 0; i < links.length; i++) {\n\t\treplaceLink(links[i]);\n\t}\n\n\n}\n\nexport function substitute(content, urls, replacements) {\n\turls.forEach(function(url, i){\n\t\tif (url && replacements[i]) {\n\t\t\t// Account for special characters in the file name.\n\t\t\t// See https://stackoverflow.com/a/6318729.\n\t\t\turl = url.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\n\t\t\tcontent = content.replace(new RegExp(url, \"g\"), replacements[i]);\n\t\t}\n\t});\n\treturn content;\n}\n","\"use strict\";\n\nvar str = \"razdwatrzy\";\n\nmodule.exports = function () {\n\tif (typeof str.contains !== \"function\") return false;\n\treturn str.contains(\"dwa\") === true && str.contains(\"foo\") === false;\n};\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","\"use strict\";\n\nmodule.exports = function (fn) {\n\tif (typeof fn !== \"function\") throw new TypeError(fn + \" is not a function\");\n\treturn fn;\n};\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.assign : require(\"./shim\");\n","var dom = require('./dom')\nexports.DOMImplementation = dom.DOMImplementation\nexports.XMLSerializer = dom.XMLSerializer\nexports.DOMParser = require('./dom-parser').DOMParser\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","import EpubCFI from \"./epubcfi\";\nimport { nodeBounds } from \"./utils/core\";\n\n/**\n * Map text locations to CFI ranges\n * @class\n * @param {Layout} layout Layout to apply\n * @param {string} [direction=\"ltr\"] Text direction\n * @param {string} [axis=\"horizontal\"] vertical or horizontal axis\n * @param {boolean} [dev] toggle developer highlighting\n */\nclass Mapping {\n\tconstructor(layout, direction, axis, dev=false) {\n\t\tthis.layout = layout;\n\t\tthis.horizontal = (axis === \"horizontal\") ? true : false;\n\t\tthis.direction = direction || \"ltr\";\n\t\tthis._dev = dev;\n\t}\n\n\t/**\n\t * Find CFI pairs for entire section at once\n\t */\n\tsection(view) {\n\t\tvar ranges = this.findRanges(view);\n\t\tvar map = this.rangeListToCfiList(view.section.cfiBase, ranges);\n\n\t\treturn map;\n\t}\n\n\t/**\n\t * Find CFI pairs for a page\n\t * @param {Contents} contents Contents from view\n\t * @param {string} cfiBase string of the base for a cfi\n\t * @param {number} start position to start at\n\t * @param {number} end position to end at\n\t */\n\tpage(contents, cfiBase, start, end) {\n\t\tvar root = contents && contents.document ? contents.document.body : false;\n\t\tvar result;\n\n\t\tif (!root) {\n\t\t\treturn;\n\t\t}\n\n\t\tresult = this.rangePairToCfiPair(cfiBase, {\n\t\t\tstart: this.findStart(root, start, end),\n\t\t\tend: this.findEnd(root, start, end)\n\t\t});\n\n\t\tif (this._dev === true) {\n\t\t\tlet doc = contents.document;\n\t\t\tlet startRange = new EpubCFI(result.start).toRange(doc);\n\t\t\tlet endRange = new EpubCFI(result.end).toRange(doc);\n\n\t\t\tlet selection = doc.defaultView.getSelection();\n\t\t\tlet r = doc.createRange();\n\t\t\tselection.removeAllRanges();\n\t\t\tr.setStart(startRange.startContainer, startRange.startOffset);\n\t\t\tr.setEnd(endRange.endContainer, endRange.endOffset);\n\t\t\tselection.addRange(r);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Walk a node, preforming a function on each node it finds\n\t * @private\n\t * @param {Node} root Node to walkToNode\n\t * @param {function} func walk function\n\t * @return {*} returns the result of the walk function\n\t */\n\twalk(root, func) {\n\t\t// IE11 has strange issue, if root is text node IE throws exception on\n\t\t// calling treeWalker.nextNode(), saying\n\t\t// Unexpected call to method or property access instead of returning null value\n\t\tif(root && root.nodeType === Node.TEXT_NODE) {\n\t\t\treturn;\n\t\t}\n\t\t// safeFilter is required so that it can work in IE as filter is a function for IE\n\t\t// and for other browser filter is an object.\n\t\tvar filter = {\n\t\t\tacceptNode: function(node) {\n\t\t\t\tif (node.data.trim().length > 0) {\n\t\t\t\t\treturn NodeFilter.FILTER_ACCEPT;\n\t\t\t\t} else {\n\t\t\t\t\treturn NodeFilter.FILTER_REJECT;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tvar safeFilter = filter.acceptNode;\n\t\tsafeFilter.acceptNode = filter.acceptNode;\n\n\t\tvar treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, safeFilter, false);\n\t\tvar node;\n\t\tvar result;\n\t\twhile ((node = treeWalker.nextNode())) {\n\t\t\tresult = func(node);\n\t\t\tif(result) break;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfindRanges(view){\n\t\tvar columns = [];\n\t\tvar scrollWidth = view.contents.scrollWidth();\n\t\tvar spreads = Math.ceil( scrollWidth / this.layout.spreadWidth);\n\t\tvar count = spreads * this.layout.divisor;\n\t\tvar columnWidth = this.layout.columnWidth;\n\t\tvar gap = this.layout.gap;\n\t\tvar start, end;\n\n\t\tfor (var i = 0; i < count.pages; i++) {\n\t\t\tstart = (columnWidth + gap) * i;\n\t\t\tend = (columnWidth * (i+1)) + (gap * i);\n\t\t\tcolumns.push({\n\t\t\t\tstart: this.findStart(view.document.body, start, end),\n\t\t\t\tend: this.findEnd(view.document.body, start, end)\n\t\t\t});\n\t\t}\n\n\t\treturn columns;\n\t}\n\n\t/**\n\t * Find Start Range\n\t * @private\n\t * @param {Node} root root node\n\t * @param {number} start position to start at\n\t * @param {number} end position to end at\n\t * @return {Range}\n\t */\n\tfindStart(root, start, end){\n\t\tvar stack = [root];\n\t\tvar $el;\n\t\tvar found;\n\t\tvar $prev = root;\n\n\t\twhile (stack.length) {\n\n\t\t\t$el = stack.shift();\n\n\t\t\tfound = this.walk($el, (node) => {\n\t\t\t\tvar left, right, top, bottom;\n\t\t\t\tvar elPos;\n\t\t\t\tvar elRange;\n\n\n\t\t\t\telPos = nodeBounds(node);\n\n\t\t\t\tif (this.horizontal && this.direction === \"ltr\") {\n\n\t\t\t\t\tleft = this.horizontal ? elPos.left : elPos.top;\n\t\t\t\t\tright = this.horizontal ? elPos.right : elPos.bottom;\n\n\t\t\t\t\tif( left >= start && left <= end ) {\n\t\t\t\t\t\treturn node;\n\t\t\t\t\t} else if (right > start) {\n\t\t\t\t\t\treturn node;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$prev = node;\n\t\t\t\t\t\tstack.push(node);\n\t\t\t\t\t}\n\n\t\t\t\t} else if (this.horizontal && this.direction === \"rtl\") {\n\n\t\t\t\t\tleft = elPos.left;\n\t\t\t\t\tright = elPos.right;\n\n\t\t\t\t\tif( right <= end && right >= start ) {\n\t\t\t\t\t\treturn node;\n\t\t\t\t\t} else if (left < end) {\n\t\t\t\t\t\treturn node;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$prev = node;\n\t\t\t\t\t\tstack.push(node);\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttop = elPos.top;\n\t\t\t\t\tbottom = elPos.bottom;\n\n\t\t\t\t\tif( top >= start && top <= end ) {\n\t\t\t\t\t\treturn node;\n\t\t\t\t\t} else if (bottom > start) {\n\t\t\t\t\t\treturn node;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$prev = node;\n\t\t\t\t\t\tstack.push(node);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t});\n\n\t\t\tif(found) {\n\t\t\t\treturn this.findTextStartRange(found, start, end);\n\t\t\t}\n\n\t\t}\n\n\t\t// Return last element\n\t\treturn this.findTextStartRange($prev, start, end);\n\t}\n\n\t/**\n\t * Find End Range\n\t * @private\n\t * @param {Node} root root node\n\t * @param {number} start position to start at\n\t * @param {number} end position to end at\n\t * @return {Range}\n\t */\n\tfindEnd(root, start, end){\n\t\tvar stack = [root];\n\t\tvar $el;\n\t\tvar $prev = root;\n\t\tvar found;\n\n\t\twhile (stack.length) {\n\n\t\t\t$el = stack.shift();\n\n\t\t\tfound = this.walk($el, (node) => {\n\n\t\t\t\tvar left, right, top, bottom;\n\t\t\t\tvar elPos;\n\t\t\t\tvar elRange;\n\n\t\t\t\telPos = nodeBounds(node);\n\n\t\t\t\tif (this.horizontal && this.direction === \"ltr\") {\n\n\t\t\t\t\tleft = Math.round(elPos.left);\n\t\t\t\t\tright = Math.round(elPos.right);\n\n\t\t\t\t\tif(left > end && $prev) {\n\t\t\t\t\t\treturn $prev;\n\t\t\t\t\t} else if(right > end) {\n\t\t\t\t\t\treturn node;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$prev = node;\n\t\t\t\t\t\tstack.push(node);\n\t\t\t\t\t}\n\n\t\t\t\t} else if (this.horizontal && this.direction === \"rtl\") {\n\n\t\t\t\t\tleft = Math.round(this.horizontal ? elPos.left : elPos.top);\n\t\t\t\t\tright = Math.round(this.horizontal ? elPos.right : elPos.bottom);\n\n\t\t\t\t\tif(right < start && $prev) {\n\t\t\t\t\t\treturn $prev;\n\t\t\t\t\t} else if(left < start) {\n\t\t\t\t\t\treturn node;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$prev = node;\n\t\t\t\t\t\tstack.push(node);\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttop = Math.round(elPos.top);\n\t\t\t\t\tbottom = Math.round(elPos.bottom);\n\n\t\t\t\t\tif(top > end && $prev) {\n\t\t\t\t\t\treturn $prev;\n\t\t\t\t\t} else if(bottom > end) {\n\t\t\t\t\t\treturn node;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$prev = node;\n\t\t\t\t\t\tstack.push(node);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t});\n\n\n\t\t\tif(found){\n\t\t\t\treturn this.findTextEndRange(found, start, end);\n\t\t\t}\n\n\t\t}\n\n\t\t// end of chapter\n\t\treturn this.findTextEndRange($prev, start, end);\n\t}\n\n\t/**\n\t * Find Text Start Range\n\t * @private\n\t * @param {Node} root root node\n\t * @param {number} start position to start at\n\t * @param {number} end position to end at\n\t * @return {Range}\n\t */\n\tfindTextStartRange(node, start, end){\n\t\tvar ranges = this.splitTextNodeIntoRanges(node);\n\t\tvar range;\n\t\tvar pos;\n\t\tvar left, top, right;\n\n\t\tfor (var i = 0; i < ranges.length; i++) {\n\t\t\trange = ranges[i];\n\n\t\t\tpos = range.getBoundingClientRect();\n\n\t\t\tif (this.horizontal && this.direction === \"ltr\") {\n\n\t\t\t\tleft = pos.left;\n\t\t\t\tif( left >= start ) {\n\t\t\t\t\treturn range;\n\t\t\t\t}\n\n\t\t\t} else if (this.horizontal && this.direction === \"rtl\") {\n\n\t\t\t\tright = pos.right;\n\t\t\t\tif( right <= end ) {\n\t\t\t\t\treturn range;\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttop = pos.top;\n\t\t\t\tif( top >= start ) {\n\t\t\t\t\treturn range;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// prev = range;\n\n\t\t}\n\n\t\treturn ranges[0];\n\t}\n\n\t/**\n\t * Find Text End Range\n\t * @private\n\t * @param {Node} root root node\n\t * @param {number} start position to start at\n\t * @param {number} end position to end at\n\t * @return {Range}\n\t */\n\tfindTextEndRange(node, start, end){\n\t\tvar ranges = this.splitTextNodeIntoRanges(node);\n\t\tvar prev;\n\t\tvar range;\n\t\tvar pos;\n\t\tvar left, right, top, bottom;\n\n\t\tfor (var i = 0; i < ranges.length; i++) {\n\t\t\trange = ranges[i];\n\n\t\t\tpos = range.getBoundingClientRect();\n\n\t\t\tif (this.horizontal && this.direction === \"ltr\") {\n\n\t\t\t\tleft = pos.left;\n\t\t\t\tright = pos.right;\n\n\t\t\t\tif(left > end && prev) {\n\t\t\t\t\treturn prev;\n\t\t\t\t} else if(right > end) {\n\t\t\t\t\treturn range;\n\t\t\t\t}\n\n\t\t\t} else if (this.horizontal && this.direction === \"rtl\") {\n\n\t\t\t\tleft = pos.left\n\t\t\t\tright = pos.right;\n\n\t\t\t\tif(right < start && prev) {\n\t\t\t\t\treturn prev;\n\t\t\t\t} else if(left < start) {\n\t\t\t\t\treturn range;\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttop = pos.top;\n\t\t\t\tbottom = pos.bottom;\n\n\t\t\t\tif(top > end && prev) {\n\t\t\t\t\treturn prev;\n\t\t\t\t} else if(bottom > end) {\n\t\t\t\t\treturn range;\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tprev = range;\n\n\t\t}\n\n\t\t// Ends before limit\n\t\treturn ranges[ranges.length-1];\n\n\t}\n\n\t/**\n\t * Split up a text node into ranges for each word\n\t * @private\n\t * @param {Node} root root node\n\t * @param {string} [_splitter] what to split on\n\t * @return {Range[]}\n\t */\n\tsplitTextNodeIntoRanges(node, _splitter){\n\t\tvar ranges = [];\n\t\tvar textContent = node.textContent || \"\";\n\t\tvar text = textContent.trim();\n\t\tvar range;\n\t\tvar doc = node.ownerDocument;\n\t\tvar splitter = _splitter || \" \";\n\n\t\tvar pos = text.indexOf(splitter);\n\n\t\tif(pos === -1 || node.nodeType != Node.TEXT_NODE) {\n\t\t\trange = doc.createRange();\n\t\t\trange.selectNodeContents(node);\n\t\t\treturn [range];\n\t\t}\n\n\t\trange = doc.createRange();\n\t\trange.setStart(node, 0);\n\t\trange.setEnd(node, pos);\n\t\tranges.push(range);\n\t\trange = false;\n\n\t\twhile ( pos != -1 ) {\n\n\t\t\tpos = text.indexOf(splitter, pos + 1);\n\t\t\tif(pos > 0) {\n\n\t\t\t\tif(range) {\n\t\t\t\t\trange.setEnd(node, pos);\n\t\t\t\t\tranges.push(range);\n\t\t\t\t}\n\n\t\t\t\trange = doc.createRange();\n\t\t\t\trange.setStart(node, pos+1);\n\t\t\t}\n\t\t}\n\n\t\tif(range) {\n\t\t\trange.setEnd(node, text.length);\n\t\t\tranges.push(range);\n\t\t}\n\n\t\treturn ranges;\n\t}\n\n\n\t/**\n\t * Turn a pair of ranges into a pair of CFIs\n\t * @private\n\t * @param {string} cfiBase base string for an EpubCFI\n\t * @param {object} rangePair { start: Range, end: Range }\n\t * @return {object} { start: \"epubcfi(...)\", end: \"epubcfi(...)\" }\n\t */\n\trangePairToCfiPair(cfiBase, rangePair){\n\n\t\tvar startRange = rangePair.start;\n\t\tvar endRange = rangePair.end;\n\n\t\tstartRange.collapse(true);\n\t\tendRange.collapse(false);\n\n\t\tlet startCfi = new EpubCFI(startRange, cfiBase).toString();\n\t\tlet endCfi = new EpubCFI(endRange, cfiBase).toString();\n\n\t\treturn {\n\t\t\tstart: startCfi,\n\t\t\tend: endCfi\n\t\t};\n\n\t}\n\n\trangeListToCfiList(cfiBase, columns){\n\t\tvar map = [];\n\t\tvar cifPair;\n\n\t\tfor (var i = 0; i < columns.length; i++) {\n\t\t\tcifPair = this.rangePairToCfiPair(cfiBase, columns[i]);\n\n\t\t\tmap.push(cifPair);\n\n\t\t}\n\n\t\treturn map;\n\t}\n\n\t/**\n\t * Set the axis for mapping\n\t * @param {string} axis horizontal | vertical\n\t * @return {boolean} is it horizontal?\n\t */\n\taxis(axis) {\n\t\tif (axis) {\n\t\t\tthis.horizontal = (axis === \"horizontal\") ? true : false;\n\t\t}\n\t\treturn this.horizontal;\n\t}\n}\n\nexport default Mapping;\n","import Book from \"./book\";\nimport Rendition from \"./rendition\";\nimport CFI from \"./epubcfi\";\nimport Contents from \"./contents\";\nimport * as utils from \"./utils/core\";\nimport { EPUBJS_VERSION } from \"./utils/constants\";\n\nimport IframeView from \"./managers/views/iframe\";\nimport DefaultViewManager from \"./managers/default\";\nimport ContinuousViewManager from \"./managers/continuous\";\n\n/**\n * Creates a new Book\n * @param {string|ArrayBuffer} url URL, Path or ArrayBuffer\n * @param {object} options to pass to the book\n * @returns {Book} a new Book object\n * @example ePub(\"/path/to/book.epub\", {})\n */\nfunction ePub(url, options) {\n\treturn new Book(url, options);\n}\n\nePub.VERSION = EPUBJS_VERSION;\n\nif (typeof(global) !== \"undefined\") {\n\tglobal.EPUBJS_VERSION = EPUBJS_VERSION;\n}\n\nePub.Book = Book;\nePub.Rendition = Rendition;\nePub.Contents = Contents;\nePub.CFI = CFI;\nePub.utils = utils;\n\nexport default ePub;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","'use strict';\n\nif (!process) {\n var process = {\n \"cwd\" : function () { return '/' }\n };\n}\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + path);\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47/*/*/)\n break;\n else\n code = 47/*/*/;\n if (code === 47/*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 ||\n res.charCodeAt(res.length - 1) !== 46/*.*/ ||\n res.charCodeAt(res.length - 2) !== 46/*.*/) {\n if (res.length > 2) {\n var start = res.length - 1;\n var j = start;\n for (; j >= 0; --j) {\n if (res.charCodeAt(j) === 47/*/*/)\n break;\n }\n if (j !== start) {\n if (j === -1)\n res = '';\n else\n res = res.slice(0, j);\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46/*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base ||\n ((pathObject.name || '') + (pathObject.ext || ''));\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47/*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0)\n return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47/*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47/*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute)\n path = '.';\n if (path.length > 0 && trailingSeparator)\n path += '/';\n\n if (isAbsolute)\n return '/' + path;\n return path;\n },\n\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47/*/*/;\n },\n\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to)\n return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to)\n return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47/*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = (fromEnd - fromStart);\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47/*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = (toEnd - toStart);\n\n // Compare paths to find the longest common path from root\n var length = (fromLen < toLen ? fromLen : toLen);\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47/*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47/*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47/*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47/*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47/*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0)\n return '.';\n var code = path.charCodeAt(0);\n var hasRoot = (code === 47/*/*/);\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47/*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1)\n return hasRoot ? '/' : '.';\n if (hasRoot && end === 1)\n return '//';\n return path.slice(0, end);\n },\n\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string')\n throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path)\n return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47/*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end)\n end = firstNonSlashEnd;\n else if (end === -1)\n end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47/*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1)\n return '';\n return path.slice(start, end);\n }\n },\n\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47/*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46/*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 ||\n end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 &&\n startDot === end - 1 &&\n startDot === startPart + 1)) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError(\n 'Parameter \"pathObject\" must be an object, not ' + typeof(pathObject)\n );\n }\n return _format('/', pathObject);\n },\n\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0)\n return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = (code === 47/*/*/);\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47/*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46/*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 ||\n end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 &&\n startDot === end - 1 &&\n startDot === startPart + 1)) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute)\n ret.base = ret.name = path.slice(1, end);\n else\n ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0)\n ret.dir = path.slice(0, startPart - 1);\n else if (isAbsolute)\n ret.dir = '/';\n\n return ret;\n },\n\n\n sep: '/',\n delimiter: ':',\n posix: null\n};\n\n\nmodule.exports = posix;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","'use strict';\nvar $ = require('../internals/export');\nvar forEach = require('../internals/array-for-each');\n\n// `Array.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n$({ target: 'Array', proto: true, forced: [].forEach !== forEach }, {\n forEach: forEach\n});\n","exports.nextTick = function nextTick(fn) {\n var args = Array.prototype.slice.call(arguments);\n args.shift();\n setTimeout(function () {\n fn.apply(null, args);\n }, 0);\n};\n\nexports.platform = exports.arch = \nexports.execPath = exports.title = 'browser';\nexports.pid = 1;\nexports.browser = true;\nexports.env = {};\nexports.argv = [];\n\nexports.binding = function (name) {\n\tthrow new Error('No such module. (Possibly not yet loaded)')\n};\n\n(function () {\n var cwd = '/';\n var path;\n exports.cwd = function () { return cwd };\n exports.chdir = function (dir) {\n if (!path) path = require('path');\n cwd = path.resolve(dir, cwd);\n };\n})();\n\nexports.exit = exports.kill = \nexports.umask = exports.dlopen = \nexports.uptime = exports.memoryUsage = \nexports.uvCounters = function() {};\nexports.features = {};\n","/**\n * Hooks allow for injecting functions that must all complete in order before finishing\n * They will execute in parallel but all must finish before continuing\n * Functions may return a promise if they are async.\n * @param {any} context scope of this\n * @example this.content = new EPUBJS.Hook(this);\n */\nclass Hook {\n\tconstructor(context){\n\t\tthis.context = context || this;\n\t\tthis.hooks = [];\n\t}\n\n\t/**\n\t * Adds a function to be run before a hook completes\n\t * @example this.content.register(function(){...});\n\t */\n\tregister(){\n\t\tfor(var i = 0; i < arguments.length; ++i) {\n\t\t\tif (typeof arguments[i] === \"function\") {\n\t\t\t\tthis.hooks.push(arguments[i]);\n\t\t\t} else {\n\t\t\t\t// unpack array\n\t\t\t\tfor(var j = 0; j < arguments[i].length; ++j) {\n\t\t\t\t\tthis.hooks.push(arguments[i][j]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Removes a function\n\t * @example this.content.deregister(function(){...});\n\t */\n\tderegister(func){\n\t\tlet hook;\n\t\tfor (let i = 0; i < this.hooks.length; i++) {\n\t\t\thook = this.hooks[i];\n\t\t\tif (hook === func) {\n\t\t\t\tthis.hooks.splice(i, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Triggers a hook to run all functions\n\t * @example this.content.trigger(args).then(function(){...});\n\t */\n\ttrigger(){\n\t\tvar args = arguments;\n\t\tvar context = this.context;\n\t\tvar promises = [];\n\n\t\tthis.hooks.forEach(function(task) {\n\t\t\ttry {\n\t\t\t\tvar executing = task.apply(context, args);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.log(err);\n\t\t\t}\n\n\t\t\tif(executing && typeof executing[\"then\"] === \"function\") {\n\t\t\t\t// Task is a function that returns a promise\n\t\t\t\tpromises.push(executing);\n\t\t\t}\n\t\t\t// Otherwise Task resolves immediately, continue\n\t\t});\n\n\n\t\treturn Promise.all(promises);\n\t}\n\n\t// Adds a function to be run before a hook completes\n\tlist(){\n\t\treturn this.hooks;\n\t}\n\n\tclear(){\n\t\treturn this.hooks = [];\n\t}\n}\nexport default Hook;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","import EventEmitter from \"event-emitter\";\nimport {isNumber, prefixed, borders, defaults} from \"./utils/core\";\nimport EpubCFI from \"./epubcfi\";\nimport Mapping from \"./mapping\";\nimport {replaceLinks} from \"./utils/replacements\";\nimport { EPUBJS_VERSION, EVENTS, DOM_EVENTS } from \"./utils/constants\";\n\nconst hasNavigator = typeof (navigator) !== \"undefined\";\n\nconst isChrome = hasNavigator && /Chrome/.test(navigator.userAgent);\nconst isWebkit = hasNavigator && !isChrome && /AppleWebKit/.test(navigator.userAgent);\n\nconst ELEMENT_NODE = 1;\nconst TEXT_NODE = 3;\n\n/**\n\t* Handles DOM manipulation, queries and events for View contents\n\t* @class\n\t* @param {document} doc Document\n\t* @param {element} content Parent Element (typically Body)\n\t* @param {string} cfiBase Section component of CFIs\n\t* @param {number} sectionIndex Index in Spine of Conntent's Section\n\t*/\nclass Contents {\n\tconstructor(doc, content, cfiBase, sectionIndex) {\n\t\t// Blank Cfi for Parsing\n\t\tthis.epubcfi = new EpubCFI();\n\n\t\tthis.document = doc;\n\t\tthis.documentElement = this.document.documentElement;\n\t\tthis.content = content || this.document.body;\n\t\tthis.window = this.document.defaultView;\n\n\t\tthis._size = {\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\n\t\tthis.sectionIndex = sectionIndex || 0;\n\t\tthis.cfiBase = cfiBase || \"\";\n\n\t\tthis.epubReadingSystem(\"epub.js\", EPUBJS_VERSION);\n\t\tthis.called = 0;\n\t\tthis.active = true;\n\t\tthis.listeners();\n\t}\n\n\t/**\n\t\t* Get DOM events that are listened for and passed along\n\t\t*/\n\tstatic get listenedEvents() {\n\t\treturn DOM_EVENTS;\n\t}\n\n\t/**\n\t\t* Get or Set width\n\t\t* @param {number} [w]\n\t\t* @returns {number} width\n\t\t*/\n\twidth(w) {\n\t\t// var frame = this.documentElement;\n\t\tvar frame = this.content;\n\n\t\tif (w && isNumber(w)) {\n\t\t\tw = w + \"px\";\n\t\t}\n\n\t\tif (w) {\n\t\t\tframe.style.width = w;\n\t\t\t// this.content.style.width = w;\n\t\t}\n\n\t\treturn parseInt(this.window.getComputedStyle(frame)[\"width\"]);\n\n\n\t}\n\n\t/**\n\t\t* Get or Set height\n\t\t* @param {number} [h]\n\t\t* @returns {number} height\n\t\t*/\n\theight(h) {\n\t\t// var frame = this.documentElement;\n\t\tvar frame = this.content;\n\n\t\tif (h && isNumber(h)) {\n\t\t\th = h + \"px\";\n\t\t}\n\n\t\tif (h) {\n\t\t\tframe.style.height = h;\n\t\t\t// this.content.style.height = h;\n\t\t}\n\n\t\treturn parseInt(this.window.getComputedStyle(frame)[\"height\"]);\n\n\t}\n\n\t/**\n\t\t* Get or Set width of the contents\n\t\t* @param {number} [w]\n\t\t* @returns {number} width\n\t\t*/\n\tcontentWidth(w) {\n\n\t\tvar content = this.content || this.document.body;\n\n\t\tif (w && isNumber(w)) {\n\t\t\tw = w + \"px\";\n\t\t}\n\n\t\tif (w) {\n\t\t\tcontent.style.width = w;\n\t\t}\n\n\t\treturn parseInt(this.window.getComputedStyle(content)[\"width\"]);\n\n\n\t}\n\n\t/**\n\t\t* Get or Set height of the contents\n\t\t* @param {number} [h]\n\t\t* @returns {number} height\n\t\t*/\n\tcontentHeight(h) {\n\n\t\tvar content = this.content || this.document.body;\n\n\t\tif (h && isNumber(h)) {\n\t\t\th = h + \"px\";\n\t\t}\n\n\t\tif (h) {\n\t\t\tcontent.style.height = h;\n\t\t}\n\n\t\treturn parseInt(this.window.getComputedStyle(content)[\"height\"]);\n\n\t}\n\n\t/**\n\t\t* Get the width of the text using Range\n\t\t* @returns {number} width\n\t\t*/\n\ttextWidth() {\n\t\tlet rect;\n\t\tlet width;\n\t\tlet range = this.document.createRange();\n\t\tlet content = this.content || this.document.body;\n\t\tlet border = borders(content);\n\n\t\t// Select the contents of frame\n\t\trange.selectNodeContents(content);\n\n\t\t// get the width of the text content\n\t\trect = range.getBoundingClientRect();\n\t\twidth = rect.width;\n\n\t\tif (border && border.width) {\n\t\t\twidth += border.width;\n\t\t}\n\n\t\treturn Math.round(width);\n\t}\n\n\t/**\n\t\t* Get the height of the text using Range\n\t\t* @returns {number} height\n\t\t*/\n\ttextHeight() {\n\t\tlet rect;\n\t\tlet height;\n\t\tlet range = this.document.createRange();\n\t\tlet content = this.content || this.document.body;\n\n\t\trange.selectNodeContents(content);\n\n\t\trect = range.getBoundingClientRect();\n\t\theight = rect.bottom;\n\n\t\treturn Math.round(height);\n\t}\n\n\t/**\n\t\t* Get documentElement scrollWidth\n\t\t* @returns {number} width\n\t\t*/\n\tscrollWidth() {\n\t\tvar width = this.documentElement.scrollWidth;\n\n\t\treturn width;\n\t}\n\n\t/**\n\t\t* Get documentElement scrollHeight\n\t\t* @returns {number} height\n\t\t*/\n\tscrollHeight() {\n\t\tvar height = this.documentElement.scrollHeight;\n\n\t\treturn height;\n\t}\n\n\t/**\n\t\t* Set overflow css style of the contents\n\t\t* @param {string} [overflow]\n\t\t*/\n\toverflow(overflow) {\n\n\t\tif (overflow) {\n\t\t\tthis.documentElement.style.overflow = overflow;\n\t\t}\n\n\t\treturn this.window.getComputedStyle(this.documentElement)[\"overflow\"];\n\t}\n\n\t/**\n\t\t* Set overflowX css style of the documentElement\n\t\t* @param {string} [overflow]\n\t\t*/\n\toverflowX(overflow) {\n\n\t\tif (overflow) {\n\t\t\tthis.documentElement.style.overflowX = overflow;\n\t\t}\n\n\t\treturn this.window.getComputedStyle(this.documentElement)[\"overflowX\"];\n\t}\n\n\t/**\n\t\t* Set overflowY css style of the documentElement\n\t\t* @param {string} [overflow]\n\t\t*/\n\toverflowY(overflow) {\n\n\t\tif (overflow) {\n\t\t\tthis.documentElement.style.overflowY = overflow;\n\t\t}\n\n\t\treturn this.window.getComputedStyle(this.documentElement)[\"overflowY\"];\n\t}\n\n\t/**\n\t\t* Set Css styles on the contents element (typically Body)\n\t\t* @param {string} property\n\t\t* @param {string} value\n\t\t* @param {boolean} [priority] set as \"important\"\n\t\t*/\n\tcss(property, value, priority) {\n\t\tvar content = this.content || this.document.body;\n\n\t\tif (value) {\n\t\t\tcontent.style.setProperty(property, value, priority ? \"important\" : \"\");\n\t\t} else {\n\t\t\tcontent.style.removeProperty(property);\n\t\t}\n\n\t\treturn this.window.getComputedStyle(content)[property];\n\t}\n\n\t/**\n\t\t* Get or Set the viewport element\n\t\t* @param {object} [options]\n\t\t* @param {string} [options.width]\n\t\t* @param {string} [options.height]\n\t\t* @param {string} [options.scale]\n\t\t* @param {string} [options.minimum]\n\t\t* @param {string} [options.maximum]\n\t\t* @param {string} [options.scalable]\n\t\t*/\n\tviewport(options) {\n\t\tvar _width, _height, _scale, _minimum, _maximum, _scalable;\n\t\t// var width, height, scale, minimum, maximum, scalable;\n\t\tvar $viewport = this.document.querySelector(\"meta[name='viewport']\");\n\t\tvar parsed = {\n\t\t\t\"width\": undefined,\n\t\t\t\"height\": undefined,\n\t\t\t\"scale\": undefined,\n\t\t\t\"minimum\": undefined,\n\t\t\t\"maximum\": undefined,\n\t\t\t\"scalable\": undefined\n\t\t};\n\t\tvar newContent = [];\n\t\tvar settings = {};\n\n\t\t/*\n\t\t* check for the viewport size\n\t\t* \n\t\t*/\n\t\tif($viewport && $viewport.hasAttribute(\"content\")) {\n\t\t\tlet content = $viewport.getAttribute(\"content\");\n\t\t\tlet _width = content.match(/width\\s*=\\s*([^,]*)/);\n\t\t\tlet _height = content.match(/height\\s*=\\s*([^,]*)/);\n\t\t\tlet _scale = content.match(/initial-scale\\s*=\\s*([^,]*)/);\n\t\t\tlet _minimum = content.match(/minimum-scale\\s*=\\s*([^,]*)/);\n\t\t\tlet _maximum = content.match(/maximum-scale\\s*=\\s*([^,]*)/);\n\t\t\tlet _scalable = content.match(/user-scalable\\s*=\\s*([^,]*)/);\n\n\t\t\tif(_width && _width.length && typeof _width[1] !== \"undefined\"){\n\t\t\t\tparsed.width = _width[1];\n\t\t\t}\n\t\t\tif(_height && _height.length && typeof _height[1] !== \"undefined\"){\n\t\t\t\tparsed.height = _height[1];\n\t\t\t}\n\t\t\tif(_scale && _scale.length && typeof _scale[1] !== \"undefined\"){\n\t\t\t\tparsed.scale = _scale[1];\n\t\t\t}\n\t\t\tif(_minimum && _minimum.length && typeof _minimum[1] !== \"undefined\"){\n\t\t\t\tparsed.minimum = _minimum[1];\n\t\t\t}\n\t\t\tif(_maximum && _maximum.length && typeof _maximum[1] !== \"undefined\"){\n\t\t\t\tparsed.maximum = _maximum[1];\n\t\t\t}\n\t\t\tif(_scalable && _scalable.length && typeof _scalable[1] !== \"undefined\"){\n\t\t\t\tparsed.scalable = _scalable[1];\n\t\t\t}\n\t\t}\n\n\t\tsettings = defaults(options || {}, parsed);\n\n\t\tif (options) {\n\t\t\tif (settings.width) {\n\t\t\t\tnewContent.push(\"width=\" + settings.width);\n\t\t\t}\n\n\t\t\tif (settings.height) {\n\t\t\t\tnewContent.push(\"height=\" + settings.height);\n\t\t\t}\n\n\t\t\tif (settings.scale) {\n\t\t\t\tnewContent.push(\"initial-scale=\" + settings.scale);\n\t\t\t}\n\n\t\t\tif (settings.scalable === \"no\") {\n\t\t\t\tnewContent.push(\"minimum-scale=\" + settings.scale);\n\t\t\t\tnewContent.push(\"maximum-scale=\" + settings.scale);\n\t\t\t\tnewContent.push(\"user-scalable=\" + settings.scalable);\n\t\t\t} else {\n\n\t\t\t\tif (settings.scalable) {\n\t\t\t\t\tnewContent.push(\"user-scalable=\" + settings.scalable);\n\t\t\t\t}\n\n\t\t\t\tif (settings.minimum) {\n\t\t\t\t\tnewContent.push(\"minimum-scale=\" + settings.minimum);\n\t\t\t\t}\n\n\t\t\t\tif (settings.maximum) {\n\t\t\t\t\tnewContent.push(\"minimum-scale=\" + settings.maximum);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!$viewport) {\n\t\t\t\t$viewport = this.document.createElement(\"meta\");\n\t\t\t\t$viewport.setAttribute(\"name\", \"viewport\");\n\t\t\t\tthis.document.querySelector(\"head\").appendChild($viewport);\n\t\t\t}\n\n\t\t\t$viewport.setAttribute(\"content\", newContent.join(\", \"));\n\n\t\t\tthis.window.scrollTo(0, 0);\n\t\t}\n\n\n\t\treturn settings;\n\t}\n\n\t/**\n\t * Event emitter for when the contents has expanded\n\t * @private\n\t */\n\texpand() {\n\t\tthis.emit(EVENTS.CONTENTS.EXPAND);\n\t}\n\n\t/**\n\t * Add DOM listeners\n\t * @private\n\t */\n\tlisteners() {\n\t\tthis.imageLoadListeners();\n\n\t\tthis.mediaQueryListeners();\n\n\t\t// this.fontLoadListeners();\n\n\t\tthis.addEventListeners();\n\n\t\tthis.addSelectionListeners();\n\n\t\t// this.transitionListeners();\n\n\t\tif (typeof ResizeObserver === \"undefined\") {\n\t\t\tthis.resizeListeners();\n\t\t\tthis.visibilityListeners();\n\t\t} else {\n\t\t\tthis.resizeObservers();\n\t\t}\n\n\t\t// this.mutationObservers();\n\n\t\tthis.linksHandler();\n\t}\n\n\t/**\n\t * Remove DOM listeners\n\t * @private\n\t */\n\tremoveListeners() {\n\n\t\tthis.removeEventListeners();\n\n\t\tthis.removeSelectionListeners();\n\n\t\tif (this.observer) {\n\t\t\tthis.observer.disconnect();\n\t\t}\n\n\t\tclearTimeout(this.expanding);\n\t}\n\n\t/**\n\t * Check if size of contents has changed and\n\t * emit 'resize' event if it has.\n\t * @private\n\t */\n\tresizeCheck() {\n\t\tlet width = this.textWidth();\n\t\tlet height = this.textHeight();\n\n\t\tif (width != this._size.width || height != this._size.height) {\n\n\t\t\tthis._size = {\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t};\n\n\t\t\tthis.onResize && this.onResize(this._size);\n\t\t\tthis.emit(EVENTS.CONTENTS.RESIZE, this._size);\n\t\t}\n\t}\n\n\t/**\n\t * Poll for resize detection\n\t * @private\n\t */\n\tresizeListeners() {\n\t\tvar width, height;\n\t\t// Test size again\n\t\tclearTimeout(this.expanding);\n\t\trequestAnimationFrame(this.resizeCheck.bind(this));\n\t\tthis.expanding = setTimeout(this.resizeListeners.bind(this), 350);\n\t}\n\n\t/**\n\t * Listen for visibility of tab to change\n\t * @private\n\t */\n\tvisibilityListeners() {\n\t\tdocument.addEventListener(\"visibilitychange\", () => {\n\t\t\tif (document.visibilityState === \"visible\" && this.active === false) {\n\t\t\t\tthis.active = true;\n\t\t\t\tthis.resizeListeners();\n\t\t\t} else {\n\t\t\t\tthis.active = false;\n\t\t\t\tclearTimeout(this.expanding);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Use css transitions to detect resize\n\t * @private\n\t */\n\ttransitionListeners() {\n\t\tlet body = this.content;\n\n\t\tbody.style['transitionProperty'] = \"font, font-size, font-size-adjust, font-stretch, font-variation-settings, font-weight, width, height\";\n\t\tbody.style['transitionDuration'] = \"0.001ms\";\n\t\tbody.style['transitionTimingFunction'] = \"linear\";\n\t\tbody.style['transitionDelay'] = \"0\";\n\n\t\tthis._resizeCheck = this.resizeCheck.bind(this);\n\t\tthis.document.addEventListener('transitionend', this._resizeCheck);\n\t}\n\n\t/**\n\t * Listen for media query changes and emit 'expand' event\n\t * Adapted from: https://github.com/tylergaw/media-query-events/blob/master/js/mq-events.js\n\t * @private\n\t */\n\tmediaQueryListeners() {\n\t\tvar sheets = this.document.styleSheets;\n\t\tvar mediaChangeHandler = function(m){\n\t\t\tif(m.matches && !this._expanding) {\n\t\t\t\tsetTimeout(this.expand.bind(this), 1);\n\t\t\t}\n\t\t}.bind(this);\n\n\t\tfor (var i = 0; i < sheets.length; i += 1) {\n\t\t\tvar rules;\n\t\t\t// Firefox errors if we access cssRules cross-domain\n\t\t\ttry {\n\t\t\t\trules = sheets[i].cssRules;\n\t\t\t} catch (e) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!rules) return; // Stylesheets changed\n\t\t\tfor (var j = 0; j < rules.length; j += 1) {\n\t\t\t\t//if (rules[j].constructor === CSSMediaRule) {\n\t\t\t\tif(rules[j].media){\n\t\t\t\t\tvar mql = this.window.matchMedia(rules[j].media.mediaText);\n\t\t\t\t\tmql.addListener(mediaChangeHandler);\n\t\t\t\t\t//mql.onchange = mediaChangeHandler;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Use ResizeObserver to listen for changes in the DOM and check for resize\n\t * @private\n\t */\n\tresizeObservers() {\n\t\t// create an observer instance\n\t\tthis.observer = new ResizeObserver((e) => {\n\t\t\trequestAnimationFrame(this.resizeCheck.bind(this));\n\t\t});\n\n\t\t// pass in the target node\n\t\tthis.observer.observe(this.document.documentElement);\n\t}\n\n\t/**\n\t * Use MutationObserver to listen for changes in the DOM and check for resize\n\t * @private\n\t */\n\tmutationObservers() {\n\t\t// create an observer instance\n\t\tthis.observer = new MutationObserver((mutations) => {\n\t\t\tthis.resizeCheck();\n\t\t});\n\n\t\t// configuration of the observer:\n\t\tlet config = { attributes: true, childList: true, characterData: true, subtree: true };\n\n\t\t// pass in the target node, as well as the observer options\n\t\tthis.observer.observe(this.document, config);\n\t}\n\n\t/**\n\t * Test if images are loaded or add listener for when they load\n\t * @private\n\t */\n\timageLoadListeners() {\n\t\tvar images = this.document.querySelectorAll(\"img\");\n\t\tvar img;\n\t\tfor (var i = 0; i < images.length; i++) {\n\t\t\timg = images[i];\n\n\t\t\tif (typeof img.naturalWidth !== \"undefined\" &&\n\t\t\t\t\timg.naturalWidth === 0) {\n\t\t\t\timg.onload = this.expand.bind(this);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Listen for font load and check for resize when loaded\n\t * @private\n\t */\n\tfontLoadListeners() {\n\t\tif (!this.document || !this.document.fonts) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.document.fonts.ready.then(function () {\n\t\t\tthis.resizeCheck();\n\t\t}.bind(this));\n\n\t}\n\n\t/**\n\t * Get the documentElement\n\t * @returns {element} documentElement\n\t */\n\troot() {\n\t\tif(!this.document) return null;\n\t\treturn this.document.documentElement;\n\t}\n\n\t/**\n\t * Get the location offset of a EpubCFI or an #id\n\t * @param {string | EpubCFI} target\n\t * @param {string} [ignoreClass] for the cfi\n\t * @returns { {left: Number, top: Number }\n\t */\n\tlocationOf(target, ignoreClass) {\n\t\tvar position;\n\t\tvar targetPos = {\"left\": 0, \"top\": 0};\n\n\t\tif(!this.document) return targetPos;\n\n\t\tif(this.epubcfi.isCfiString(target)) {\n\t\t\tlet range = new EpubCFI(target).toRange(this.document, ignoreClass);\n\n\t\t\tif(range) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!range.endContainer ||\n\t\t\t\t\t\t(range.startContainer == range.endContainer\n\t\t\t\t\t\t&& range.startOffset == range.endOffset)) {\n\t\t\t\t\t\t// If the end for the range is not set, it results in collapsed becoming\n\t\t\t\t\t\t// true. This in turn leads to inconsistent behaviour when calling\n\t\t\t\t\t\t// getBoundingRect. Wrong bounds lead to the wrong page being displayed.\n\t\t\t\t\t\t// https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/15684911/\n\t\t\t\t\t\tlet pos = range.startContainer.textContent.indexOf(\" \", range.startOffset);\n\t\t\t\t\t\tif (pos == -1) {\n\t\t\t\t\t\t\tpos = range.startContainer.textContent.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\trange.setEnd(range.startContainer, pos);\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(\"setting end offset to start container length failed\", e);\n\t\t\t\t}\n\n\t\t\t\tif (range.startContainer.nodeType === Node.ELEMENT_NODE) {\n\t\t\t\t\tposition = range.startContainer.getBoundingClientRect();\n\t\t\t\t\ttargetPos.left = position.left;\n\t\t\t\t\ttargetPos.top = position.top;\n\t\t\t\t} else {\n\t\t\t\t\t// Webkit does not handle collapsed range bounds correctly\n\t\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=138949\n\n\t\t\t\t\t// Construct a new non-collapsed range\n\t\t\t\t\tif (isWebkit) {\n\t\t\t\t\t\tlet container = range.startContainer;\n\t\t\t\t\t\tlet newRange = new Range();\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (container.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\t\t\tposition = container.getBoundingClientRect();\n\t\t\t\t\t\t\t} else if (range.startOffset + 2 < container.length) {\n\t\t\t\t\t\t\t\tnewRange.setStart(container, range.startOffset);\n\t\t\t\t\t\t\t\tnewRange.setEnd(container, range.startOffset + 2);\n\t\t\t\t\t\t\t\tposition = newRange.getBoundingClientRect();\n\t\t\t\t\t\t\t} else if (range.startOffset - 2 > 0) {\n\t\t\t\t\t\t\t\tnewRange.setStart(container, range.startOffset - 2);\n\t\t\t\t\t\t\t\tnewRange.setEnd(container, range.startOffset);\n\t\t\t\t\t\t\t\tposition = newRange.getBoundingClientRect();\n\t\t\t\t\t\t\t} else { // empty, return the parent element\n\t\t\t\t\t\t\t\tposition = container.parentNode.getBoundingClientRect();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tconsole.error(e, e.stack);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition = range.getBoundingClientRect();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else if(typeof target === \"string\" &&\n\t\t\ttarget.indexOf(\"#\") > -1) {\n\n\t\t\tlet id = target.substring(target.indexOf(\"#\")+1);\n\t\t\tlet el = this.document.getElementById(id);\n\t\t\tif(el) {\n\t\t\t\tif (isWebkit) {\n\t\t\t\t\t// Webkit reports incorrect bounding rects in Columns\n\t\t\t\t\tlet newRange = new Range();\n\t\t\t\t\tnewRange.selectNode(el);\n\t\t\t\t\tposition = newRange.getBoundingClientRect();\n\t\t\t\t} else {\n\t\t\t\t\tposition = el.getBoundingClientRect();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (position) {\n\t\t\ttargetPos.left = position.left;\n\t\t\ttargetPos.top = position.top;\n\t\t}\n\n\t\treturn targetPos;\n\t}\n\n\t/**\n\t * Append a stylesheet link to the document head\n\t * @param {string} src url\n\t */\n\taddStylesheet(src) {\n\t\treturn new Promise(function(resolve, reject){\n\t\t\tvar $stylesheet;\n\t\t\tvar ready = false;\n\n\t\t\tif(!this.document) {\n\t\t\t\tresolve(false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Check if link already exists\n\t\t\t$stylesheet = this.document.querySelector(\"link[href='\"+src+\"']\");\n\t\t\tif ($stylesheet) {\n\t\t\t\tresolve(true);\n\t\t\t\treturn; // already present\n\t\t\t}\n\n\t\t\t$stylesheet = this.document.createElement(\"link\");\n\t\t\t$stylesheet.type = \"text/css\";\n\t\t\t$stylesheet.rel = \"stylesheet\";\n\t\t\t$stylesheet.href = src;\n\t\t\t$stylesheet.onload = $stylesheet.onreadystatechange = function() {\n\t\t\t\tif ( !ready && (!this.readyState || this.readyState == \"complete\") ) {\n\t\t\t\t\tready = true;\n\t\t\t\t\t// Let apply\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}, 1);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis.document.head.appendChild($stylesheet);\n\n\t\t}.bind(this));\n\t}\n\n\t_getStylesheetNode(key) {\n\t\tvar styleEl;\n\t\tkey = \"epubjs-inserted-css-\" + (key || '');\n\n\t\tif(!this.document) return false;\n\n\t\t// Check if link already exists\n\t\tstyleEl = this.document.getElementById(key);\n\t\tif (!styleEl) {\n\t\t\tstyleEl = this.document.createElement(\"style\");\n\t\t\tstyleEl.id = key;\n\t\t\t// Append style element to head\n\t\t\tthis.document.head.appendChild(styleEl);\n\t\t}\n\t\treturn styleEl;\n\t}\n\n\t/**\n\t * Append stylesheet css\n\t * @param {string} serializedCss\n\t * @param {string} key If the key is the same, the CSS will be replaced instead of inserted\n\t */\n\taddStylesheetCss(serializedCss, key) {\n\t\tif(!this.document || !serializedCss) return false;\n\n\t\tvar styleEl;\n\t\tstyleEl = this._getStylesheetNode(key);\n\t\tstyleEl.innerHTML = serializedCss;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Append stylesheet rules to a generate stylesheet\n\t * Array: https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/insertRule\n\t * Object: https://github.com/desirable-objects/json-to-css\n\t * @param {array | object} rules\n\t * @param {string} key If the key is the same, the CSS will be replaced instead of inserted\n\t */\n\taddStylesheetRules(rules, key) {\n\t\tvar styleSheet;\n\n\t\tif(!this.document || !rules || rules.length === 0) return;\n\n\t\t// Grab style sheet\n\t\tstyleSheet = this._getStylesheetNode(key).sheet;\n\n\t\tif (Object.prototype.toString.call(rules) === \"[object Array]\") {\n\t\t\tfor (var i = 0, rl = rules.length; i < rl; i++) {\n\t\t\t\tvar j = 1, rule = rules[i], selector = rules[i][0], propStr = \"\";\n\t\t\t\t// If the second argument of a rule is an array of arrays, correct our variables.\n\t\t\t\tif (Object.prototype.toString.call(rule[1][0]) === \"[object Array]\") {\n\t\t\t\t\trule = rule[1];\n\t\t\t\t\tj = 0;\n\t\t\t\t}\n\n\t\t\t\tfor (var pl = rule.length; j < pl; j++) {\n\t\t\t\t\tvar prop = rule[j];\n\t\t\t\t\tpropStr += prop[0] + \":\" + prop[1] + (prop[2] ? \" !important\" : \"\") + \";\\n\";\n\t\t\t\t}\n\n\t\t\t\t// Insert CSS Rule\n\t\t\t\tstyleSheet.insertRule(selector + \"{\" + propStr + \"}\", styleSheet.cssRules.length);\n\t\t\t}\n\t\t} else {\n\t\t\tconst selectors = Object.keys(rules);\n\t\t\tselectors.forEach((selector) => {\n\t\t\t\tconst definition = rules[selector];\n\t\t\t\tif (Array.isArray(definition)) {\n\t\t\t\t\tdefinition.forEach((item) => {\n\t\t\t\t\t\tconst _rules = Object.keys(item);\n\t\t\t\t\t\tconst result = _rules.map((rule) => {\n\t\t\t\t\t\t\treturn `${rule}:${item[rule]}`;\n\t\t\t\t\t\t}).join(';');\n\t\t\t\t\t\tstyleSheet.insertRule(`${selector}{${result}}`, styleSheet.cssRules.length);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tconst _rules = Object.keys(definition);\n\t\t\t\t\tconst result = _rules.map((rule) => {\n\t\t\t\t\t\treturn `${rule}:${definition[rule]}`;\n\t\t\t\t\t}).join(';');\n\t\t\t\t\tstyleSheet.insertRule(`${selector}{${result}}`, styleSheet.cssRules.length);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Append a script tag to the document head\n\t * @param {string} src url\n\t * @returns {Promise} loaded\n\t */\n\taddScript(src) {\n\n\t\treturn new Promise(function(resolve, reject){\n\t\t\tvar $script;\n\t\t\tvar ready = false;\n\n\t\t\tif(!this.document) {\n\t\t\t\tresolve(false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$script = this.document.createElement(\"script\");\n\t\t\t$script.type = \"text/javascript\";\n\t\t\t$script.async = true;\n\t\t\t$script.src = src;\n\t\t\t$script.onload = $script.onreadystatechange = function() {\n\t\t\t\tif ( !ready && (!this.readyState || this.readyState == \"complete\") ) {\n\t\t\t\t\tready = true;\n\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}, 1);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis.document.head.appendChild($script);\n\n\t\t}.bind(this));\n\t}\n\n\t/**\n\t * Add a class to the contents container\n\t * @param {string} className\n\t */\n\taddClass(className) {\n\t\tvar content;\n\n\t\tif(!this.document) return;\n\n\t\tcontent = this.content || this.document.body;\n\n\t\tif (content) {\n\t\t\tcontent.classList.add(className);\n\t\t}\n\n\t}\n\n\t/**\n\t * Remove a class from the contents container\n\t * @param {string} removeClass\n\t */\n\tremoveClass(className) {\n\t\tvar content;\n\n\t\tif(!this.document) return;\n\n\t\tcontent = this.content || this.document.body;\n\n\t\tif (content) {\n\t\t\tcontent.classList.remove(className);\n\t\t}\n\n\t}\n\n\t/**\n\t * Add DOM event listeners\n\t * @private\n\t */\n\taddEventListeners(){\n\t\tif(!this.document) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._triggerEvent = this.triggerEvent.bind(this);\n\n\t\tDOM_EVENTS.forEach(function(eventName){\n\t\t\tthis.document.addEventListener(eventName, this._triggerEvent, { passive: true });\n\t\t}, this);\n\n\t}\n\n\t/**\n\t * Remove DOM event listeners\n\t * @private\n\t */\n\tremoveEventListeners(){\n\t\tif(!this.document) {\n\t\t\treturn;\n\t\t}\n\t\tDOM_EVENTS.forEach(function(eventName){\n\t\t\tthis.document.removeEventListener(eventName, this._triggerEvent, { passive: true });\n\t\t}, this);\n\t\tthis._triggerEvent = undefined;\n\t}\n\n\t/**\n\t * Emit passed browser events\n\t * @private\n\t */\n\ttriggerEvent(e){\n\t\tthis.emit(e.type, e);\n\t}\n\n\t/**\n\t * Add listener for text selection\n\t * @private\n\t */\n\taddSelectionListeners(){\n\t\tif(!this.document) {\n\t\t\treturn;\n\t\t}\n\t\tthis._onSelectionChange = this.onSelectionChange.bind(this);\n\t\tthis.document.addEventListener(\"selectionchange\", this._onSelectionChange, { passive: true });\n\t}\n\n\t/**\n\t * Remove listener for text selection\n\t * @private\n\t */\n\tremoveSelectionListeners(){\n\t\tif(!this.document) {\n\t\t\treturn;\n\t\t}\n\t\tthis.document.removeEventListener(\"selectionchange\", this._onSelectionChange, { passive: true });\n\t\tthis._onSelectionChange = undefined;\n\t}\n\n\t/**\n\t * Handle getting text on selection\n\t * @private\n\t */\n\tonSelectionChange(e){\n\t\tif (this.selectionEndTimeout) {\n\t\t\tclearTimeout(this.selectionEndTimeout);\n\t\t}\n\t\tthis.selectionEndTimeout = setTimeout(function() {\n\t\t\tvar selection = this.window.getSelection();\n\t\t\tthis.triggerSelectedEvent(selection);\n\t\t}.bind(this), 250);\n\t}\n\n\t/**\n\t * Emit event on text selection\n\t * @private\n\t */\n\ttriggerSelectedEvent(selection){\n\t\tvar range, cfirange;\n\n\t\tif (selection && selection.rangeCount > 0) {\n\t\t\trange = selection.getRangeAt(0);\n\t\t\tif(!range.collapsed) {\n\t\t\t\t// cfirange = this.section.cfiFromRange(range);\n\t\t\t\tcfirange = new EpubCFI(range, this.cfiBase).toString();\n\t\t\t\tthis.emit(EVENTS.CONTENTS.SELECTED, cfirange);\n\t\t\t\tthis.emit(EVENTS.CONTENTS.SELECTED_RANGE, range);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Get a Dom Range from EpubCFI\n\t * @param {EpubCFI} _cfi\n\t * @param {string} [ignoreClass]\n\t * @returns {Range} range\n\t */\n\trange(_cfi, ignoreClass){\n\t\tvar cfi = new EpubCFI(_cfi);\n\t\treturn cfi.toRange(this.document, ignoreClass);\n\t}\n\n\t/**\n\t * Get an EpubCFI from a Dom Range\n\t * @param {Range} range\n\t * @param {string} [ignoreClass]\n\t * @returns {EpubCFI} cfi\n\t */\n\tcfiFromRange(range, ignoreClass){\n\t\treturn new EpubCFI(range, this.cfiBase, ignoreClass).toString();\n\t}\n\n\t/**\n\t * Get an EpubCFI from a Dom node\n\t * @param {node} node\n\t * @param {string} [ignoreClass]\n\t * @returns {EpubCFI} cfi\n\t */\n\tcfiFromNode(node, ignoreClass){\n\t\treturn new EpubCFI(node, this.cfiBase, ignoreClass).toString();\n\t}\n\n\t// TODO: find where this is used - remove?\n\tmap(layout){\n\t\tvar map = new Mapping(layout);\n\t\treturn map.section();\n\t}\n\n\t/**\n\t * Size the contents to a given width and height\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n\tsize(width, height){\n\t\tvar viewport = { scale: 1.0, scalable: \"no\" };\n\n\t\tthis.layoutStyle(\"scrolling\");\n\n\t\tif (width >= 0) {\n\t\t\tthis.width(width);\n\t\t\tviewport.width = width;\n\t\t\tthis.css(\"padding\", \"0 \"+(width/12)+\"px\");\n\t\t}\n\n\t\tif (height >= 0) {\n\t\t\tthis.height(height);\n\t\t\tviewport.height = height;\n\t\t}\n\n\t\tthis.css(\"margin\", \"0\");\n\t\tthis.css(\"box-sizing\", \"border-box\");\n\n\n\t\tthis.viewport(viewport);\n\t}\n\n\t/**\n\t * Apply columns to the contents for pagination\n\t * @param {number} width\n\t * @param {number} height\n\t * @param {number} columnWidth\n\t * @param {number} gap\n\t */\n\tcolumns(width, height, columnWidth, gap, dir){\n\t\tlet COLUMN_AXIS = prefixed(\"column-axis\");\n\t\tlet COLUMN_GAP = prefixed(\"column-gap\");\n\t\tlet COLUMN_WIDTH = prefixed(\"column-width\");\n\t\tlet COLUMN_FILL = prefixed(\"column-fill\");\n\n\t\tlet writingMode = this.writingMode();\n\t\tlet axis = (writingMode.indexOf(\"vertical\") === 0) ? \"vertical\" : \"horizontal\";\n\n\t\tthis.layoutStyle(\"paginated\");\n\n\t\tif (dir === \"rtl\" && axis === \"horizontal\") {\n\t\t\tthis.direction(dir);\n\t\t}\n\n\t\tthis.width(width);\n\t\tthis.height(height);\n\n\t\t// Deal with Mobile trying to scale to viewport\n\t\tthis.viewport({ width: width, height: height, scale: 1.0, scalable: \"no\" });\n\n\t\t// TODO: inline-block needs more testing\n\t\t// Fixes Safari column cut offs, but causes RTL issues\n\t\t// this.css(\"display\", \"inline-block\");\n\n\t\tthis.css(\"overflow-y\", \"hidden\");\n\t\tthis.css(\"margin\", \"0\", true);\n\n\t\tif (axis === \"vertical\") {\n\t\t\tthis.css(\"padding-top\", (gap / 2) + \"px\", true);\n\t\t\tthis.css(\"padding-bottom\", (gap / 2) + \"px\", true);\n\t\t\tthis.css(\"padding-left\", \"20px\");\n\t\t\tthis.css(\"padding-right\", \"20px\");\n\t\t\tthis.css(COLUMN_AXIS, \"vertical\");\n\t\t} else {\n\t\t\tthis.css(\"padding-top\", \"20px\");\n\t\t\tthis.css(\"padding-bottom\", \"20px\");\n\t\t\tthis.css(\"padding-left\", (gap / 2) + \"px\", true);\n\t\t\tthis.css(\"padding-right\", (gap / 2) + \"px\", true);\n\t\t\tthis.css(COLUMN_AXIS, \"horizontal\");\n\t\t}\n\n\t\tthis.css(\"box-sizing\", \"border-box\");\n\t\tthis.css(\"max-width\", \"inherit\");\n\n\t\tthis.css(COLUMN_FILL, \"auto\");\n\n\t\tthis.css(COLUMN_GAP, gap+\"px\");\n\t\tthis.css(COLUMN_WIDTH, columnWidth+\"px\");\n\n\t\t// Fix glyph clipping in WebKit\n\t\t// https://github.com/futurepress/epub.js/issues/983\n\t\tthis.css(\"-webkit-line-box-contain\", \"block glyphs replaced\");\n\t}\n\n\t/**\n\t * Scale contents from center\n\t * @param {number} scale\n\t * @param {number} offsetX\n\t * @param {number} offsetY\n\t */\n\tscaler(scale, offsetX, offsetY){\n\t\tvar scaleStr = \"scale(\" + scale + \")\";\n\t\tvar translateStr = \"\";\n\t\t// this.css(\"position\", \"absolute\"));\n\t\tthis.css(\"transform-origin\", \"top left\");\n\n\t\tif (offsetX >= 0 || offsetY >= 0) {\n\t\t\ttranslateStr = \" translate(\" + (offsetX || 0 )+ \"px, \" + (offsetY || 0 )+ \"px )\";\n\t\t}\n\n\t\tthis.css(\"transform\", scaleStr + translateStr);\n\t}\n\n\t/**\n\t * Fit contents into a fixed width and height\n\t * @param {number} width\n\t * @param {number} height\n\t */\n\tfit(width, height, section){\n\t\tvar viewport = this.viewport();\n\t\tvar viewportWidth = parseInt(viewport.width);\n\t\tvar viewportHeight = parseInt(viewport.height);\n\t\tvar widthScale = width / viewportWidth;\n\t\tvar heightScale = height / viewportHeight;\n\t\tvar scale = widthScale < heightScale ? widthScale : heightScale;\n\n\t\t// the translate does not work as intended, elements can end up unaligned\n\t\t// var offsetY = (height - (viewportHeight * scale)) / 2;\n\t\t// var offsetX = 0;\n\t\t// if (this.sectionIndex % 2 === 1) {\n\t\t// \toffsetX = width - (viewportWidth * scale);\n\t\t// }\n\n\t\tthis.layoutStyle(\"paginated\");\n\n\t\t// scale needs width and height to be set\n\t\tthis.width(viewportWidth);\n\t\tthis.height(viewportHeight);\n\t\tthis.overflow(\"hidden\");\n\n\t\t// Scale to the correct size\n\t\tthis.scaler(scale, 0, 0);\n\t\t// this.scaler(scale, offsetX > 0 ? offsetX : 0, offsetY);\n\n\t\t// background images are not scaled by transform\n\t\tthis.css(\"background-size\", viewportWidth * scale + \"px \" + viewportHeight * scale + \"px\");\n\n\t\tthis.css(\"background-color\", \"transparent\");\n\t\tif (section && section.properties.includes(\"page-spread-left\")) {\n\t\t\t// set margin since scale is weird\n\t\t\tvar marginLeft = width - (viewportWidth * scale);\n\t\t\tthis.css(\"margin-left\", marginLeft + \"px\");\n\t\t}\n\t}\n\n\t/**\n\t * Set the direction of the text\n\t * @param {string} [dir=\"ltr\"] \"rtl\" | \"ltr\"\n\t */\n\tdirection(dir) {\n\t\tif (this.documentElement) {\n\t\t\tthis.documentElement.style[\"direction\"] = dir;\n\t\t}\n\t}\n\n\tmapPage(cfiBase, layout, start, end, dev) {\n\t\tvar mapping = new Mapping(layout, dev);\n\n\t\treturn mapping.page(this, cfiBase, start, end);\n\t}\n\n\t/**\n\t * Emit event when link in content is clicked\n\t * @private\n\t */\n\tlinksHandler() {\n\t\treplaceLinks(this.content, (href) => {\n\t\t\tthis.emit(EVENTS.CONTENTS.LINK_CLICKED, href);\n\t\t});\n\t}\n\n\t/**\n\t * Set the writingMode of the text\n\t * @param {string} [mode=\"horizontal-tb\"] \"horizontal-tb\" | \"vertical-rl\" | \"vertical-lr\"\n\t */\n\twritingMode(mode) {\n\t\tlet WRITING_MODE = prefixed(\"writing-mode\");\n\n\t\tif (mode && this.documentElement) {\n\t\t\tthis.documentElement.style[WRITING_MODE] = mode;\n\t\t}\n\n\t\treturn this.window.getComputedStyle(this.documentElement)[WRITING_MODE] || '';\n\t}\n\n\t/**\n\t * Set the layoutStyle of the content\n\t * @param {string} [style=\"paginated\"] \"scrolling\" | \"paginated\"\n\t * @private\n\t */\n\tlayoutStyle(style) {\n\n\t\tif (style) {\n\t\t\tthis._layoutStyle = style;\n\t\t\tnavigator.epubReadingSystem.layoutStyle = this._layoutStyle;\n\t\t}\n\n\t\treturn this._layoutStyle || \"paginated\";\n\t}\n\n\t/**\n\t * Add the epubReadingSystem object to the navigator\n\t * @param {string} name\n\t * @param {string} version\n\t * @private\n\t */\n\tepubReadingSystem(name, version) {\n\t\tnavigator.epubReadingSystem = {\n\t\t\tname: name,\n\t\t\tversion: version,\n\t\t\tlayoutStyle: this.layoutStyle(),\n\t\t\thasFeature: function (feature) {\n\t\t\t\tswitch (feature) {\n\t\t\t\t\tcase \"dom-manipulation\":\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase \"layout-changes\":\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase \"touch-events\":\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase \"mouse-events\":\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase \"keyboard-events\":\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase \"spine-scripting\":\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn navigator.epubReadingSystem;\n\t}\n\n\tdestroy() {\n\t\t// this.document.removeEventListener('transitionend', this._resizeCheck);\n\n\t\tthis.removeListeners();\n\n\t}\n}\n\nEventEmitter(Contents.prototype);\n\nexport default Contents;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","import path from \"path-webpack\";\n\n/**\n * Creates a Path object for parsing and manipulation of a path strings\n *\n * Uses a polyfill for Nodejs path: https://nodejs.org/api/path.html\n * @param\t{string} pathString\ta url string (relative or absolute)\n * @class\n */\nclass Path {\n\tconstructor(pathString) {\n\t\tvar protocol;\n\t\tvar parsed;\n\n\t\tprotocol = pathString.indexOf(\"://\");\n\t\tif (protocol > -1) {\n\t\t\tpathString = new URL(pathString).pathname;\n\t\t}\n\n\t\tparsed = this.parse(pathString);\n\n\t\tthis.path = pathString;\n\n\t\tif (this.isDirectory(pathString)) {\n\t\t\tthis.directory = pathString;\n\t\t} else {\n\t\t\tthis.directory = parsed.dir + \"/\";\n\t\t}\n\n\t\tthis.filename = parsed.base;\n\t\tthis.extension = parsed.ext.slice(1);\n\n\t}\n\n\t/**\n\t * Parse the path: https://nodejs.org/api/path.html#path_path_parse_path\n\t * @param\t{string} what\n\t * @returns {object}\n\t */\n\tparse (what) {\n\t\treturn path.parse(what);\n\t}\n\n\t/**\n\t * @param\t{string} what\n\t * @returns {boolean}\n\t */\n\tisAbsolute (what) {\n\t\treturn path.isAbsolute(what || this.path);\n\t}\n\n\t/**\n\t * Check if path ends with a directory\n\t * @param\t{string} what\n\t * @returns {boolean}\n\t */\n\tisDirectory (what) {\n\t\treturn (what.charAt(what.length-1) === \"/\");\n\t}\n\n\t/**\n\t * Resolve a path against the directory of the Path\n\t *\n\t * https://nodejs.org/api/path.html#path_path_resolve_paths\n\t * @param\t{string} what\n\t * @returns {string} resolved\n\t */\n\tresolve (what) {\n\t\treturn path.resolve(this.directory, what);\n\t}\n\n\t/**\n\t * Resolve a path relative to the directory of the Path\n\t *\n\t * https://nodejs.org/api/path.html#path_path_relative_from_to\n\t * @param\t{string} what\n\t * @returns {string} relative\n\t */\n\trelative (what) {\n\t\tvar isAbsolute = what && (what.indexOf(\"://\") > -1);\n\n\t\tif (isAbsolute) {\n\t\t\treturn what;\n\t\t}\n\n\t\treturn path.relative(this.directory, what);\n\t}\n\n\tsplitPath(filename) {\n\t\treturn this.splitPathRe.exec(filename).slice(1);\n\t}\n\n\t/**\n\t * Return the path string\n\t * @returns {string} path\n\t */\n\ttoString () {\n\t\treturn this.path;\n\t}\n}\n\nexport default Path;\n","\"use strict\";\n\nvar isValue = require(\"../value/is\");\n\n// prettier-ignore\nvar possibleTypes = { \"object\": true, \"function\": true, \"undefined\": true /* document.all */ };\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) return false;\n\treturn hasOwnProperty.call(possibleTypes, typeof value);\n};\n","\"use strict\";\n\nvar _undefined = require(\"../function/noop\")(); // Support ES3 engines\n\nmodule.exports = function (val) { return val !== _undefined && val !== null; };\n","\"use strict\";\n\nvar isPrototype = require(\"../prototype/is\");\n\nmodule.exports = function (value) {\n\tif (typeof value !== \"function\") return false;\n\n\tif (!hasOwnProperty.call(value, \"length\")) return false;\n\n\ttry {\n\t\tif (typeof value.length !== \"number\") return false;\n\t\tif (typeof value.call !== \"function\") return false;\n\t\tif (typeof value.apply !== \"function\") return false;\n\t} catch (error) {\n\t\treturn false;\n\t}\n\n\treturn !isPrototype(value);\n};\n","\"use strict\";\n\nvar isValue = require(\"../is-value\");\n\nvar keys = Object.keys;\n\nmodule.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };\n","'use strict';\n// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = require('../internals/document-create-element');\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.keys : require(\"./shim\");\n","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.JSZip = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64;\n enc4 = remainingBytes > 2 ? (chr3 & 63) : 64;\n\n output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4));\n\n }\n\n return output.join(\"\");\n};\n\n// public method for decoding\nexports.decode = function(input) {\n var chr1, chr2, chr3;\n var enc1, enc2, enc3, enc4;\n var i = 0, resultIndex = 0;\n\n var dataUrlPrefix = \"data:\";\n\n if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) {\n // This is a common error: people give a data url\n // (data:image/png;base64,iVBOR...) with a {base64: true} and\n // wonders why things don't work.\n // We can detect that the string input looks like a data url but we\n // *can't* be sure it is one: removing everything up to the comma would\n // be too dangerous.\n throw new Error(\"Invalid base64 input, it looks like a data url.\");\n }\n\n input = input.replace(/[^A-Za-z0-9+/=]/g, \"\");\n\n var totalLength = input.length * 3 / 4;\n if(input.charAt(input.length - 1) === _keyStr.charAt(64)) {\n totalLength--;\n }\n if(input.charAt(input.length - 2) === _keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the input is not a base64 content\n // - the input is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the input uses a base64 variant (base64url for example)\n throw new Error(\"Invalid base64 input, bad content length.\");\n }\n var output;\n if (support.uint8array) {\n output = new Uint8Array(totalLength|0);\n } else {\n output = new Array(totalLength|0);\n }\n\n while (i < input.length) {\n\n enc1 = _keyStr.indexOf(input.charAt(i++));\n enc2 = _keyStr.indexOf(input.charAt(i++));\n enc3 = _keyStr.indexOf(input.charAt(i++));\n enc4 = _keyStr.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n output[resultIndex++] = chr1;\n\n if (enc3 !== 64) {\n output[resultIndex++] = chr2;\n }\n if (enc4 !== 64) {\n output[resultIndex++] = chr3;\n }\n\n }\n\n return output;\n};\n\n},{\"./support\":30,\"./utils\":32}],2:[function(require,module,exports){\n\"use strict\";\n\nvar external = require(\"./external\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar DataLengthProbe = require(\"./stream/DataLengthProbe\");\n\n/**\n * Represent a compressed object, with everything needed to decompress it.\n * @constructor\n * @param {number} compressedSize the size of the data compressed.\n * @param {number} uncompressedSize the size of the data after decompression.\n * @param {number} crc32 the crc32 of the decompressed file.\n * @param {object} compression the type of compression, see lib/compressions.js.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data.\n */\nfunction CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) {\n this.compressedSize = compressedSize;\n this.uncompressedSize = uncompressedSize;\n this.crc32 = crc32;\n this.compression = compression;\n this.compressedContent = data;\n}\n\nCompressedObject.prototype = {\n /**\n * Create a worker to get the uncompressed content.\n * @return {GenericWorker} the worker.\n */\n getContentWorker: function () {\n var worker = new DataWorker(external.Promise.resolve(this.compressedContent))\n .pipe(this.compression.uncompressWorker())\n .pipe(new DataLengthProbe(\"data_length\"));\n\n var that = this;\n worker.on(\"end\", function () {\n if (this.streamInfo[\"data_length\"] !== that.uncompressedSize) {\n throw new Error(\"Bug : uncompressed data size mismatch\");\n }\n });\n return worker;\n },\n /**\n * Create a worker to get the compressed content.\n * @return {GenericWorker} the worker.\n */\n getCompressedWorker: function () {\n return new DataWorker(external.Promise.resolve(this.compressedContent))\n .withStreamInfo(\"compressedSize\", this.compressedSize)\n .withStreamInfo(\"uncompressedSize\", this.uncompressedSize)\n .withStreamInfo(\"crc32\", this.crc32)\n .withStreamInfo(\"compression\", this.compression)\n ;\n }\n};\n\n/**\n * Chain the given worker with other workers to compress the content with the\n * given compression.\n * @param {GenericWorker} uncompressedWorker the worker to pipe.\n * @param {Object} compression the compression object.\n * @param {Object} compressionOptions the options to use when compressing.\n * @return {GenericWorker} the new worker compressing the content.\n */\nCompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) {\n return uncompressedWorker\n .pipe(new Crc32Probe())\n .pipe(new DataLengthProbe(\"uncompressedSize\"))\n .pipe(compression.compressWorker(compressionOptions))\n .pipe(new DataLengthProbe(\"compressedSize\"))\n .withStreamInfo(\"compression\", compression);\n};\n\nmodule.exports = CompressedObject;\n\n},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(require,module,exports){\n\"use strict\";\n\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nexports.STORE = {\n magic: \"\\x00\\x00\",\n compressWorker : function () {\n return new GenericWorker(\"STORE compression\");\n },\n uncompressWorker : function () {\n return new GenericWorker(\"STORE decompression\");\n }\n};\nexports.DEFLATE = require(\"./flate\");\n\n},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"./utils\");\n\n/**\n * The following functions come from pako, from pako/lib/zlib/crc32.js\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for(var n =0; n < 256; n++){\n c = n;\n for(var k =0; k < 8; k++){\n c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable, end = pos + len;\n\n crc = crc ^ (-1);\n\n for (var i = pos; i < end; i++ ) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n// That's all for the pako functions.\n\n/**\n * Compute the crc32 of a string.\n * This is almost the same as the function crc32, but for strings. Using the\n * same function for the two use cases leads to horrible performances.\n * @param {Number} crc the starting value of the crc.\n * @param {String} str the string to use.\n * @param {Number} len the length of the string.\n * @param {Number} pos the starting position for the crc32 computation.\n * @return {Number} the computed crc32.\n */\nfunction crc32str(crc, str, len, pos) {\n var t = crcTable, end = pos + len;\n\n crc = crc ^ (-1);\n\n for (var i = pos; i < end; i++ ) {\n crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\nmodule.exports = function crc32wrapper(input, crc) {\n if (typeof input === \"undefined\" || !input.length) {\n return 0;\n }\n\n var isArray = utils.getTypeOf(input) !== \"string\";\n\n if(isArray) {\n return crc32(crc|0, input, input.length, 0);\n } else {\n return crc32str(crc|0, input, input.length, 0);\n }\n};\n\n},{\"./utils\":32}],5:[function(require,module,exports){\n\"use strict\";\nexports.base64 = false;\nexports.binary = false;\nexports.dir = false;\nexports.createFolders = true;\nexports.date = null;\nexports.compression = null;\nexports.compressionOptions = null;\nexports.comment = null;\nexports.unixPermissions = null;\nexports.dosPermissions = null;\n\n},{}],6:[function(require,module,exports){\n\"use strict\";\n\n// load the global object first:\n// - it should be better integrated in the system (unhandledRejection in node)\n// - the environment may have a custom Promise implementation (see zone.js)\nvar ES6Promise = null;\nif (typeof Promise !== \"undefined\") {\n ES6Promise = Promise;\n} else {\n ES6Promise = require(\"lie\");\n}\n\n/**\n * Let the user use/change some implementations.\n */\nmodule.exports = {\n Promise: ES6Promise\n};\n\n},{\"lie\":37}],7:[function(require,module,exports){\n\"use strict\";\nvar USE_TYPEDARRAY = (typeof Uint8Array !== \"undefined\") && (typeof Uint16Array !== \"undefined\") && (typeof Uint32Array !== \"undefined\");\n\nvar pako = require(\"pako\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nvar ARRAY_TYPE = USE_TYPEDARRAY ? \"uint8array\" : \"array\";\n\nexports.magic = \"\\x08\\x00\";\n\n/**\n * Create a worker that uses pako to inflate/deflate.\n * @constructor\n * @param {String} action the name of the pako function to call : either \"Deflate\" or \"Inflate\".\n * @param {Object} options the options to use when (de)compressing.\n */\nfunction FlateWorker(action, options) {\n GenericWorker.call(this, \"FlateWorker/\" + action);\n\n this._pako = null;\n this._pakoAction = action;\n this._pakoOptions = options;\n // the `meta` object from the last chunk received\n // this allow this worker to pass around metadata\n this.meta = {};\n}\n\nutils.inherits(FlateWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nFlateWorker.prototype.processChunk = function (chunk) {\n this.meta = chunk.meta;\n if (this._pako === null) {\n this._createPako();\n }\n this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false);\n};\n\n/**\n * @see GenericWorker.flush\n */\nFlateWorker.prototype.flush = function () {\n GenericWorker.prototype.flush.call(this);\n if (this._pako === null) {\n this._createPako();\n }\n this._pako.push([], true);\n};\n/**\n * @see GenericWorker.cleanUp\n */\nFlateWorker.prototype.cleanUp = function () {\n GenericWorker.prototype.cleanUp.call(this);\n this._pako = null;\n};\n\n/**\n * Create the _pako object.\n * TODO: lazy-loading this object isn't the best solution but it's the\n * quickest. The best solution is to lazy-load the worker list. See also the\n * issue #446.\n */\nFlateWorker.prototype._createPako = function () {\n this._pako = new pako[this._pakoAction]({\n raw: true,\n level: this._pakoOptions.level || -1 // default compression\n });\n var self = this;\n this._pako.onData = function(data) {\n self.push({\n data : data,\n meta : self.meta\n });\n };\n};\n\nexports.compressWorker = function (compressionOptions) {\n return new FlateWorker(\"Deflate\", compressionOptions);\n};\nexports.uncompressWorker = function () {\n return new FlateWorker(\"Inflate\", {});\n};\n\n},{\"./stream/GenericWorker\":28,\"./utils\":32,\"pako\":38}],8:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\nvar utf8 = require(\"../utf8\");\nvar crc32 = require(\"../crc32\");\nvar signature = require(\"../signature\");\n\n/**\n * Transform an integer into a string in hexadecimal.\n * @private\n * @param {number} dec the number to convert.\n * @param {number} bytes the number of bytes to generate.\n * @returns {string} the result.\n */\nvar decToHex = function(dec, bytes) {\n var hex = \"\", i;\n for (i = 0; i < bytes; i++) {\n hex += String.fromCharCode(dec & 0xff);\n dec = dec >>> 8;\n }\n return hex;\n};\n\n/**\n * Generate the UNIX part of the external file attributes.\n * @param {Object} unixPermissions the unix permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute :\n *\n * TTTTsstrwxrwxrwx0000000000ADVSHR\n * ^^^^____________________________ file type, see zipinfo.c (UNX_*)\n * ^^^_________________________ setuid, setgid, sticky\n * ^^^^^^^^^________________ permissions\n * ^^^^^^^^^^______ not used ?\n * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only\n */\nvar generateUnixExternalFileAttr = function (unixPermissions, isDir) {\n\n var result = unixPermissions;\n if (!unixPermissions) {\n // I can't use octal values in strict mode, hence the hexa.\n // 040775 => 0x41fd\n // 0100664 => 0x81b4\n result = isDir ? 0x41fd : 0x81b4;\n }\n return (result & 0xFFFF) << 16;\n};\n\n/**\n * Generate the DOS part of the external file attributes.\n * @param {Object} dosPermissions the dos permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * Bit 0 Read-Only\n * Bit 1 Hidden\n * Bit 2 System\n * Bit 3 Volume Label\n * Bit 4 Directory\n * Bit 5 Archive\n */\nvar generateDosExternalFileAttr = function (dosPermissions) {\n // the dir flag is already set for compatibility\n return (dosPermissions || 0) & 0x3F;\n};\n\n/**\n * Generate the various parts used in the construction of the final zip file.\n * @param {Object} streamInfo the hash with information about the compressed file.\n * @param {Boolean} streamedContent is the content streamed ?\n * @param {Boolean} streamingEnded is the stream finished ?\n * @param {number} offset the current offset from the start of the zip file.\n * @param {String} platform let's pretend we are this platform (change platform dependents fields)\n * @param {Function} encodeFileName the function to encode the file name / comment.\n * @return {Object} the zip parts.\n */\nvar generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) {\n var file = streamInfo[\"file\"],\n compression = streamInfo[\"compression\"],\n useCustomEncoding = encodeFileName !== utf8.utf8encode,\n encodedFileName = utils.transformTo(\"string\", encodeFileName(file.name)),\n utfEncodedFileName = utils.transformTo(\"string\", utf8.utf8encode(file.name)),\n comment = file.comment,\n encodedComment = utils.transformTo(\"string\", encodeFileName(comment)),\n utfEncodedComment = utils.transformTo(\"string\", utf8.utf8encode(comment)),\n useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,\n useUTF8ForComment = utfEncodedComment.length !== comment.length,\n dosTime,\n dosDate,\n extraFields = \"\",\n unicodePathExtraField = \"\",\n unicodeCommentExtraField = \"\",\n dir = file.dir,\n date = file.date;\n\n\n var dataInfo = {\n crc32 : 0,\n compressedSize : 0,\n uncompressedSize : 0\n };\n\n // if the content is streamed, the sizes/crc32 are only available AFTER\n // the end of the stream.\n if (!streamedContent || streamingEnded) {\n dataInfo.crc32 = streamInfo[\"crc32\"];\n dataInfo.compressedSize = streamInfo[\"compressedSize\"];\n dataInfo.uncompressedSize = streamInfo[\"uncompressedSize\"];\n }\n\n var bitflag = 0;\n if (streamedContent) {\n // Bit 3: the sizes/crc32 are set to zero in the local header.\n // The correct values are put in the data descriptor immediately\n // following the compressed data.\n bitflag |= 0x0008;\n }\n if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) {\n // Bit 11: Language encoding flag (EFS).\n bitflag |= 0x0800;\n }\n\n\n var extFileAttr = 0;\n var versionMadeBy = 0;\n if (dir) {\n // dos or unix, we set the dos dir flag\n extFileAttr |= 0x00010;\n }\n if(platform === \"UNIX\") {\n versionMadeBy = 0x031E; // UNIX, version 3.0\n extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir);\n } else { // DOS or other, fallback to DOS\n versionMadeBy = 0x0014; // DOS, version 2.0\n extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir);\n }\n\n // date\n // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html\n // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html\n // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html\n\n dosTime = date.getUTCHours();\n dosTime = dosTime << 6;\n dosTime = dosTime | date.getUTCMinutes();\n dosTime = dosTime << 5;\n dosTime = dosTime | date.getUTCSeconds() / 2;\n\n dosDate = date.getUTCFullYear() - 1980;\n dosDate = dosDate << 4;\n dosDate = dosDate | (date.getUTCMonth() + 1);\n dosDate = dosDate << 5;\n dosDate = dosDate | date.getUTCDate();\n\n if (useUTF8ForFileName) {\n // set the unicode path extra field. unzip needs at least one extra\n // field to correctly handle unicode path, so using the path is as good\n // as any other information. This could improve the situation with\n // other archive managers too.\n // This field is usually used without the utf8 flag, with a non\n // unicode path in the header (winrar, winzip). This helps (a bit)\n // with the messy Windows' default compressed folders feature but\n // breaks on p7zip which doesn't seek the unicode path extra field.\n // So for now, UTF-8 everywhere !\n unicodePathExtraField =\n // Version\n decToHex(1, 1) +\n // NameCRC32\n decToHex(crc32(encodedFileName), 4) +\n // UnicodeName\n utfEncodedFileName;\n\n extraFields +=\n // Info-ZIP Unicode Path Extra Field\n \"\\x75\\x70\" +\n // size\n decToHex(unicodePathExtraField.length, 2) +\n // content\n unicodePathExtraField;\n }\n\n if(useUTF8ForComment) {\n\n unicodeCommentExtraField =\n // Version\n decToHex(1, 1) +\n // CommentCRC32\n decToHex(crc32(encodedComment), 4) +\n // UnicodeName\n utfEncodedComment;\n\n extraFields +=\n // Info-ZIP Unicode Path Extra Field\n \"\\x75\\x63\" +\n // size\n decToHex(unicodeCommentExtraField.length, 2) +\n // content\n unicodeCommentExtraField;\n }\n\n var header = \"\";\n\n // version needed to extract\n header += \"\\x0A\\x00\";\n // general purpose bit flag\n header += decToHex(bitflag, 2);\n // compression method\n header += compression.magic;\n // last mod file time\n header += decToHex(dosTime, 2);\n // last mod file date\n header += decToHex(dosDate, 2);\n // crc-32\n header += decToHex(dataInfo.crc32, 4);\n // compressed size\n header += decToHex(dataInfo.compressedSize, 4);\n // uncompressed size\n header += decToHex(dataInfo.uncompressedSize, 4);\n // file name length\n header += decToHex(encodedFileName.length, 2);\n // extra field length\n header += decToHex(extraFields.length, 2);\n\n\n var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields;\n\n var dirRecord = signature.CENTRAL_FILE_HEADER +\n // version made by (00: DOS)\n decToHex(versionMadeBy, 2) +\n // file header (common to file and central directory)\n header +\n // file comment length\n decToHex(encodedComment.length, 2) +\n // disk number start\n \"\\x00\\x00\" +\n // internal file attributes TODO\n \"\\x00\\x00\" +\n // external file attributes\n decToHex(extFileAttr, 4) +\n // relative offset of local header\n decToHex(offset, 4) +\n // file name\n encodedFileName +\n // extra field\n extraFields +\n // file comment\n encodedComment;\n\n return {\n fileRecord: fileRecord,\n dirRecord: dirRecord\n };\n};\n\n/**\n * Generate the EOCD record.\n * @param {Number} entriesCount the number of entries in the zip file.\n * @param {Number} centralDirLength the length (in bytes) of the central dir.\n * @param {Number} localDirLength the length (in bytes) of the local dir.\n * @param {String} comment the zip file comment as a binary string.\n * @param {Function} encodeFileName the function to encode the comment.\n * @return {String} the EOCD record.\n */\nvar generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) {\n var dirEnd = \"\";\n var encodedComment = utils.transformTo(\"string\", encodeFileName(comment));\n\n // end of central dir signature\n dirEnd = signature.CENTRAL_DIRECTORY_END +\n // number of this disk\n \"\\x00\\x00\" +\n // number of the disk with the start of the central directory\n \"\\x00\\x00\" +\n // total number of entries in the central directory on this disk\n decToHex(entriesCount, 2) +\n // total number of entries in the central directory\n decToHex(entriesCount, 2) +\n // size of the central directory 4 bytes\n decToHex(centralDirLength, 4) +\n // offset of start of central directory with respect to the starting disk number\n decToHex(localDirLength, 4) +\n // .ZIP file comment length\n decToHex(encodedComment.length, 2) +\n // .ZIP file comment\n encodedComment;\n\n return dirEnd;\n};\n\n/**\n * Generate data descriptors for a file entry.\n * @param {Object} streamInfo the hash generated by a worker, containing information\n * on the file entry.\n * @return {String} the data descriptors.\n */\nvar generateDataDescriptors = function (streamInfo) {\n var descriptor = \"\";\n descriptor = signature.DATA_DESCRIPTOR +\n // crc-32 4 bytes\n decToHex(streamInfo[\"crc32\"], 4) +\n // compressed size 4 bytes\n decToHex(streamInfo[\"compressedSize\"], 4) +\n // uncompressed size 4 bytes\n decToHex(streamInfo[\"uncompressedSize\"], 4);\n\n return descriptor;\n};\n\n\n/**\n * A worker to concatenate other workers to create a zip file.\n * @param {Boolean} streamFiles `true` to stream the content of the files,\n * `false` to accumulate it.\n * @param {String} comment the comment to use.\n * @param {String} platform the platform to use, \"UNIX\" or \"DOS\".\n * @param {Function} encodeFileName the function to encode file names and comments.\n */\nfunction ZipFileWorker(streamFiles, comment, platform, encodeFileName) {\n GenericWorker.call(this, \"ZipFileWorker\");\n // The number of bytes written so far. This doesn't count accumulated chunks.\n this.bytesWritten = 0;\n // The comment of the zip file\n this.zipComment = comment;\n // The platform \"generating\" the zip file.\n this.zipPlatform = platform;\n // the function to encode file names and comments.\n this.encodeFileName = encodeFileName;\n // Should we stream the content of the files ?\n this.streamFiles = streamFiles;\n // If `streamFiles` is false, we will need to accumulate the content of the\n // files to calculate sizes / crc32 (and write them *before* the content).\n // This boolean indicates if we are accumulating chunks (it will change a lot\n // during the lifetime of this worker).\n this.accumulate = false;\n // The buffer receiving chunks when accumulating content.\n this.contentBuffer = [];\n // The list of generated directory records.\n this.dirRecords = [];\n // The offset (in bytes) from the beginning of the zip file for the current source.\n this.currentSourceOffset = 0;\n // The total number of entries in this zip file.\n this.entriesCount = 0;\n // the name of the file currently being added, null when handling the end of the zip file.\n // Used for the emitted metadata.\n this.currentFile = null;\n\n\n\n this._sources = [];\n}\nutils.inherits(ZipFileWorker, GenericWorker);\n\n/**\n * @see GenericWorker.push\n */\nZipFileWorker.prototype.push = function (chunk) {\n\n var currentFilePercent = chunk.meta.percent || 0;\n var entriesCount = this.entriesCount;\n var remainingFiles = this._sources.length;\n\n if(this.accumulate) {\n this.contentBuffer.push(chunk);\n } else {\n this.bytesWritten += chunk.data.length;\n\n GenericWorker.prototype.push.call(this, {\n data : chunk.data,\n meta : {\n currentFile : this.currentFile,\n percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100\n }\n });\n }\n};\n\n/**\n * The worker started a new source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the new source.\n */\nZipFileWorker.prototype.openedSource = function (streamInfo) {\n this.currentSourceOffset = this.bytesWritten;\n this.currentFile = streamInfo[\"file\"].name;\n\n var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n\n // don't stream folders (because they don't have any content)\n if(streamedContent) {\n var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n this.push({\n data : record.fileRecord,\n meta : {percent:0}\n });\n } else {\n // we need to wait for the whole file before pushing anything\n this.accumulate = true;\n }\n};\n\n/**\n * The worker finished a source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the finished source.\n */\nZipFileWorker.prototype.closedSource = function (streamInfo) {\n this.accumulate = false;\n var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n\n this.dirRecords.push(record.dirRecord);\n if(streamedContent) {\n // after the streamed file, we put data descriptors\n this.push({\n data : generateDataDescriptors(streamInfo),\n meta : {percent:100}\n });\n } else {\n // the content wasn't streamed, we need to push everything now\n // first the file record, then the content\n this.push({\n data : record.fileRecord,\n meta : {percent:0}\n });\n while(this.contentBuffer.length) {\n this.push(this.contentBuffer.shift());\n }\n }\n this.currentFile = null;\n};\n\n/**\n * @see GenericWorker.flush\n */\nZipFileWorker.prototype.flush = function () {\n\n var localDirLength = this.bytesWritten;\n for(var i = 0; i < this.dirRecords.length; i++) {\n this.push({\n data : this.dirRecords[i],\n meta : {percent:100}\n });\n }\n var centralDirLength = this.bytesWritten - localDirLength;\n\n var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName);\n\n this.push({\n data : dirEnd,\n meta : {percent:100}\n });\n};\n\n/**\n * Prepare the next source to be read.\n */\nZipFileWorker.prototype.prepareNextSource = function () {\n this.previous = this._sources.shift();\n this.openedSource(this.previous.streamInfo);\n if (this.isPaused) {\n this.previous.pause();\n } else {\n this.previous.resume();\n }\n};\n\n/**\n * @see GenericWorker.registerPrevious\n */\nZipFileWorker.prototype.registerPrevious = function (previous) {\n this._sources.push(previous);\n var self = this;\n\n previous.on(\"data\", function (chunk) {\n self.processChunk(chunk);\n });\n previous.on(\"end\", function () {\n self.closedSource(self.previous.streamInfo);\n if(self._sources.length) {\n self.prepareNextSource();\n } else {\n self.end();\n }\n });\n previous.on(\"error\", function (e) {\n self.error(e);\n });\n return this;\n};\n\n/**\n * @see GenericWorker.resume\n */\nZipFileWorker.prototype.resume = function () {\n if(!GenericWorker.prototype.resume.call(this)) {\n return false;\n }\n\n if (!this.previous && this._sources.length) {\n this.prepareNextSource();\n return true;\n }\n if (!this.previous && !this._sources.length && !this.generatedError) {\n this.end();\n return true;\n }\n};\n\n/**\n * @see GenericWorker.error\n */\nZipFileWorker.prototype.error = function (e) {\n var sources = this._sources;\n if(!GenericWorker.prototype.error.call(this, e)) {\n return false;\n }\n for(var i = 0; i < sources.length; i++) {\n try {\n sources[i].error(e);\n } catch(e) {\n // the `error` exploded, nothing to do\n }\n }\n return true;\n};\n\n/**\n * @see GenericWorker.lock\n */\nZipFileWorker.prototype.lock = function () {\n GenericWorker.prototype.lock.call(this);\n var sources = this._sources;\n for(var i = 0; i < sources.length; i++) {\n sources[i].lock();\n }\n};\n\nmodule.exports = ZipFileWorker;\n\n},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(require,module,exports){\n\"use strict\";\n\nvar compressions = require(\"../compressions\");\nvar ZipFileWorker = require(\"./ZipFileWorker\");\n\n/**\n * Find the compression to use.\n * @param {String} fileCompression the compression defined at the file level, if any.\n * @param {String} zipCompression the compression defined at the load() level.\n * @return {Object} the compression object to use.\n */\nvar getCompression = function (fileCompression, zipCompression) {\n\n var compressionName = fileCompression || zipCompression;\n var compression = compressions[compressionName];\n if (!compression) {\n throw new Error(compressionName + \" is not a valid compression method !\");\n }\n return compression;\n};\n\n/**\n * Create a worker to generate a zip file.\n * @param {JSZip} zip the JSZip instance at the right root level.\n * @param {Object} options to generate the zip file.\n * @param {String} comment the comment to use.\n */\nexports.generateWorker = function (zip, options, comment) {\n\n var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName);\n var entriesCount = 0;\n try {\n\n zip.forEach(function (relativePath, file) {\n entriesCount++;\n var compression = getCompression(file.options.compression, options.compression);\n var compressionOptions = file.options.compressionOptions || options.compressionOptions || {};\n var dir = file.dir, date = file.date;\n\n file._compressWorker(compression, compressionOptions)\n .withStreamInfo(\"file\", {\n name : relativePath,\n dir : dir,\n date : date,\n comment : file.comment || \"\",\n unixPermissions : file.unixPermissions,\n dosPermissions : file.dosPermissions\n })\n .pipe(zipFileWorker);\n });\n zipFileWorker.entriesCount = entriesCount;\n } catch (e) {\n zipFileWorker.error(e);\n }\n\n return zipFileWorker;\n};\n\n},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(require,module,exports){\n\"use strict\";\n\n/**\n * Representation a of zip file in js\n * @constructor\n */\nfunction JSZip() {\n // if this constructor is used without `new`, it adds `new` before itself:\n if(!(this instanceof JSZip)) {\n return new JSZip();\n }\n\n if(arguments.length) {\n throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");\n }\n\n // object containing the files :\n // {\n // \"folder/\" : {...},\n // \"folder/data.txt\" : {...}\n // }\n // NOTE: we use a null prototype because we do not\n // want filenames like \"toString\" coming from a zip file\n // to overwrite methods and attributes in a normal Object.\n this.files = Object.create(null);\n\n this.comment = null;\n\n // Where we are in the hierarchy\n this.root = \"\";\n this.clone = function() {\n var newObj = new JSZip();\n for (var i in this) {\n if (typeof this[i] !== \"function\") {\n newObj[i] = this[i];\n }\n }\n return newObj;\n };\n}\nJSZip.prototype = require(\"./object\");\nJSZip.prototype.loadAsync = require(\"./load\");\nJSZip.support = require(\"./support\");\nJSZip.defaults = require(\"./defaults\");\n\n// TODO find a better way to handle this version,\n// a require('package.json').version doesn't work with webpack, see #327\nJSZip.version = \"3.10.1\";\n\nJSZip.loadAsync = function (content, options) {\n return new JSZip().loadAsync(content, options);\n};\n\nJSZip.external = require(\"./external\");\nmodule.exports = JSZip;\n\n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(require,module,exports){\n\"use strict\";\nvar utils = require(\"./utils\");\nvar external = require(\"./external\");\nvar utf8 = require(\"./utf8\");\nvar ZipEntries = require(\"./zipEntries\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar nodejsUtils = require(\"./nodejsUtils\");\n\n/**\n * Check the CRC32 of an entry.\n * @param {ZipEntry} zipEntry the zip entry to check.\n * @return {Promise} the result.\n */\nfunction checkEntryCRC32(zipEntry) {\n return new external.Promise(function (resolve, reject) {\n var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());\n worker.on(\"error\", function (e) {\n reject(e);\n })\n .on(\"end\", function () {\n if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {\n reject(new Error(\"Corrupted zip : CRC32 mismatch\"));\n } else {\n resolve();\n }\n })\n .resume();\n });\n}\n\nmodule.exports = function (data, options) {\n var zip = this;\n options = utils.extend(options || {}, {\n base64: false,\n checkCRC32: false,\n optimizedBinaryString: false,\n createFolders: false,\n decodeFileName: utf8.utf8decode\n });\n\n if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n return external.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\"));\n }\n\n return utils.prepareContent(\"the loaded zip file\", data, true, options.optimizedBinaryString, options.base64)\n .then(function (data) {\n var zipEntries = new ZipEntries(options);\n zipEntries.load(data);\n return zipEntries;\n }).then(function checkCRC32(zipEntries) {\n var promises = [external.Promise.resolve(zipEntries)];\n var files = zipEntries.files;\n if (options.checkCRC32) {\n for (var i = 0; i < files.length; i++) {\n promises.push(checkEntryCRC32(files[i]));\n }\n }\n return external.Promise.all(promises);\n }).then(function addFiles(results) {\n var zipEntries = results.shift();\n var files = zipEntries.files;\n for (var i = 0; i < files.length; i++) {\n var input = files[i];\n\n var unsafeName = input.fileNameStr;\n var safeName = utils.resolve(input.fileNameStr);\n\n zip.file(safeName, input.decompressed, {\n binary: true,\n optimizedBinaryString: true,\n date: input.date,\n dir: input.dir,\n comment: input.fileCommentStr.length ? input.fileCommentStr : null,\n unixPermissions: input.unixPermissions,\n dosPermissions: input.dosPermissions,\n createFolders: options.createFolders\n });\n if (!input.dir) {\n zip.file(safeName).unsafeOriginalName = unsafeName;\n }\n }\n if (zipEntries.zipComment.length) {\n zip.comment = zipEntries.zipComment;\n }\n\n return zip;\n });\n};\n\n},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\n\n/**\n * A worker that use a nodejs stream as source.\n * @constructor\n * @param {String} filename the name of the file entry for this stream.\n * @param {Readable} stream the nodejs stream.\n */\nfunction NodejsStreamInputAdapter(filename, stream) {\n GenericWorker.call(this, \"Nodejs stream input adapter for \" + filename);\n this._upstreamEnded = false;\n this._bindStream(stream);\n}\n\nutils.inherits(NodejsStreamInputAdapter, GenericWorker);\n\n/**\n * Prepare the stream and bind the callbacks on it.\n * Do this ASAP on node 0.10 ! A lazy binding doesn't always work.\n * @param {Stream} stream the nodejs stream to use.\n */\nNodejsStreamInputAdapter.prototype._bindStream = function (stream) {\n var self = this;\n this._stream = stream;\n stream.pause();\n stream\n .on(\"data\", function (chunk) {\n self.push({\n data: chunk,\n meta : {\n percent : 0\n }\n });\n })\n .on(\"error\", function (e) {\n if(self.isPaused) {\n this.generatedError = e;\n } else {\n self.error(e);\n }\n })\n .on(\"end\", function () {\n if(self.isPaused) {\n self._upstreamEnded = true;\n } else {\n self.end();\n }\n });\n};\nNodejsStreamInputAdapter.prototype.pause = function () {\n if(!GenericWorker.prototype.pause.call(this)) {\n return false;\n }\n this._stream.pause();\n return true;\n};\nNodejsStreamInputAdapter.prototype.resume = function () {\n if(!GenericWorker.prototype.resume.call(this)) {\n return false;\n }\n\n if(this._upstreamEnded) {\n this.end();\n } else {\n this._stream.resume();\n }\n\n return true;\n};\n\nmodule.exports = NodejsStreamInputAdapter;\n\n},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(require,module,exports){\n\"use strict\";\n\nvar Readable = require(\"readable-stream\").Readable;\n\nvar utils = require(\"../utils\");\nutils.inherits(NodejsStreamOutputAdapter, Readable);\n\n/**\n* A nodejs stream using a worker as source.\n* @see the SourceWrapper in http://nodejs.org/api/stream.html\n* @constructor\n* @param {StreamHelper} helper the helper wrapping the worker\n* @param {Object} options the nodejs stream options\n* @param {Function} updateCb the update callback.\n*/\nfunction NodejsStreamOutputAdapter(helper, options, updateCb) {\n Readable.call(this, options);\n this._helper = helper;\n\n var self = this;\n helper.on(\"data\", function (data, meta) {\n if (!self.push(data)) {\n self._helper.pause();\n }\n if(updateCb) {\n updateCb(meta);\n }\n })\n .on(\"error\", function(e) {\n self.emit(\"error\", e);\n })\n .on(\"end\", function () {\n self.push(null);\n });\n}\n\n\nNodejsStreamOutputAdapter.prototype._read = function() {\n this._helper.resume();\n};\n\nmodule.exports = NodejsStreamOutputAdapter;\n\n},{\"../utils\":32,\"readable-stream\":16}],14:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n /**\n * True if this is running in Nodejs, will be undefined in a browser.\n * In a browser, browserify won't include this file and the whole module\n * will be resolved an empty object.\n */\n isNode : typeof Buffer !== \"undefined\",\n /**\n * Create a new nodejs Buffer from an existing content.\n * @param {Object} data the data to pass to the constructor.\n * @param {String} encoding the encoding to use.\n * @return {Buffer} a new Buffer.\n */\n newBufferFrom: function(data, encoding) {\n if (Buffer.from && Buffer.from !== Uint8Array.from) {\n return Buffer.from(data, encoding);\n } else {\n if (typeof data === \"number\") {\n // Safeguard for old Node.js versions. On newer versions,\n // Buffer.from(number) / Buffer(number, encoding) already throw.\n throw new Error(\"The \\\"data\\\" argument must not be a number\");\n }\n return new Buffer(data, encoding);\n }\n },\n /**\n * Create a new nodejs Buffer with the specified size.\n * @param {Integer} size the size of the buffer.\n * @return {Buffer} a new Buffer.\n */\n allocBuffer: function (size) {\n if (Buffer.alloc) {\n return Buffer.alloc(size);\n } else {\n var buf = new Buffer(size);\n buf.fill(0);\n return buf;\n }\n },\n /**\n * Find out if an object is a Buffer.\n * @param {Object} b the object to test.\n * @return {Boolean} true if the object is a Buffer, false otherwise.\n */\n isBuffer : function(b){\n return Buffer.isBuffer(b);\n },\n\n isStream : function (obj) {\n return obj &&\n typeof obj.on === \"function\" &&\n typeof obj.pause === \"function\" &&\n typeof obj.resume === \"function\";\n }\n};\n\n},{}],15:[function(require,module,exports){\n\"use strict\";\nvar utf8 = require(\"./utf8\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar defaults = require(\"./defaults\");\nvar CompressedObject = require(\"./compressedObject\");\nvar ZipObject = require(\"./zipObject\");\nvar generate = require(\"./generate\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar NodejsStreamInputAdapter = require(\"./nodejs/NodejsStreamInputAdapter\");\n\n\n/**\n * Add a file in the current folder.\n * @private\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file\n * @param {Object} originalOptions the options of the file\n * @return {Object} the new file.\n */\nvar fileAdd = function(name, data, originalOptions) {\n // be sure sub folders exist\n var dataType = utils.getTypeOf(data),\n parent;\n\n\n /*\n * Correct options.\n */\n\n var o = utils.extend(originalOptions || {}, defaults);\n o.date = o.date || new Date();\n if (o.compression !== null) {\n o.compression = o.compression.toUpperCase();\n }\n\n if (typeof o.unixPermissions === \"string\") {\n o.unixPermissions = parseInt(o.unixPermissions, 8);\n }\n\n // UNX_IFDIR 0040000 see zipinfo.c\n if (o.unixPermissions && (o.unixPermissions & 0x4000)) {\n o.dir = true;\n }\n // Bit 4 Directory\n if (o.dosPermissions && (o.dosPermissions & 0x0010)) {\n o.dir = true;\n }\n\n if (o.dir) {\n name = forceTrailingSlash(name);\n }\n if (o.createFolders && (parent = parentFolder(name))) {\n folderAdd.call(this, parent, true);\n }\n\n var isUnicodeString = dataType === \"string\" && o.binary === false && o.base64 === false;\n if (!originalOptions || typeof originalOptions.binary === \"undefined\") {\n o.binary = !isUnicodeString;\n }\n\n\n var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0;\n\n if (isCompressedEmpty || o.dir || !data || data.length === 0) {\n o.base64 = false;\n o.binary = true;\n data = \"\";\n o.compression = \"STORE\";\n dataType = \"string\";\n }\n\n /*\n * Convert content to fit.\n */\n\n var zipObjectContent = null;\n if (data instanceof CompressedObject || data instanceof GenericWorker) {\n zipObjectContent = data;\n } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n zipObjectContent = new NodejsStreamInputAdapter(name, data);\n } else {\n zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64);\n }\n\n var object = new ZipObject(name, zipObjectContent, o);\n this.files[name] = object;\n /*\n TODO: we can't throw an exception because we have async promises\n (we can have a promise of a Date() for example) but returning a\n promise is useless because file(name, data) returns the JSZip\n object for chaining. Should we break that to allow the user\n to catch the error ?\n\n return external.Promise.resolve(zipObjectContent)\n .then(function () {\n return object;\n });\n */\n};\n\n/**\n * Find the parent folder of the path.\n * @private\n * @param {string} path the path to use\n * @return {string} the parent folder, or \"\"\n */\nvar parentFolder = function (path) {\n if (path.slice(-1) === \"/\") {\n path = path.substring(0, path.length - 1);\n }\n var lastSlash = path.lastIndexOf(\"/\");\n return (lastSlash > 0) ? path.substring(0, lastSlash) : \"\";\n};\n\n/**\n * Returns the path with a slash at the end.\n * @private\n * @param {String} path the path to check.\n * @return {String} the path with a trailing slash.\n */\nvar forceTrailingSlash = function(path) {\n // Check the name ends with a /\n if (path.slice(-1) !== \"/\") {\n path += \"/\"; // IE doesn't like substr(-1)\n }\n return path;\n};\n\n/**\n * Add a (sub) folder in the current folder.\n * @private\n * @param {string} name the folder's name\n * @param {boolean=} [createFolders] If true, automatically create sub\n * folders. Defaults to false.\n * @return {Object} the new folder.\n */\nvar folderAdd = function(name, createFolders) {\n createFolders = (typeof createFolders !== \"undefined\") ? createFolders : defaults.createFolders;\n\n name = forceTrailingSlash(name);\n\n // Does this folder already exist?\n if (!this.files[name]) {\n fileAdd.call(this, name, null, {\n dir: true,\n createFolders: createFolders\n });\n }\n return this.files[name];\n};\n\n/**\n* Cross-window, cross-Node-context regular expression detection\n* @param {Object} object Anything\n* @return {Boolean} true if the object is a regular expression,\n* false otherwise\n*/\nfunction isRegExp(object) {\n return Object.prototype.toString.call(object) === \"[object RegExp]\";\n}\n\n// return the actual prototype of JSZip\nvar out = {\n /**\n * @see loadAsync\n */\n load: function() {\n throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n },\n\n\n /**\n * Call a callback function for each entry at this folder level.\n * @param {Function} cb the callback function:\n * function (relativePath, file) {...}\n * It takes 2 arguments : the relative path and the file.\n */\n forEach: function(cb) {\n var filename, relativePath, file;\n // ignore warning about unwanted properties because this.files is a null prototype object\n /* eslint-disable-next-line guard-for-in */\n for (filename in this.files) {\n file = this.files[filename];\n relativePath = filename.slice(this.root.length, filename.length);\n if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root\n cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn...\n }\n }\n },\n\n /**\n * Filter nested files/folders with the specified function.\n * @param {Function} search the predicate to use :\n * function (relativePath, file) {...}\n * It takes 2 arguments : the relative path and the file.\n * @return {Array} An array of matching elements.\n */\n filter: function(search) {\n var result = [];\n this.forEach(function (relativePath, entry) {\n if (search(relativePath, entry)) { // the file matches the function\n result.push(entry);\n }\n\n });\n return result;\n },\n\n /**\n * Add a file to the zip file, or search a file.\n * @param {string|RegExp} name The name of the file to add (if data is defined),\n * the name of the file to find (if no data) or a regex to match files.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded\n * @param {Object} o File options\n * @return {JSZip|Object|Array} this JSZip object (when adding a file),\n * a file (when searching by string) or an array of files (when searching by regex).\n */\n file: function(name, data, o) {\n if (arguments.length === 1) {\n if (isRegExp(name)) {\n var regexp = name;\n return this.filter(function(relativePath, file) {\n return !file.dir && regexp.test(relativePath);\n });\n }\n else { // text\n var obj = this.files[this.root + name];\n if (obj && !obj.dir) {\n return obj;\n } else {\n return null;\n }\n }\n }\n else { // more than one argument : we have data !\n name = this.root + name;\n fileAdd.call(this, name, data, o);\n }\n return this;\n },\n\n /**\n * Add a directory to the zip file, or search.\n * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders.\n * @return {JSZip} an object with the new directory as the root, or an array containing matching folders.\n */\n folder: function(arg) {\n if (!arg) {\n return this;\n }\n\n if (isRegExp(arg)) {\n return this.filter(function(relativePath, file) {\n return file.dir && arg.test(relativePath);\n });\n }\n\n // else, name is a new folder\n var name = this.root + arg;\n var newFolder = folderAdd.call(this, name);\n\n // Allow chaining by returning a new object with this folder as the root\n var ret = this.clone();\n ret.root = newFolder.name;\n return ret;\n },\n\n /**\n * Delete a file, or a directory and all sub-files, from the zip\n * @param {string} name the name of the file to delete\n * @return {JSZip} this JSZip object\n */\n remove: function(name) {\n name = this.root + name;\n var file = this.files[name];\n if (!file) {\n // Look for any folders\n if (name.slice(-1) !== \"/\") {\n name += \"/\";\n }\n file = this.files[name];\n }\n\n if (file && !file.dir) {\n // file\n delete this.files[name];\n } else {\n // maybe a folder, delete recursively\n var kids = this.filter(function(relativePath, file) {\n return file.name.slice(0, name.length) === name;\n });\n for (var i = 0; i < kids.length; i++) {\n delete this.files[kids[i].name];\n }\n }\n\n return this;\n },\n\n /**\n * @deprecated This method has been removed in JSZip 3.0, please check the upgrade guide.\n */\n generate: function() {\n throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n },\n\n /**\n * Generate the complete zip file as an internal stream.\n * @param {Object} options the options to generate the zip file :\n * - compression, \"STORE\" by default.\n * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n * @return {StreamHelper} the streamed zip file.\n */\n generateInternalStream: function(options) {\n var worker, opts = {};\n try {\n opts = utils.extend(options || {}, {\n streamFiles: false,\n compression: \"STORE\",\n compressionOptions : null,\n type: \"\",\n platform: \"DOS\",\n comment: null,\n mimeType: \"application/zip\",\n encodeFileName: utf8.utf8encode\n });\n\n opts.type = opts.type.toLowerCase();\n opts.compression = opts.compression.toUpperCase();\n\n // \"binarystring\" is preferred but the internals use \"string\".\n if(opts.type === \"binarystring\") {\n opts.type = \"string\";\n }\n\n if (!opts.type) {\n throw new Error(\"No output type specified.\");\n }\n\n utils.checkSupport(opts.type);\n\n // accept nodejs `process.platform`\n if(\n opts.platform === \"darwin\" ||\n opts.platform === \"freebsd\" ||\n opts.platform === \"linux\" ||\n opts.platform === \"sunos\"\n ) {\n opts.platform = \"UNIX\";\n }\n if (opts.platform === \"win32\") {\n opts.platform = \"DOS\";\n }\n\n var comment = opts.comment || this.comment || \"\";\n worker = generate.generateWorker(this, opts, comment);\n } catch (e) {\n worker = new GenericWorker(\"error\");\n worker.error(e);\n }\n return new StreamHelper(worker, opts.type || \"string\", opts.mimeType);\n },\n /**\n * Generate the complete zip file asynchronously.\n * @see generateInternalStream\n */\n generateAsync: function(options, onUpdate) {\n return this.generateInternalStream(options).accumulate(onUpdate);\n },\n /**\n * Generate the complete zip file asynchronously.\n * @see generateInternalStream\n */\n generateNodeStream: function(options, onUpdate) {\n options = options || {};\n if (!options.type) {\n options.type = \"nodebuffer\";\n }\n return this.generateInternalStream(options).toNodejsStream(onUpdate);\n }\n};\nmodule.exports = out;\n\n},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(require,module,exports){\n\"use strict\";\n/*\n * This file is used by module bundlers (browserify/webpack/etc) when\n * including a stream implementation. We use \"readable-stream\" to get a\n * consistent behavior between nodejs versions but bundlers often have a shim\n * for \"stream\". Using this shim greatly improve the compatibility and greatly\n * reduce the final size of the bundle (only one stream implementation, not\n * two).\n */\nmodule.exports = require(\"stream\");\n\n},{\"stream\":undefined}],17:[function(require,module,exports){\n\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction ArrayReader(data) {\n DataReader.call(this, data);\n for(var i = 0; i < this.data.length; i++) {\n data[i] = data[i] & 0xFF;\n }\n}\nutils.inherits(ArrayReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nArrayReader.prototype.byteAt = function(i) {\n return this.data[this.zero + i];\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nArrayReader.prototype.lastIndexOfSignature = function(sig) {\n var sig0 = sig.charCodeAt(0),\n sig1 = sig.charCodeAt(1),\n sig2 = sig.charCodeAt(2),\n sig3 = sig.charCodeAt(3);\n for (var i = this.length - 4; i >= 0; --i) {\n if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {\n return i - this.zero;\n }\n }\n\n return -1;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nArrayReader.prototype.readAndCheckSignature = function (sig) {\n var sig0 = sig.charCodeAt(0),\n sig1 = sig.charCodeAt(1),\n sig2 = sig.charCodeAt(2),\n sig3 = sig.charCodeAt(3),\n data = this.readData(4);\n return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3];\n};\n/**\n * @see DataReader.readData\n */\nArrayReader.prototype.readData = function(size) {\n this.checkOffset(size);\n if(size === 0) {\n return [];\n }\n var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n this.index += size;\n return result;\n};\nmodule.exports = ArrayReader;\n\n},{\"../utils\":32,\"./DataReader\":18}],18:[function(require,module,exports){\n\"use strict\";\nvar utils = require(\"../utils\");\n\nfunction DataReader(data) {\n this.data = data; // type : see implementation\n this.length = data.length;\n this.index = 0;\n this.zero = 0;\n}\nDataReader.prototype = {\n /**\n * Check that the offset will not go too far.\n * @param {string} offset the additional offset to check.\n * @throws {Error} an Error if the offset is out of bounds.\n */\n checkOffset: function(offset) {\n this.checkIndex(this.index + offset);\n },\n /**\n * Check that the specified index will not be too far.\n * @param {string} newIndex the index to check.\n * @throws {Error} an Error if the index is out of bounds.\n */\n checkIndex: function(newIndex) {\n if (this.length < this.zero + newIndex || newIndex < 0) {\n throw new Error(\"End of data reached (data length = \" + this.length + \", asked index = \" + (newIndex) + \"). Corrupted zip ?\");\n }\n },\n /**\n * Change the index.\n * @param {number} newIndex The new index.\n * @throws {Error} if the new index is out of the data.\n */\n setIndex: function(newIndex) {\n this.checkIndex(newIndex);\n this.index = newIndex;\n },\n /**\n * Skip the next n bytes.\n * @param {number} n the number of bytes to skip.\n * @throws {Error} if the new index is out of the data.\n */\n skip: function(n) {\n this.setIndex(this.index + n);\n },\n /**\n * Get the byte at the specified index.\n * @param {number} i the index to use.\n * @return {number} a byte.\n */\n byteAt: function() {\n // see implementations\n },\n /**\n * Get the next number with a given byte size.\n * @param {number} size the number of bytes to read.\n * @return {number} the corresponding number.\n */\n readInt: function(size) {\n var result = 0,\n i;\n this.checkOffset(size);\n for (i = this.index + size - 1; i >= this.index; i--) {\n result = (result << 8) + this.byteAt(i);\n }\n this.index += size;\n return result;\n },\n /**\n * Get the next string with a given byte size.\n * @param {number} size the number of bytes to read.\n * @return {string} the corresponding string.\n */\n readString: function(size) {\n return utils.transformTo(\"string\", this.readData(size));\n },\n /**\n * Get raw data without conversion, bytes.\n * @param {number} size the number of bytes to read.\n * @return {Object} the raw data, implementation specific.\n */\n readData: function() {\n // see implementations\n },\n /**\n * Find the last occurrence of a zip signature (4 bytes).\n * @param {string} sig the signature to find.\n * @return {number} the index of the last occurrence, -1 if not found.\n */\n lastIndexOfSignature: function() {\n // see implementations\n },\n /**\n * Read the signature (4 bytes) at the current position and compare it with sig.\n * @param {string} sig the expected signature\n * @return {boolean} true if the signature matches, false otherwise.\n */\n readAndCheckSignature: function() {\n // see implementations\n },\n /**\n * Get the next date.\n * @return {Date} the date.\n */\n readDate: function() {\n var dostime = this.readInt(4);\n return new Date(Date.UTC(\n ((dostime >> 25) & 0x7f) + 1980, // year\n ((dostime >> 21) & 0x0f) - 1, // month\n (dostime >> 16) & 0x1f, // day\n (dostime >> 11) & 0x1f, // hour\n (dostime >> 5) & 0x3f, // minute\n (dostime & 0x1f) << 1)); // second\n }\n};\nmodule.exports = DataReader;\n\n},{\"../utils\":32}],19:[function(require,module,exports){\n\"use strict\";\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction NodeBufferReader(data) {\n Uint8ArrayReader.call(this, data);\n}\nutils.inherits(NodeBufferReader, Uint8ArrayReader);\n\n/**\n * @see DataReader.readData\n */\nNodeBufferReader.prototype.readData = function(size) {\n this.checkOffset(size);\n var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n this.index += size;\n return result;\n};\nmodule.exports = NodeBufferReader;\n\n},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(require,module,exports){\n\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction StringReader(data) {\n DataReader.call(this, data);\n}\nutils.inherits(StringReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nStringReader.prototype.byteAt = function(i) {\n return this.data.charCodeAt(this.zero + i);\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nStringReader.prototype.lastIndexOfSignature = function(sig) {\n return this.data.lastIndexOf(sig) - this.zero;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nStringReader.prototype.readAndCheckSignature = function (sig) {\n var data = this.readData(4);\n return sig === data;\n};\n/**\n * @see DataReader.readData\n */\nStringReader.prototype.readData = function(size) {\n this.checkOffset(size);\n // this will work because the constructor applied the \"& 0xff\" mask.\n var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n this.index += size;\n return result;\n};\nmodule.exports = StringReader;\n\n},{\"../utils\":32,\"./DataReader\":18}],21:[function(require,module,exports){\n\"use strict\";\nvar ArrayReader = require(\"./ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction Uint8ArrayReader(data) {\n ArrayReader.call(this, data);\n}\nutils.inherits(Uint8ArrayReader, ArrayReader);\n/**\n * @see DataReader.readData\n */\nUint8ArrayReader.prototype.readData = function(size) {\n this.checkOffset(size);\n if(size === 0) {\n // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].\n return new Uint8Array(0);\n }\n var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);\n this.index += size;\n return result;\n};\nmodule.exports = Uint8ArrayReader;\n\n},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar support = require(\"../support\");\nvar ArrayReader = require(\"./ArrayReader\");\nvar StringReader = require(\"./StringReader\");\nvar NodeBufferReader = require(\"./NodeBufferReader\");\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\n\n/**\n * Create a reader adapted to the data.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read.\n * @return {DataReader} the data reader.\n */\nmodule.exports = function (data) {\n var type = utils.getTypeOf(data);\n utils.checkSupport(type);\n if (type === \"string\" && !support.uint8array) {\n return new StringReader(data);\n }\n if (type === \"nodebuffer\") {\n return new NodeBufferReader(data);\n }\n if (support.uint8array) {\n return new Uint8ArrayReader(utils.transformTo(\"uint8array\", data));\n }\n return new ArrayReader(utils.transformTo(\"array\", data));\n};\n\n},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(require,module,exports){\n\"use strict\";\nexports.LOCAL_FILE_HEADER = \"PK\\x03\\x04\";\nexports.CENTRAL_FILE_HEADER = \"PK\\x01\\x02\";\nexports.CENTRAL_DIRECTORY_END = \"PK\\x05\\x06\";\nexports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = \"PK\\x06\\x07\";\nexports.ZIP64_CENTRAL_DIRECTORY_END = \"PK\\x06\\x06\";\nexports.DATA_DESCRIPTOR = \"PK\\x07\\x08\";\n\n},{}],24:[function(require,module,exports){\n\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which convert chunks to a specified type.\n * @constructor\n * @param {String} destType the destination type.\n */\nfunction ConvertWorker(destType) {\n GenericWorker.call(this, \"ConvertWorker to \" + destType);\n this.destType = destType;\n}\nutils.inherits(ConvertWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nConvertWorker.prototype.processChunk = function (chunk) {\n this.push({\n data : utils.transformTo(this.destType, chunk.data),\n meta : chunk.meta\n });\n};\nmodule.exports = ConvertWorker;\n\n},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(require,module,exports){\n\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar crc32 = require(\"../crc32\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which calculate the crc32 of the data flowing through.\n * @constructor\n */\nfunction Crc32Probe() {\n GenericWorker.call(this, \"Crc32Probe\");\n this.withStreamInfo(\"crc32\", 0);\n}\nutils.inherits(Crc32Probe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nCrc32Probe.prototype.processChunk = function (chunk) {\n this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0);\n this.push(chunk);\n};\nmodule.exports = Crc32Probe;\n\n},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n/**\n * A worker which calculate the total length of the data flowing through.\n * @constructor\n * @param {String} propName the name used to expose the length\n */\nfunction DataLengthProbe(propName) {\n GenericWorker.call(this, \"DataLengthProbe for \" + propName);\n this.propName = propName;\n this.withStreamInfo(propName, 0);\n}\nutils.inherits(DataLengthProbe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nDataLengthProbe.prototype.processChunk = function (chunk) {\n if(chunk) {\n var length = this.streamInfo[this.propName] || 0;\n this.streamInfo[this.propName] = length + chunk.data.length;\n }\n GenericWorker.prototype.processChunk.call(this, chunk);\n};\nmodule.exports = DataLengthProbe;\n\n\n},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n// the size of the generated chunks\n// TODO expose this as a public variable\nvar DEFAULT_BLOCK_SIZE = 16 * 1024;\n\n/**\n * A worker that reads a content and emits chunks.\n * @constructor\n * @param {Promise} dataP the promise of the data to split\n */\nfunction DataWorker(dataP) {\n GenericWorker.call(this, \"DataWorker\");\n var self = this;\n this.dataIsReady = false;\n this.index = 0;\n this.max = 0;\n this.data = null;\n this.type = \"\";\n\n this._tickScheduled = false;\n\n dataP.then(function (data) {\n self.dataIsReady = true;\n self.data = data;\n self.max = data && data.length || 0;\n self.type = utils.getTypeOf(data);\n if(!self.isPaused) {\n self._tickAndRepeat();\n }\n }, function (e) {\n self.error(e);\n });\n}\n\nutils.inherits(DataWorker, GenericWorker);\n\n/**\n * @see GenericWorker.cleanUp\n */\nDataWorker.prototype.cleanUp = function () {\n GenericWorker.prototype.cleanUp.call(this);\n this.data = null;\n};\n\n/**\n * @see GenericWorker.resume\n */\nDataWorker.prototype.resume = function () {\n if(!GenericWorker.prototype.resume.call(this)) {\n return false;\n }\n\n if (!this._tickScheduled && this.dataIsReady) {\n this._tickScheduled = true;\n utils.delay(this._tickAndRepeat, [], this);\n }\n return true;\n};\n\n/**\n * Trigger a tick a schedule an other call to this function.\n */\nDataWorker.prototype._tickAndRepeat = function() {\n this._tickScheduled = false;\n if(this.isPaused || this.isFinished) {\n return;\n }\n this._tick();\n if(!this.isFinished) {\n utils.delay(this._tickAndRepeat, [], this);\n this._tickScheduled = true;\n }\n};\n\n/**\n * Read and push a chunk.\n */\nDataWorker.prototype._tick = function() {\n\n if(this.isPaused || this.isFinished) {\n return false;\n }\n\n var size = DEFAULT_BLOCK_SIZE;\n var data = null, nextIndex = Math.min(this.max, this.index + size);\n if (this.index >= this.max) {\n // EOF\n return this.end();\n } else {\n switch(this.type) {\n case \"string\":\n data = this.data.substring(this.index, nextIndex);\n break;\n case \"uint8array\":\n data = this.data.subarray(this.index, nextIndex);\n break;\n case \"array\":\n case \"nodebuffer\":\n data = this.data.slice(this.index, nextIndex);\n break;\n }\n this.index = nextIndex;\n return this.push({\n data : data,\n meta : {\n percent : this.max ? this.index / this.max * 100 : 0\n }\n });\n }\n};\n\nmodule.exports = DataWorker;\n\n},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(require,module,exports){\n\"use strict\";\n\n/**\n * A worker that does nothing but passing chunks to the next one. This is like\n * a nodejs stream but with some differences. On the good side :\n * - it works on IE 6-9 without any issue / polyfill\n * - it weights less than the full dependencies bundled with browserify\n * - it forwards errors (no need to declare an error handler EVERYWHERE)\n *\n * A chunk is an object with 2 attributes : `meta` and `data`. The former is an\n * object containing anything (`percent` for example), see each worker for more\n * details. The latter is the real data (String, Uint8Array, etc).\n *\n * @constructor\n * @param {String} name the name of the stream (mainly used for debugging purposes)\n */\nfunction GenericWorker(name) {\n // the name of the worker\n this.name = name || \"default\";\n // an object containing metadata about the workers chain\n this.streamInfo = {};\n // an error which happened when the worker was paused\n this.generatedError = null;\n // an object containing metadata to be merged by this worker into the general metadata\n this.extraStreamInfo = {};\n // true if the stream is paused (and should not do anything), false otherwise\n this.isPaused = true;\n // true if the stream is finished (and should not do anything), false otherwise\n this.isFinished = false;\n // true if the stream is locked to prevent further structure updates (pipe), false otherwise\n this.isLocked = false;\n // the event listeners\n this._listeners = {\n \"data\":[],\n \"end\":[],\n \"error\":[]\n };\n // the previous worker, if any\n this.previous = null;\n}\n\nGenericWorker.prototype = {\n /**\n * Push a chunk to the next workers.\n * @param {Object} chunk the chunk to push\n */\n push : function (chunk) {\n this.emit(\"data\", chunk);\n },\n /**\n * End the stream.\n * @return {Boolean} true if this call ended the worker, false otherwise.\n */\n end : function () {\n if (this.isFinished) {\n return false;\n }\n\n this.flush();\n try {\n this.emit(\"end\");\n this.cleanUp();\n this.isFinished = true;\n } catch (e) {\n this.emit(\"error\", e);\n }\n return true;\n },\n /**\n * End the stream with an error.\n * @param {Error} e the error which caused the premature end.\n * @return {Boolean} true if this call ended the worker with an error, false otherwise.\n */\n error : function (e) {\n if (this.isFinished) {\n return false;\n }\n\n if(this.isPaused) {\n this.generatedError = e;\n } else {\n this.isFinished = true;\n\n this.emit(\"error\", e);\n\n // in the workers chain exploded in the middle of the chain,\n // the error event will go downward but we also need to notify\n // workers upward that there has been an error.\n if(this.previous) {\n this.previous.error(e);\n }\n\n this.cleanUp();\n }\n return true;\n },\n /**\n * Add a callback on an event.\n * @param {String} name the name of the event (data, end, error)\n * @param {Function} listener the function to call when the event is triggered\n * @return {GenericWorker} the current object for chainability\n */\n on : function (name, listener) {\n this._listeners[name].push(listener);\n return this;\n },\n /**\n * Clean any references when a worker is ending.\n */\n cleanUp : function () {\n this.streamInfo = this.generatedError = this.extraStreamInfo = null;\n this._listeners = [];\n },\n /**\n * Trigger an event. This will call registered callback with the provided arg.\n * @param {String} name the name of the event (data, end, error)\n * @param {Object} arg the argument to call the callback with.\n */\n emit : function (name, arg) {\n if (this._listeners[name]) {\n for(var i = 0; i < this._listeners[name].length; i++) {\n this._listeners[name][i].call(this, arg);\n }\n }\n },\n /**\n * Chain a worker with an other.\n * @param {Worker} next the worker receiving events from the current one.\n * @return {worker} the next worker for chainability\n */\n pipe : function (next) {\n return next.registerPrevious(this);\n },\n /**\n * Same as `pipe` in the other direction.\n * Using an API with `pipe(next)` is very easy.\n * Implementing the API with the point of view of the next one registering\n * a source is easier, see the ZipFileWorker.\n * @param {Worker} previous the previous worker, sending events to this one\n * @return {Worker} the current worker for chainability\n */\n registerPrevious : function (previous) {\n if (this.isLocked) {\n throw new Error(\"The stream '\" + this + \"' has already been used.\");\n }\n\n // sharing the streamInfo...\n this.streamInfo = previous.streamInfo;\n // ... and adding our own bits\n this.mergeStreamInfo();\n this.previous = previous;\n var self = this;\n previous.on(\"data\", function (chunk) {\n self.processChunk(chunk);\n });\n previous.on(\"end\", function () {\n self.end();\n });\n previous.on(\"error\", function (e) {\n self.error(e);\n });\n return this;\n },\n /**\n * Pause the stream so it doesn't send events anymore.\n * @return {Boolean} true if this call paused the worker, false otherwise.\n */\n pause : function () {\n if(this.isPaused || this.isFinished) {\n return false;\n }\n this.isPaused = true;\n\n if(this.previous) {\n this.previous.pause();\n }\n return true;\n },\n /**\n * Resume a paused stream.\n * @return {Boolean} true if this call resumed the worker, false otherwise.\n */\n resume : function () {\n if(!this.isPaused || this.isFinished) {\n return false;\n }\n this.isPaused = false;\n\n // if true, the worker tried to resume but failed\n var withError = false;\n if(this.generatedError) {\n this.error(this.generatedError);\n withError = true;\n }\n if(this.previous) {\n this.previous.resume();\n }\n\n return !withError;\n },\n /**\n * Flush any remaining bytes as the stream is ending.\n */\n flush : function () {},\n /**\n * Process a chunk. This is usually the method overridden.\n * @param {Object} chunk the chunk to process.\n */\n processChunk : function(chunk) {\n this.push(chunk);\n },\n /**\n * Add a key/value to be added in the workers chain streamInfo once activated.\n * @param {String} key the key to use\n * @param {Object} value the associated value\n * @return {Worker} the current worker for chainability\n */\n withStreamInfo : function (key, value) {\n this.extraStreamInfo[key] = value;\n this.mergeStreamInfo();\n return this;\n },\n /**\n * Merge this worker's streamInfo into the chain's streamInfo.\n */\n mergeStreamInfo : function () {\n for(var key in this.extraStreamInfo) {\n if (!Object.prototype.hasOwnProperty.call(this.extraStreamInfo, key)) {\n continue;\n }\n this.streamInfo[key] = this.extraStreamInfo[key];\n }\n },\n\n /**\n * Lock the stream to prevent further updates on the workers chain.\n * After calling this method, all calls to pipe will fail.\n */\n lock: function () {\n if (this.isLocked) {\n throw new Error(\"The stream '\" + this + \"' has already been used.\");\n }\n this.isLocked = true;\n if (this.previous) {\n this.previous.lock();\n }\n },\n\n /**\n *\n * Pretty print the workers chain.\n */\n toString : function () {\n var me = \"Worker \" + this.name;\n if (this.previous) {\n return this.previous + \" -> \" + me;\n } else {\n return me;\n }\n }\n};\n\nmodule.exports = GenericWorker;\n\n},{}],29:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar ConvertWorker = require(\"./ConvertWorker\");\nvar GenericWorker = require(\"./GenericWorker\");\nvar base64 = require(\"../base64\");\nvar support = require(\"../support\");\nvar external = require(\"../external\");\n\nvar NodejsStreamOutputAdapter = null;\nif (support.nodestream) {\n try {\n NodejsStreamOutputAdapter = require(\"../nodejs/NodejsStreamOutputAdapter\");\n } catch(e) {\n // ignore\n }\n}\n\n/**\n * Apply the final transformation of the data. If the user wants a Blob for\n * example, it's easier to work with an U8intArray and finally do the\n * ArrayBuffer/Blob conversion.\n * @param {String} type the name of the final type\n * @param {String|Uint8Array|Buffer} content the content to transform\n * @param {String} mimeType the mime type of the content, if applicable.\n * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format.\n */\nfunction transformZipOutput(type, content, mimeType) {\n switch(type) {\n case \"blob\" :\n return utils.newBlob(utils.transformTo(\"arraybuffer\", content), mimeType);\n case \"base64\" :\n return base64.encode(content);\n default :\n return utils.transformTo(type, content);\n }\n}\n\n/**\n * Concatenate an array of data of the given type.\n * @param {String} type the type of the data in the given array.\n * @param {Array} dataArray the array containing the data chunks to concatenate\n * @return {String|Uint8Array|Buffer} the concatenated data\n * @throws Error if the asked type is unsupported\n */\nfunction concat (type, dataArray) {\n var i, index = 0, res = null, totalLength = 0;\n for(i = 0; i < dataArray.length; i++) {\n totalLength += dataArray[i].length;\n }\n switch(type) {\n case \"string\":\n return dataArray.join(\"\");\n case \"array\":\n return Array.prototype.concat.apply([], dataArray);\n case \"uint8array\":\n res = new Uint8Array(totalLength);\n for(i = 0; i < dataArray.length; i++) {\n res.set(dataArray[i], index);\n index += dataArray[i].length;\n }\n return res;\n case \"nodebuffer\":\n return Buffer.concat(dataArray);\n default:\n throw new Error(\"concat : unsupported type '\" + type + \"'\");\n }\n}\n\n/**\n * Listen a StreamHelper, accumulate its content and concatenate it into a\n * complete block.\n * @param {StreamHelper} helper the helper to use.\n * @param {Function} updateCallback a callback called on each update. Called\n * with one arg :\n * - the metadata linked to the update received.\n * @return Promise the promise for the accumulation.\n */\nfunction accumulate(helper, updateCallback) {\n return new external.Promise(function (resolve, reject){\n var dataArray = [];\n var chunkType = helper._internalType,\n resultType = helper._outputType,\n mimeType = helper._mimeType;\n helper\n .on(\"data\", function (data, meta) {\n dataArray.push(data);\n if(updateCallback) {\n updateCallback(meta);\n }\n })\n .on(\"error\", function(err) {\n dataArray = [];\n reject(err);\n })\n .on(\"end\", function (){\n try {\n var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType);\n resolve(result);\n } catch (e) {\n reject(e);\n }\n dataArray = [];\n })\n .resume();\n });\n}\n\n/**\n * An helper to easily use workers outside of JSZip.\n * @constructor\n * @param {Worker} worker the worker to wrap\n * @param {String} outputType the type of data expected by the use\n * @param {String} mimeType the mime type of the content, if applicable.\n */\nfunction StreamHelper(worker, outputType, mimeType) {\n var internalType = outputType;\n switch(outputType) {\n case \"blob\":\n case \"arraybuffer\":\n internalType = \"uint8array\";\n break;\n case \"base64\":\n internalType = \"string\";\n break;\n }\n\n try {\n // the type used internally\n this._internalType = internalType;\n // the type used to output results\n this._outputType = outputType;\n // the mime type\n this._mimeType = mimeType;\n utils.checkSupport(internalType);\n this._worker = worker.pipe(new ConvertWorker(internalType));\n // the last workers can be rewired without issues but we need to\n // prevent any updates on previous workers.\n worker.lock();\n } catch(e) {\n this._worker = new GenericWorker(\"error\");\n this._worker.error(e);\n }\n}\n\nStreamHelper.prototype = {\n /**\n * Listen a StreamHelper, accumulate its content and concatenate it into a\n * complete block.\n * @param {Function} updateCb the update callback.\n * @return Promise the promise for the accumulation.\n */\n accumulate : function (updateCb) {\n return accumulate(this, updateCb);\n },\n /**\n * Add a listener on an event triggered on a stream.\n * @param {String} evt the name of the event\n * @param {Function} fn the listener\n * @return {StreamHelper} the current helper.\n */\n on : function (evt, fn) {\n var self = this;\n\n if(evt === \"data\") {\n this._worker.on(evt, function (chunk) {\n fn.call(self, chunk.data, chunk.meta);\n });\n } else {\n this._worker.on(evt, function () {\n utils.delay(fn, arguments, self);\n });\n }\n return this;\n },\n /**\n * Resume the flow of chunks.\n * @return {StreamHelper} the current helper.\n */\n resume : function () {\n utils.delay(this._worker.resume, [], this._worker);\n return this;\n },\n /**\n * Pause the flow of chunks.\n * @return {StreamHelper} the current helper.\n */\n pause : function () {\n this._worker.pause();\n return this;\n },\n /**\n * Return a nodejs stream for this helper.\n * @param {Function} updateCb the update callback.\n * @return {NodejsStreamOutputAdapter} the nodejs stream.\n */\n toNodejsStream : function (updateCb) {\n utils.checkSupport(\"nodestream\");\n if (this._outputType !== \"nodebuffer\") {\n // an object stream containing blob/arraybuffer/uint8array/string\n // is strange and I don't know if it would be useful.\n // I you find this comment and have a good usecase, please open a\n // bug report !\n throw new Error(this._outputType + \" is not supported by this method\");\n }\n\n return new NodejsStreamOutputAdapter(this, {\n objectMode : this._outputType !== \"nodebuffer\"\n }, updateCb);\n }\n};\n\n\nmodule.exports = StreamHelper;\n\n},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(require,module,exports){\n\"use strict\";\n\nexports.base64 = true;\nexports.array = true;\nexports.string = true;\nexports.arraybuffer = typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\";\nexports.nodebuffer = typeof Buffer !== \"undefined\";\n// contains true if JSZip can read/generate Uint8Array, false otherwise.\nexports.uint8array = typeof Uint8Array !== \"undefined\";\n\nif (typeof ArrayBuffer === \"undefined\") {\n exports.blob = false;\n}\nelse {\n var buffer = new ArrayBuffer(0);\n try {\n exports.blob = new Blob([buffer], {\n type: \"application/zip\"\n }).size === 0;\n }\n catch (e) {\n try {\n var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n var builder = new Builder();\n builder.append(buffer);\n exports.blob = builder.getBlob(\"application/zip\").size === 0;\n }\n catch (e) {\n exports.blob = false;\n }\n }\n}\n\ntry {\n exports.nodestream = !!require(\"readable-stream\").Readable;\n} catch(e) {\n exports.nodestream = false;\n}\n\n},{\"readable-stream\":16}],31:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * The following functions come from pako, from pako/lib/utils/strings\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new Array(256);\nfor (var i=0; i<256; i++) {\n _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);\n}\n_utf8len[254]=_utf8len[254]=1; // Invalid sequence start\n\n// convert string to array (typed, when possible)\nvar string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n c2 = str.charCodeAt(m_pos+1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n if (support.uint8array) {\n buf = new Uint8Array(buf_len);\n } else {\n buf = new Array(buf_len);\n }\n\n // convert\n for (i=0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n c2 = str.charCodeAt(m_pos+1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nvar utf8border = function(buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max-1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Fuckup - very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means vuffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n// convert array to string\nvar buf2string = function (buf) {\n var i, out, c, c_len;\n var len = buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len*2);\n\n for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n // shrinkBuf(utf16buf, out)\n if (utf16buf.length !== out) {\n if(utf16buf.subarray) {\n utf16buf = utf16buf.subarray(0, out);\n } else {\n utf16buf.length = out;\n }\n }\n\n // return String.fromCharCode.apply(null, utf16buf);\n return utils.applyFromCharCode(utf16buf);\n};\n\n\n// That's all for the pako functions.\n\n\n/**\n * Transform a javascript string into an array (typed if possible) of bytes,\n * UTF-8 encoded.\n * @param {String} str the string to encode\n * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.\n */\nexports.utf8encode = function utf8encode(str) {\n if (support.nodebuffer) {\n return nodejsUtils.newBufferFrom(str, \"utf-8\");\n }\n\n return string2buf(str);\n};\n\n\n/**\n * Transform a bytes array (or a representation) representing an UTF-8 encoded\n * string into a javascript string.\n * @param {Array|Uint8Array|Buffer} buf the data de decode\n * @return {String} the decoded string.\n */\nexports.utf8decode = function utf8decode(buf) {\n if (support.nodebuffer) {\n return utils.transformTo(\"nodebuffer\", buf).toString(\"utf-8\");\n }\n\n buf = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", buf);\n\n return buf2string(buf);\n};\n\n/**\n * A worker to decode utf8 encoded binary chunks into string chunks.\n * @constructor\n */\nfunction Utf8DecodeWorker() {\n GenericWorker.call(this, \"utf-8 decode\");\n // the last bytes if a chunk didn't end with a complete codepoint.\n this.leftOver = null;\n}\nutils.inherits(Utf8DecodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8DecodeWorker.prototype.processChunk = function (chunk) {\n\n var data = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", chunk.data);\n\n // 1st step, re-use what's left of the previous chunk\n if (this.leftOver && this.leftOver.length) {\n if(support.uint8array) {\n var previousData = data;\n data = new Uint8Array(previousData.length + this.leftOver.length);\n data.set(this.leftOver, 0);\n data.set(previousData, this.leftOver.length);\n } else {\n data = this.leftOver.concat(data);\n }\n this.leftOver = null;\n }\n\n var nextBoundary = utf8border(data);\n var usableData = data;\n if (nextBoundary !== data.length) {\n if (support.uint8array) {\n usableData = data.subarray(0, nextBoundary);\n this.leftOver = data.subarray(nextBoundary, data.length);\n } else {\n usableData = data.slice(0, nextBoundary);\n this.leftOver = data.slice(nextBoundary, data.length);\n }\n }\n\n this.push({\n data : exports.utf8decode(usableData),\n meta : chunk.meta\n });\n};\n\n/**\n * @see GenericWorker.flush\n */\nUtf8DecodeWorker.prototype.flush = function () {\n if(this.leftOver && this.leftOver.length) {\n this.push({\n data : exports.utf8decode(this.leftOver),\n meta : {}\n });\n this.leftOver = null;\n }\n};\nexports.Utf8DecodeWorker = Utf8DecodeWorker;\n\n/**\n * A worker to endcode string chunks into utf8 encoded binary chunks.\n * @constructor\n */\nfunction Utf8EncodeWorker() {\n GenericWorker.call(this, \"utf-8 encode\");\n}\nutils.inherits(Utf8EncodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8EncodeWorker.prototype.processChunk = function (chunk) {\n this.push({\n data : exports.utf8encode(chunk.data),\n meta : chunk.meta\n });\n};\nexports.Utf8EncodeWorker = Utf8EncodeWorker;\n\n},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(require,module,exports){\n\"use strict\";\n\nvar support = require(\"./support\");\nvar base64 = require(\"./base64\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar external = require(\"./external\");\nrequire(\"setimmediate\");\n\n\n/**\n * Convert a string that pass as a \"binary string\": it should represent a byte\n * array but may have > 255 char codes. Be sure to take only the first byte\n * and returns the byte array.\n * @param {String} str the string to transform.\n * @return {Array|Uint8Array} the string in a binary format.\n */\nfunction string2binary(str) {\n var result = null;\n if (support.uint8array) {\n result = new Uint8Array(str.length);\n } else {\n result = new Array(str.length);\n }\n return stringToArrayLike(str, result);\n}\n\n/**\n * Create a new blob with the given content and the given type.\n * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use\n * an Uint8Array because the stock browser of android 4 won't accept it (it\n * will be silently converted to a string, \"[object Uint8Array]\").\n *\n * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge:\n * when a large amount of Array is used to create the Blob, the amount of\n * memory consumed is nearly 100 times the original data amount.\n *\n * @param {String} type the mime type of the blob.\n * @return {Blob} the created blob.\n */\nexports.newBlob = function(part, type) {\n exports.checkSupport(\"blob\");\n\n try {\n // Blob constructor\n return new Blob([part], {\n type: type\n });\n }\n catch (e) {\n\n try {\n // deprecated, browser only, old way\n var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n var builder = new Builder();\n builder.append(part);\n return builder.getBlob(type);\n }\n catch (e) {\n\n // well, fuck ?!\n throw new Error(\"Bug : can't construct the Blob.\");\n }\n }\n\n\n};\n/**\n * The identity function.\n * @param {Object} input the input.\n * @return {Object} the same input.\n */\nfunction identity(input) {\n return input;\n}\n\n/**\n * Fill in an array with a string.\n * @param {String} str the string to use.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.\n */\nfunction stringToArrayLike(str, array) {\n for (var i = 0; i < str.length; ++i) {\n array[i] = str.charCodeAt(i) & 0xFF;\n }\n return array;\n}\n\n/**\n * An helper for the function arrayLikeToString.\n * This contains static information and functions that\n * can be optimized by the browser JIT compiler.\n */\nvar arrayToStringHelper = {\n /**\n * Transform an array of int into a string, chunk by chunk.\n * See the performances notes on arrayLikeToString.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @param {String} type the type of the array.\n * @param {Integer} chunk the chunk size.\n * @return {String} the resulting string.\n * @throws Error if the chunk is too big for the stack.\n */\n stringifyByChunk: function(array, type, chunk) {\n var result = [], k = 0, len = array.length;\n // shortcut\n if (len <= chunk) {\n return String.fromCharCode.apply(null, array);\n }\n while (k < len) {\n if (type === \"array\" || type === \"nodebuffer\") {\n result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));\n }\n else {\n result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));\n }\n k += chunk;\n }\n return result.join(\"\");\n },\n /**\n * Call String.fromCharCode on every item in the array.\n * This is the naive implementation, which generate A LOT of intermediate string.\n * This should be used when everything else fail.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\n stringifyByChar: function(array){\n var resultStr = \"\";\n for(var i = 0; i < array.length; i++) {\n resultStr += String.fromCharCode(array[i]);\n }\n return resultStr;\n },\n applyCanBeUsed : {\n /**\n * true if the browser accepts to use String.fromCharCode on Uint8Array\n */\n uint8array : (function () {\n try {\n return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1;\n } catch (e) {\n return false;\n }\n })(),\n /**\n * true if the browser accepts to use String.fromCharCode on nodejs Buffer.\n */\n nodebuffer : (function () {\n try {\n return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1;\n } catch (e) {\n return false;\n }\n })()\n }\n};\n\n/**\n * Transform an array-like object to a string.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\nfunction arrayLikeToString(array) {\n // Performances notes :\n // --------------------\n // String.fromCharCode.apply(null, array) is the fastest, see\n // see http://jsperf.com/converting-a-uint8array-to-a-string/2\n // but the stack is limited (and we can get huge arrays !).\n //\n // result += String.fromCharCode(array[i]); generate too many strings !\n //\n // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2\n // TODO : we now have workers that split the work. Do we still need that ?\n var chunk = 65536,\n type = exports.getTypeOf(array),\n canUseApply = true;\n if (type === \"uint8array\") {\n canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array;\n } else if (type === \"nodebuffer\") {\n canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer;\n }\n\n if (canUseApply) {\n while (chunk > 1) {\n try {\n return arrayToStringHelper.stringifyByChunk(array, type, chunk);\n } catch (e) {\n chunk = Math.floor(chunk / 2);\n }\n }\n }\n\n // no apply or chunk error : slow and painful algorithm\n // default browser on android 4.*\n return arrayToStringHelper.stringifyByChar(array);\n}\n\nexports.applyFromCharCode = arrayLikeToString;\n\n\n/**\n * Copy the data from an array-like to an other array-like.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.\n */\nfunction arrayLikeToArrayLike(arrayFrom, arrayTo) {\n for (var i = 0; i < arrayFrom.length; i++) {\n arrayTo[i] = arrayFrom[i];\n }\n return arrayTo;\n}\n\n// a matrix containing functions to transform everything into everything.\nvar transform = {};\n\n// string to ?\ntransform[\"string\"] = {\n \"string\": identity,\n \"array\": function(input) {\n return stringToArrayLike(input, new Array(input.length));\n },\n \"arraybuffer\": function(input) {\n return transform[\"string\"][\"uint8array\"](input).buffer;\n },\n \"uint8array\": function(input) {\n return stringToArrayLike(input, new Uint8Array(input.length));\n },\n \"nodebuffer\": function(input) {\n return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length));\n }\n};\n\n// array to ?\ntransform[\"array\"] = {\n \"string\": arrayLikeToString,\n \"array\": identity,\n \"arraybuffer\": function(input) {\n return (new Uint8Array(input)).buffer;\n },\n \"uint8array\": function(input) {\n return new Uint8Array(input);\n },\n \"nodebuffer\": function(input) {\n return nodejsUtils.newBufferFrom(input);\n }\n};\n\n// arraybuffer to ?\ntransform[\"arraybuffer\"] = {\n \"string\": function(input) {\n return arrayLikeToString(new Uint8Array(input));\n },\n \"array\": function(input) {\n return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));\n },\n \"arraybuffer\": identity,\n \"uint8array\": function(input) {\n return new Uint8Array(input);\n },\n \"nodebuffer\": function(input) {\n return nodejsUtils.newBufferFrom(new Uint8Array(input));\n }\n};\n\n// uint8array to ?\ntransform[\"uint8array\"] = {\n \"string\": arrayLikeToString,\n \"array\": function(input) {\n return arrayLikeToArrayLike(input, new Array(input.length));\n },\n \"arraybuffer\": function(input) {\n return input.buffer;\n },\n \"uint8array\": identity,\n \"nodebuffer\": function(input) {\n return nodejsUtils.newBufferFrom(input);\n }\n};\n\n// nodebuffer to ?\ntransform[\"nodebuffer\"] = {\n \"string\": arrayLikeToString,\n \"array\": function(input) {\n return arrayLikeToArrayLike(input, new Array(input.length));\n },\n \"arraybuffer\": function(input) {\n return transform[\"nodebuffer\"][\"uint8array\"](input).buffer;\n },\n \"uint8array\": function(input) {\n return arrayLikeToArrayLike(input, new Uint8Array(input.length));\n },\n \"nodebuffer\": identity\n};\n\n/**\n * Transform an input into any type.\n * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.\n * If no output type is specified, the unmodified input will be returned.\n * @param {String} outputType the output type.\n * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.\n * @throws {Error} an Error if the browser doesn't support the requested output type.\n */\nexports.transformTo = function(outputType, input) {\n if (!input) {\n // undefined, null, etc\n // an empty string won't harm.\n input = \"\";\n }\n if (!outputType) {\n return input;\n }\n exports.checkSupport(outputType);\n var inputType = exports.getTypeOf(input);\n var result = transform[inputType][outputType](input);\n return result;\n};\n\n/**\n * Resolve all relative path components, \".\" and \"..\", in a path. If these relative components\n * traverse above the root then the resulting path will only contain the final path component.\n *\n * All empty components, e.g. \"//\", are removed.\n * @param {string} path A path with / or \\ separators\n * @returns {string} The path with all relative path components resolved.\n */\nexports.resolve = function(path) {\n var parts = path.split(\"/\");\n var result = [];\n for (var index = 0; index < parts.length; index++) {\n var part = parts[index];\n // Allow the first and last component to be empty for trailing slashes.\n if (part === \".\" || (part === \"\" && index !== 0 && index !== parts.length - 1)) {\n continue;\n } else if (part === \"..\") {\n result.pop();\n } else {\n result.push(part);\n }\n }\n return result.join(\"/\");\n};\n\n/**\n * Return the type of the input.\n * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.\n * @param {Object} input the input to identify.\n * @return {String} the (lowercase) type of the input.\n */\nexports.getTypeOf = function(input) {\n if (typeof input === \"string\") {\n return \"string\";\n }\n if (Object.prototype.toString.call(input) === \"[object Array]\") {\n return \"array\";\n }\n if (support.nodebuffer && nodejsUtils.isBuffer(input)) {\n return \"nodebuffer\";\n }\n if (support.uint8array && input instanceof Uint8Array) {\n return \"uint8array\";\n }\n if (support.arraybuffer && input instanceof ArrayBuffer) {\n return \"arraybuffer\";\n }\n};\n\n/**\n * Throw an exception if the type is not supported.\n * @param {String} type the type to check.\n * @throws {Error} an Error if the browser doesn't support the requested type.\n */\nexports.checkSupport = function(type) {\n var supported = support[type.toLowerCase()];\n if (!supported) {\n throw new Error(type + \" is not supported by this platform\");\n }\n};\n\nexports.MAX_VALUE_16BITS = 65535;\nexports.MAX_VALUE_32BITS = -1; // well, \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\" is parsed as -1\n\n/**\n * Prettify a string read as binary.\n * @param {string} str the string to prettify.\n * @return {string} a pretty string.\n */\nexports.pretty = function(str) {\n var res = \"\",\n code, i;\n for (i = 0; i < (str || \"\").length; i++) {\n code = str.charCodeAt(i);\n res += \"\\\\x\" + (code < 16 ? \"0\" : \"\") + code.toString(16).toUpperCase();\n }\n return res;\n};\n\n/**\n * Defer the call of a function.\n * @param {Function} callback the function to call asynchronously.\n * @param {Array} args the arguments to give to the callback.\n */\nexports.delay = function(callback, args, self) {\n setImmediate(function () {\n callback.apply(self || null, args || []);\n });\n};\n\n/**\n * Extends a prototype with an other, without calling a constructor with\n * side effects. Inspired by nodejs' `utils.inherits`\n * @param {Function} ctor the constructor to augment\n * @param {Function} superCtor the parent constructor to use\n */\nexports.inherits = function (ctor, superCtor) {\n var Obj = function() {};\n Obj.prototype = superCtor.prototype;\n ctor.prototype = new Obj();\n};\n\n/**\n * Merge the objects passed as parameters into a new one.\n * @private\n * @param {...Object} var_args All objects to merge.\n * @return {Object} a new object with the data of the others.\n */\nexports.extend = function() {\n var result = {}, i, attr;\n for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers\n for (attr in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], attr) && typeof result[attr] === \"undefined\") {\n result[attr] = arguments[i][attr];\n }\n }\n }\n return result;\n};\n\n/**\n * Transform arbitrary content into a Promise.\n * @param {String} name a name for the content being processed.\n * @param {Object} inputData the content to process.\n * @param {Boolean} isBinary true if the content is not an unicode string\n * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character.\n * @param {Boolean} isBase64 true if the string content is encoded with base64.\n * @return {Promise} a promise in a format usable by JSZip.\n */\nexports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) {\n\n // if inputData is already a promise, this flatten it.\n var promise = external.Promise.resolve(inputData).then(function(data) {\n\n\n var isBlob = support.blob && (data instanceof Blob || [\"[object File]\", \"[object Blob]\"].indexOf(Object.prototype.toString.call(data)) !== -1);\n\n if (isBlob && typeof FileReader !== \"undefined\") {\n return new external.Promise(function (resolve, reject) {\n var reader = new FileReader();\n\n reader.onload = function(e) {\n resolve(e.target.result);\n };\n reader.onerror = function(e) {\n reject(e.target.error);\n };\n reader.readAsArrayBuffer(data);\n });\n } else {\n return data;\n }\n });\n\n return promise.then(function(data) {\n var dataType = exports.getTypeOf(data);\n\n if (!dataType) {\n return external.Promise.reject(\n new Error(\"Can't read the data of '\" + name + \"'. Is it \" +\n \"in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\")\n );\n }\n // special case : it's way easier to work with Uint8Array than with ArrayBuffer\n if (dataType === \"arraybuffer\") {\n data = exports.transformTo(\"uint8array\", data);\n } else if (dataType === \"string\") {\n if (isBase64) {\n data = base64.decode(data);\n }\n else if (isBinary) {\n // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask\n if (isOptimizedBinaryString !== true) {\n // this is a string, not in a base64 format.\n // Be sure that this is a correct \"binary string\"\n data = string2binary(data);\n }\n }\n }\n return data;\n });\n};\n\n},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,\"setimmediate\":54}],33:[function(require,module,exports){\n\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar sig = require(\"./signature\");\nvar ZipEntry = require(\"./zipEntry\");\nvar support = require(\"./support\");\n// class ZipEntries {{{\n/**\n * All the entries in the zip file.\n * @constructor\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntries(loadOptions) {\n this.files = [];\n this.loadOptions = loadOptions;\n}\nZipEntries.prototype = {\n /**\n * Check that the reader is on the specified signature.\n * @param {string} expectedSignature the expected signature.\n * @throws {Error} if it is an other signature.\n */\n checkSignature: function(expectedSignature) {\n if (!this.reader.readAndCheckSignature(expectedSignature)) {\n this.reader.index -= 4;\n var signature = this.reader.readString(4);\n throw new Error(\"Corrupted zip or bug: unexpected signature \" + \"(\" + utils.pretty(signature) + \", expected \" + utils.pretty(expectedSignature) + \")\");\n }\n },\n /**\n * Check if the given signature is at the given index.\n * @param {number} askedIndex the index to check.\n * @param {string} expectedSignature the signature to expect.\n * @return {boolean} true if the signature is here, false otherwise.\n */\n isSignature: function(askedIndex, expectedSignature) {\n var currentIndex = this.reader.index;\n this.reader.setIndex(askedIndex);\n var signature = this.reader.readString(4);\n var result = signature === expectedSignature;\n this.reader.setIndex(currentIndex);\n return result;\n },\n /**\n * Read the end of the central directory.\n */\n readBlockEndOfCentral: function() {\n this.diskNumber = this.reader.readInt(2);\n this.diskWithCentralDirStart = this.reader.readInt(2);\n this.centralDirRecordsOnThisDisk = this.reader.readInt(2);\n this.centralDirRecords = this.reader.readInt(2);\n this.centralDirSize = this.reader.readInt(4);\n this.centralDirOffset = this.reader.readInt(4);\n\n this.zipCommentLength = this.reader.readInt(2);\n // warning : the encoding depends of the system locale\n // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.\n // On a windows machine, this field is encoded with the localized windows code page.\n var zipComment = this.reader.readData(this.zipCommentLength);\n var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n // To get consistent behavior with the generation part, we will assume that\n // this is utf8 encoded unless specified otherwise.\n var decodeContent = utils.transformTo(decodeParamType, zipComment);\n this.zipComment = this.loadOptions.decodeFileName(decodeContent);\n },\n /**\n * Read the end of the Zip 64 central directory.\n * Not merged with the method readEndOfCentral :\n * The end of central can coexist with its Zip64 brother,\n * I don't want to read the wrong number of bytes !\n */\n readBlockZip64EndOfCentral: function() {\n this.zip64EndOfCentralSize = this.reader.readInt(8);\n this.reader.skip(4);\n // this.versionMadeBy = this.reader.readString(2);\n // this.versionNeeded = this.reader.readInt(2);\n this.diskNumber = this.reader.readInt(4);\n this.diskWithCentralDirStart = this.reader.readInt(4);\n this.centralDirRecordsOnThisDisk = this.reader.readInt(8);\n this.centralDirRecords = this.reader.readInt(8);\n this.centralDirSize = this.reader.readInt(8);\n this.centralDirOffset = this.reader.readInt(8);\n\n this.zip64ExtensibleData = {};\n var extraDataSize = this.zip64EndOfCentralSize - 44,\n index = 0,\n extraFieldId,\n extraFieldLength,\n extraFieldValue;\n while (index < extraDataSize) {\n extraFieldId = this.reader.readInt(2);\n extraFieldLength = this.reader.readInt(4);\n extraFieldValue = this.reader.readData(extraFieldLength);\n this.zip64ExtensibleData[extraFieldId] = {\n id: extraFieldId,\n length: extraFieldLength,\n value: extraFieldValue\n };\n }\n },\n /**\n * Read the end of the Zip 64 central directory locator.\n */\n readBlockZip64EndOfCentralLocator: function() {\n this.diskWithZip64CentralDirStart = this.reader.readInt(4);\n this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);\n this.disksCount = this.reader.readInt(4);\n if (this.disksCount > 1) {\n throw new Error(\"Multi-volumes zip are not supported\");\n }\n },\n /**\n * Read the local files, based on the offset read in the central part.\n */\n readLocalFiles: function() {\n var i, file;\n for (i = 0; i < this.files.length; i++) {\n file = this.files[i];\n this.reader.setIndex(file.localHeaderOffset);\n this.checkSignature(sig.LOCAL_FILE_HEADER);\n file.readLocalPart(this.reader);\n file.handleUTF8();\n file.processAttributes();\n }\n },\n /**\n * Read the central directory.\n */\n readCentralDir: function() {\n var file;\n\n this.reader.setIndex(this.centralDirOffset);\n while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) {\n file = new ZipEntry({\n zip64: this.zip64\n }, this.loadOptions);\n file.readCentralPart(this.reader);\n this.files.push(file);\n }\n\n if (this.centralDirRecords !== this.files.length) {\n if (this.centralDirRecords !== 0 && this.files.length === 0) {\n // We expected some records but couldn't find ANY.\n // This is really suspicious, as if something went wrong.\n throw new Error(\"Corrupted zip or bug: expected \" + this.centralDirRecords + \" records in central dir, got \" + this.files.length);\n } else {\n // We found some records but not all.\n // Something is wrong but we got something for the user: no error here.\n // console.warn(\"expected\", this.centralDirRecords, \"records in central dir, got\", this.files.length);\n }\n }\n },\n /**\n * Read the end of central directory.\n */\n readEndOfCentral: function() {\n var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);\n if (offset < 0) {\n // Check if the content is a truncated zip or complete garbage.\n // A \"LOCAL_FILE_HEADER\" is not required at the beginning (auto\n // extractible zip for example) but it can give a good hint.\n // If an ajax request was used without responseType, we will also\n // get unreadable data.\n var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER);\n\n if (isGarbage) {\n throw new Error(\"Can't find end of central directory : is this a zip file ? \" +\n \"If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\");\n } else {\n throw new Error(\"Corrupted zip: can't find end of central directory\");\n }\n\n }\n this.reader.setIndex(offset);\n var endOfCentralDirOffset = offset;\n this.checkSignature(sig.CENTRAL_DIRECTORY_END);\n this.readBlockEndOfCentral();\n\n\n /* extract from the zip spec :\n 4) If one of the fields in the end of central directory\n record is too small to hold required data, the field\n should be set to -1 (0xFFFF or 0xFFFFFFFF) and the\n ZIP64 format record should be created.\n 5) The end of central directory record and the\n Zip64 end of central directory locator record must\n reside on the same disk when splitting or spanning\n an archive.\n */\n if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {\n this.zip64 = true;\n\n /*\n Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from\n the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents\n all numbers as 64-bit double precision IEEE 754 floating point numbers.\n So, we have 53bits for integers and bitwise operations treat everything as 32bits.\n see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators\n and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5\n */\n\n // should look for a zip64 EOCD locator\n offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n if (offset < 0) {\n throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");\n }\n this.reader.setIndex(offset);\n this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n this.readBlockZip64EndOfCentralLocator();\n\n // now the zip64 EOCD record\n if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) {\n // console.warn(\"ZIP64 end of central directory not where expected.\");\n this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n if (this.relativeOffsetEndOfZip64CentralDir < 0) {\n throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");\n }\n }\n this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);\n this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n this.readBlockZip64EndOfCentral();\n }\n\n var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize;\n if (this.zip64) {\n expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator\n expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize;\n }\n\n var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset;\n\n if (extraBytes > 0) {\n // console.warn(extraBytes, \"extra bytes at beginning or within zipfile\");\n if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) {\n // The offsets seem wrong, but we have something at the specified offset.\n // So… we keep it.\n } else {\n // the offset is wrong, update the \"zero\" of the reader\n // this happens if data has been prepended (crx files for example)\n this.reader.zero = extraBytes;\n }\n } else if (extraBytes < 0) {\n throw new Error(\"Corrupted zip: missing \" + Math.abs(extraBytes) + \" bytes.\");\n }\n },\n prepareReader: function(data) {\n this.reader = readerFor(data);\n },\n /**\n * Read a zip file and create ZipEntries.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.\n */\n load: function(data) {\n this.prepareReader(data);\n this.readEndOfCentral();\n this.readCentralDir();\n this.readLocalFiles();\n }\n};\n// }}} end of ZipEntries\nmodule.exports = ZipEntries;\n\n},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(require,module,exports){\n\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar CompressedObject = require(\"./compressedObject\");\nvar crc32fn = require(\"./crc32\");\nvar utf8 = require(\"./utf8\");\nvar compressions = require(\"./compressions\");\nvar support = require(\"./support\");\n\nvar MADE_BY_DOS = 0x00;\nvar MADE_BY_UNIX = 0x03;\n\n/**\n * Find a compression registered in JSZip.\n * @param {string} compressionMethod the method magic to find.\n * @return {Object|null} the JSZip compression object, null if none found.\n */\nvar findCompression = function(compressionMethod) {\n for (var method in compressions) {\n if (!Object.prototype.hasOwnProperty.call(compressions, method)) {\n continue;\n }\n if (compressions[method].magic === compressionMethod) {\n return compressions[method];\n }\n }\n return null;\n};\n\n// class ZipEntry {{{\n/**\n * An entry in the zip file.\n * @constructor\n * @param {Object} options Options of the current file.\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntry(options, loadOptions) {\n this.options = options;\n this.loadOptions = loadOptions;\n}\nZipEntry.prototype = {\n /**\n * say if the file is encrypted.\n * @return {boolean} true if the file is encrypted, false otherwise.\n */\n isEncrypted: function() {\n // bit 1 is set\n return (this.bitFlag & 0x0001) === 0x0001;\n },\n /**\n * say if the file has utf-8 filename/comment.\n * @return {boolean} true if the filename/comment is in utf-8, false otherwise.\n */\n useUTF8: function() {\n // bit 11 is set\n return (this.bitFlag & 0x0800) === 0x0800;\n },\n /**\n * Read the local part of a zip file and add the info in this object.\n * @param {DataReader} reader the reader to use.\n */\n readLocalPart: function(reader) {\n var compression, localExtraFieldsLength;\n\n // we already know everything from the central dir !\n // If the central dir data are false, we are doomed.\n // On the bright side, the local part is scary : zip64, data descriptors, both, etc.\n // The less data we get here, the more reliable this should be.\n // Let's skip the whole header and dash to the data !\n reader.skip(22);\n // in some zip created on windows, the filename stored in the central dir contains \\ instead of /.\n // Strangely, the filename here is OK.\n // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes\n // or APPNOTE#4.4.17.1, \"All slashes MUST be forward slashes '/'\") but there are a lot of bad zip generators...\n // Search \"unzip mismatching \"local\" filename continuing with \"central\" filename version\" on\n // the internet.\n //\n // I think I see the logic here : the central directory is used to display\n // content and the local directory is used to extract the files. Mixing / and \\\n // may be used to display \\ to windows users and use / when extracting the files.\n // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394\n this.fileNameLength = reader.readInt(2);\n localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir\n // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding.\n this.fileName = reader.readData(this.fileNameLength);\n reader.skip(localExtraFieldsLength);\n\n if (this.compressedSize === -1 || this.uncompressedSize === -1) {\n throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory \" + \"(compressedSize === -1 || uncompressedSize === -1)\");\n }\n\n compression = findCompression(this.compressionMethod);\n if (compression === null) { // no compression found\n throw new Error(\"Corrupted zip : compression \" + utils.pretty(this.compressionMethod) + \" unknown (inner file : \" + utils.transformTo(\"string\", this.fileName) + \")\");\n }\n this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize));\n },\n\n /**\n * Read the central part of a zip file and add the info in this object.\n * @param {DataReader} reader the reader to use.\n */\n readCentralPart: function(reader) {\n this.versionMadeBy = reader.readInt(2);\n reader.skip(2);\n // this.versionNeeded = reader.readInt(2);\n this.bitFlag = reader.readInt(2);\n this.compressionMethod = reader.readString(2);\n this.date = reader.readDate();\n this.crc32 = reader.readInt(4);\n this.compressedSize = reader.readInt(4);\n this.uncompressedSize = reader.readInt(4);\n var fileNameLength = reader.readInt(2);\n this.extraFieldsLength = reader.readInt(2);\n this.fileCommentLength = reader.readInt(2);\n this.diskNumberStart = reader.readInt(2);\n this.internalFileAttributes = reader.readInt(2);\n this.externalFileAttributes = reader.readInt(4);\n this.localHeaderOffset = reader.readInt(4);\n\n if (this.isEncrypted()) {\n throw new Error(\"Encrypted zip are not supported\");\n }\n\n // will be read in the local part, see the comments there\n reader.skip(fileNameLength);\n this.readExtraFields(reader);\n this.parseZIP64ExtraField(reader);\n this.fileComment = reader.readData(this.fileCommentLength);\n },\n\n /**\n * Parse the external file attributes and get the unix/dos permissions.\n */\n processAttributes: function () {\n this.unixPermissions = null;\n this.dosPermissions = null;\n var madeBy = this.versionMadeBy >> 8;\n\n // Check if we have the DOS directory flag set.\n // We look for it in the DOS and UNIX permissions\n // but some unknown platform could set it as a compatibility flag.\n this.dir = this.externalFileAttributes & 0x0010 ? true : false;\n\n if(madeBy === MADE_BY_DOS) {\n // first 6 bits (0 to 5)\n this.dosPermissions = this.externalFileAttributes & 0x3F;\n }\n\n if(madeBy === MADE_BY_UNIX) {\n this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF;\n // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8);\n }\n\n // fail safe : if the name ends with a / it probably means a folder\n if (!this.dir && this.fileNameStr.slice(-1) === \"/\") {\n this.dir = true;\n }\n },\n\n /**\n * Parse the ZIP64 extra field and merge the info in the current ZipEntry.\n * @param {DataReader} reader the reader to use.\n */\n parseZIP64ExtraField: function() {\n if (!this.extraFields[0x0001]) {\n return;\n }\n\n // should be something, preparing the extra reader\n var extraReader = readerFor(this.extraFields[0x0001].value);\n\n // I really hope that these 64bits integer can fit in 32 bits integer, because js\n // won't let us have more.\n if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {\n this.uncompressedSize = extraReader.readInt(8);\n }\n if (this.compressedSize === utils.MAX_VALUE_32BITS) {\n this.compressedSize = extraReader.readInt(8);\n }\n if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {\n this.localHeaderOffset = extraReader.readInt(8);\n }\n if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {\n this.diskNumberStart = extraReader.readInt(4);\n }\n },\n /**\n * Read the central part of a zip file and add the info in this object.\n * @param {DataReader} reader the reader to use.\n */\n readExtraFields: function(reader) {\n var end = reader.index + this.extraFieldsLength,\n extraFieldId,\n extraFieldLength,\n extraFieldValue;\n\n if (!this.extraFields) {\n this.extraFields = {};\n }\n\n while (reader.index + 4 < end) {\n extraFieldId = reader.readInt(2);\n extraFieldLength = reader.readInt(2);\n extraFieldValue = reader.readData(extraFieldLength);\n\n this.extraFields[extraFieldId] = {\n id: extraFieldId,\n length: extraFieldLength,\n value: extraFieldValue\n };\n }\n\n reader.setIndex(end);\n },\n /**\n * Apply an UTF8 transformation if needed.\n */\n handleUTF8: function() {\n var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n if (this.useUTF8()) {\n this.fileNameStr = utf8.utf8decode(this.fileName);\n this.fileCommentStr = utf8.utf8decode(this.fileComment);\n } else {\n var upath = this.findExtraFieldUnicodePath();\n if (upath !== null) {\n this.fileNameStr = upath;\n } else {\n // ASCII text or unsupported code page\n var fileNameByteArray = utils.transformTo(decodeParamType, this.fileName);\n this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray);\n }\n\n var ucomment = this.findExtraFieldUnicodeComment();\n if (ucomment !== null) {\n this.fileCommentStr = ucomment;\n } else {\n // ASCII text or unsupported code page\n var commentByteArray = utils.transformTo(decodeParamType, this.fileComment);\n this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray);\n }\n }\n },\n\n /**\n * Find the unicode path declared in the extra field, if any.\n * @return {String} the unicode path, null otherwise.\n */\n findExtraFieldUnicodePath: function() {\n var upathField = this.extraFields[0x7075];\n if (upathField) {\n var extraReader = readerFor(upathField.value);\n\n // wrong version\n if (extraReader.readInt(1) !== 1) {\n return null;\n }\n\n // the crc of the filename changed, this field is out of date.\n if (crc32fn(this.fileName) !== extraReader.readInt(4)) {\n return null;\n }\n\n return utf8.utf8decode(extraReader.readData(upathField.length - 5));\n }\n return null;\n },\n\n /**\n * Find the unicode comment declared in the extra field, if any.\n * @return {String} the unicode comment, null otherwise.\n */\n findExtraFieldUnicodeComment: function() {\n var ucommentField = this.extraFields[0x6375];\n if (ucommentField) {\n var extraReader = readerFor(ucommentField.value);\n\n // wrong version\n if (extraReader.readInt(1) !== 1) {\n return null;\n }\n\n // the crc of the comment changed, this field is out of date.\n if (crc32fn(this.fileComment) !== extraReader.readInt(4)) {\n return null;\n }\n\n return utf8.utf8decode(extraReader.readData(ucommentField.length - 5));\n }\n return null;\n }\n};\nmodule.exports = ZipEntry;\n\n},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(require,module,exports){\n\"use strict\";\n\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar utf8 = require(\"./utf8\");\nvar CompressedObject = require(\"./compressedObject\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * A simple object representing a file in the zip file.\n * @constructor\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data\n * @param {Object} options the options of the file\n */\nvar ZipObject = function(name, data, options) {\n this.name = name;\n this.dir = options.dir;\n this.date = options.date;\n this.comment = options.comment;\n this.unixPermissions = options.unixPermissions;\n this.dosPermissions = options.dosPermissions;\n\n this._data = data;\n this._dataBinary = options.binary;\n // keep only the compression\n this.options = {\n compression : options.compression,\n compressionOptions : options.compressionOptions\n };\n};\n\nZipObject.prototype = {\n /**\n * Create an internal stream for the content of this object.\n * @param {String} type the type of each chunk.\n * @return StreamHelper the stream.\n */\n internalStream: function (type) {\n var result = null, outputType = \"string\";\n try {\n if (!type) {\n throw new Error(\"No output type specified.\");\n }\n outputType = type.toLowerCase();\n var askUnicodeString = outputType === \"string\" || outputType === \"text\";\n if (outputType === \"binarystring\" || outputType === \"text\") {\n outputType = \"string\";\n }\n result = this._decompressWorker();\n\n var isUnicodeString = !this._dataBinary;\n\n if (isUnicodeString && !askUnicodeString) {\n result = result.pipe(new utf8.Utf8EncodeWorker());\n }\n if (!isUnicodeString && askUnicodeString) {\n result = result.pipe(new utf8.Utf8DecodeWorker());\n }\n } catch (e) {\n result = new GenericWorker(\"error\");\n result.error(e);\n }\n\n return new StreamHelper(result, outputType, \"\");\n },\n\n /**\n * Prepare the content in the asked type.\n * @param {String} type the type of the result.\n * @param {Function} onUpdate a function to call on each internal update.\n * @return Promise the promise of the result.\n */\n async: function (type, onUpdate) {\n return this.internalStream(type).accumulate(onUpdate);\n },\n\n /**\n * Prepare the content as a nodejs stream.\n * @param {String} type the type of each chunk.\n * @param {Function} onUpdate a function to call on each internal update.\n * @return Stream the stream.\n */\n nodeStream: function (type, onUpdate) {\n return this.internalStream(type || \"nodebuffer\").toNodejsStream(onUpdate);\n },\n\n /**\n * Return a worker for the compressed content.\n * @private\n * @param {Object} compression the compression object to use.\n * @param {Object} compressionOptions the options to use when compressing.\n * @return Worker the worker.\n */\n _compressWorker: function (compression, compressionOptions) {\n if (\n this._data instanceof CompressedObject &&\n this._data.compression.magic === compression.magic\n ) {\n return this._data.getCompressedWorker();\n } else {\n var result = this._decompressWorker();\n if(!this._dataBinary) {\n result = result.pipe(new utf8.Utf8EncodeWorker());\n }\n return CompressedObject.createWorkerFrom(result, compression, compressionOptions);\n }\n },\n /**\n * Return a worker for the decompressed content.\n * @private\n * @return Worker the worker.\n */\n _decompressWorker : function () {\n if (this._data instanceof CompressedObject) {\n return this._data.getContentWorker();\n } else if (this._data instanceof GenericWorker) {\n return this._data;\n } else {\n return new DataWorker(this._data);\n }\n }\n};\n\nvar removedMethods = [\"asText\", \"asBinary\", \"asNodeBuffer\", \"asUint8Array\", \"asArrayBuffer\"];\nvar removedFn = function () {\n throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n};\n\nfor(var i = 0; i < removedMethods.length; i++) {\n ZipObject.prototype[removedMethods[i]] = removedFn;\n}\nmodule.exports = ZipObject;\n\n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(require,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n if (Mutation) {\n var called = 0;\n var observer = new Mutation(nextTick);\n var element = global.document.createTextNode('');\n observer.observe(element, {\n characterData: true\n });\n scheduleDrain = function () {\n element.data = (called = ++called % 2);\n };\n } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n var channel = new global.MessageChannel();\n channel.port1.onmessage = nextTick;\n scheduleDrain = function () {\n channel.port2.postMessage(0);\n };\n } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n scheduleDrain = function () {\n\n // Create a \r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./readBook.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./readBook.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./readBook.vue?vue&type=template&id=87140528&scoped=true&\"\nimport script from \"./readBook.vue?vue&type=script&lang=js&\"\nexport * from \"./readBook.vue?vue&type=script&lang=js&\"\nimport style0 from \"./readBook.vue?vue&type=style&index=0&id=87140528&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"87140528\",\n null\n \n)\n\nexport default component.exports","import {defer, isXml, parse} from \"./core\";\nimport Path from \"./path\";\n\nfunction request(url, type, withCredentials, headers) {\n\tvar supportsURL = (typeof window != \"undefined\") ? window.URL : false; // TODO: fallback for url if window isn't defined\n\tvar BLOB_RESPONSE = supportsURL ? \"blob\" : \"arraybuffer\";\n\n\tvar deferred = new defer();\n\n\tvar xhr = new XMLHttpRequest();\n\n\t//-- Check from PDF.js:\n\t// https://github.com/mozilla/pdf.js/blob/master/web/compatibility.js\n\tvar xhrPrototype = XMLHttpRequest.prototype;\n\n\tvar header;\n\n\tif (!(\"overrideMimeType\" in xhrPrototype)) {\n\t\t// IE10 might have response, but not overrideMimeType\n\t\tObject.defineProperty(xhrPrototype, \"overrideMimeType\", {\n\t\t\tvalue: function xmlHttpRequestOverrideMimeType() {}\n\t\t});\n\t}\n\n\tif(withCredentials) {\n\t\txhr.withCredentials = true;\n\t}\n\n\txhr.onreadystatechange = handler;\n\txhr.onerror = err;\n\n\txhr.open(\"GET\", url, true);\n\n\tfor(header in headers) {\n\t\txhr.setRequestHeader(header, headers[header]);\n\t}\n\n\tif(type == \"json\") {\n\t\txhr.setRequestHeader(\"Accept\", \"application/json\");\n\t}\n\n\t// If type isn\"t set, determine it from the file extension\n\tif(!type) {\n\t\ttype = new Path(url).extension;\n\t}\n\n\tif(type == \"blob\"){\n\t\txhr.responseType = BLOB_RESPONSE;\n\t}\n\n\n\tif(isXml(type)) {\n\t\t// xhr.responseType = \"document\";\n\t\txhr.overrideMimeType(\"text/xml\"); // for OPF parsing\n\t}\n\n\tif(type == \"xhtml\") {\n\t\t// xhr.responseType = \"document\";\n\t}\n\n\tif(type == \"html\" || type == \"htm\") {\n\t\t// xhr.responseType = \"document\";\n\t}\n\n\tif(type == \"binary\") {\n\t\txhr.responseType = \"arraybuffer\";\n\t}\n\n\txhr.send();\n\n\tfunction err(e) {\n\t\tdeferred.reject(e);\n\t}\n\n\tfunction handler() {\n\t\tif (this.readyState === XMLHttpRequest.DONE) {\n\t\t\tvar responseXML = false;\n\n\t\t\tif(this.responseType === \"\" || this.responseType === \"document\") {\n\t\t\t\tresponseXML = this.responseXML;\n\t\t\t}\n\n\t\t\tif (this.status === 200 || this.status === 0 || responseXML) { //-- Firefox is reporting 0 for blob urls\n\t\t\t\tvar r;\n\n\t\t\t\tif (!this.response && !responseXML) {\n\t\t\t\t\tdeferred.reject({\n\t\t\t\t\t\tstatus: this.status,\n\t\t\t\t\t\tmessage : \"Empty Response\",\n\t\t\t\t\t\tstack : new Error().stack\n\t\t\t\t\t});\n\t\t\t\t\treturn deferred.promise;\n\t\t\t\t}\n\n\t\t\t\tif (this.status === 403) {\n\t\t\t\t\tdeferred.reject({\n\t\t\t\t\t\tstatus: this.status,\n\t\t\t\t\t\tresponse: this.response,\n\t\t\t\t\t\tmessage : \"Forbidden\",\n\t\t\t\t\t\tstack : new Error().stack\n\t\t\t\t\t});\n\t\t\t\t\treturn deferred.promise;\n\t\t\t\t}\n\t\t\t\tif(responseXML){\n\t\t\t\t\tr = this.responseXML;\n\t\t\t\t} else\n\t\t\t\tif(isXml(type)){\n\t\t\t\t\t// xhr.overrideMimeType(\"text/xml\"); // for OPF parsing\n\t\t\t\t\t// If this.responseXML wasn't set, try to parse using a DOMParser from text\n\t\t\t\t\tr = parse(this.response, \"text/xml\");\n\t\t\t\t}else\n\t\t\t\tif(type == \"xhtml\"){\n\t\t\t\t\tr = parse(this.response, \"application/xhtml+xml\");\n\t\t\t\t}else\n\t\t\t\tif(type == \"html\" || type == \"htm\"){\n\t\t\t\t\tr = parse(this.response, \"text/html\");\n\t\t\t\t}else\n\t\t\t\tif(type == \"json\"){\n\t\t\t\t\tr = JSON.parse(this.response);\n\t\t\t\t}else\n\t\t\t\tif(type == \"blob\"){\n\n\t\t\t\t\tif(supportsURL) {\n\t\t\t\t\t\tr = this.response;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//-- Safari doesn't support responseType blob, so create a blob from arraybuffer\n\t\t\t\t\t\tr = new Blob([this.response]);\n\t\t\t\t\t}\n\n\t\t\t\t}else{\n\t\t\t\t\tr = this.response;\n\t\t\t\t}\n\n\t\t\t\tdeferred.resolve(r);\n\t\t\t} else {\n\n\t\t\t\tdeferred.reject({\n\t\t\t\t\tstatus: this.status,\n\t\t\t\t\tmessage : this.response,\n\t\t\t\t\tstack : new Error().stack\n\t\t\t\t});\n\n\t\t\t}\n\t\t}\n\t}\n\n\treturn deferred.promise;\n}\n\nexport default request;\n","import { defer } from \"./utils/core\";\nimport EpubCFI from \"./epubcfi\";\nimport Hook from \"./utils/hook\";\nimport { sprint } from \"./utils/core\";\nimport { replaceBase } from \"./utils/replacements\";\nimport Request from \"./utils/request\";\nimport { DOMParser as XMLDOMSerializer } from \"@xmldom/xmldom\";\n\n/**\n * Represents a Section of the Book\n *\n * In most books this is equivalent to a Chapter\n * @param {object} item The spine item representing the section\n * @param {object} hooks hooks for serialize and content\n */\nclass Section {\n\tconstructor(item, hooks){\n\t\tthis.idref = item.idref;\n\t\tthis.linear = item.linear === \"yes\";\n\t\tthis.properties = item.properties;\n\t\tthis.index = item.index;\n\t\tthis.href = item.href;\n\t\tthis.url = item.url;\n\t\tthis.canonical = item.canonical;\n\t\tthis.next = item.next;\n\t\tthis.prev = item.prev;\n\n\t\tthis.cfiBase = item.cfiBase;\n\n\t\tif (hooks) {\n\t\t\tthis.hooks = hooks;\n\t\t} else {\n\t\t\tthis.hooks = {};\n\t\t\tthis.hooks.serialize = new Hook(this);\n\t\t\tthis.hooks.content = new Hook(this);\n\t\t}\n\n\t\tthis.document = undefined;\n\t\tthis.contents = undefined;\n\t\tthis.output = undefined;\n\t}\n\n\t/**\n\t * Load the section from its url\n\t * @param {method} [_request] a request method to use for loading\n\t * @return {document} a promise with the xml document\n\t */\n\tload(_request){\n\t\tvar request = _request || this.request || Request;\n\t\tvar loading = new defer();\n\t\tvar loaded = loading.promise;\n\n\t\tif(this.contents) {\n\t\t\tloading.resolve(this.contents);\n\t\t} else {\n\t\t\trequest(this.url)\n\t\t\t\t.then(function(xml){\n\t\t\t\t\t// var directory = new Url(this.url).directory;\n\n\t\t\t\t\tthis.document = xml;\n\t\t\t\t\tthis.contents = xml.documentElement;\n\n\t\t\t\t\treturn this.hooks.content.trigger(this.document, this);\n\t\t\t\t}.bind(this))\n\t\t\t\t.then(function(){\n\t\t\t\t\tloading.resolve(this.contents);\n\t\t\t\t}.bind(this))\n\t\t\t\t.catch(function(error){\n\t\t\t\t\tloading.reject(error);\n\t\t\t\t});\n\t\t}\n\n\t\treturn loaded;\n\t}\n\n\t/**\n\t * Adds a base tag for resolving urls in the section\n\t * @private\n\t */\n\tbase(){\n\t\treturn replaceBase(this.document, this);\n\t}\n\n\t/**\n\t * Render the contents of a section\n\t * @param {method} [_request] a request method to use for loading\n\t * @return {string} output a serialized XML Document\n\t */\n\trender(_request){\n\t\tvar rendering = new defer();\n\t\tvar rendered = rendering.promise;\n\t\tthis.output; // TODO: better way to return this from hooks?\n\n\t\tthis.load(_request).\n\t\t\tthen(function(contents){\n\t\t\t\tvar userAgent = (typeof navigator !== 'undefined' && navigator.userAgent) || '';\n\t\t\t\tvar isIE = userAgent.indexOf('Trident') >= 0;\n\t\t\t\tvar Serializer;\n\t\t\t\tif (typeof XMLSerializer === \"undefined\" || isIE) {\n\t\t\t\t\tSerializer = XMLDOMSerializer;\n\t\t\t\t} else {\n\t\t\t\t\tSerializer = XMLSerializer;\n\t\t\t\t}\n\t\t\t\tvar serializer = new Serializer();\n\t\t\t\tthis.output = serializer.serializeToString(contents);\n\t\t\t\treturn this.output;\n\t\t\t}.bind(this)).\n\t\t\tthen(function(){\n\t\t\t\treturn this.hooks.serialize.trigger(this.output, this);\n\t\t\t}.bind(this)).\n\t\t\tthen(function(){\n\t\t\t\trendering.resolve(this.output);\n\t\t\t}.bind(this))\n\t\t\t.catch(function(error){\n\t\t\t\trendering.reject(error);\n\t\t\t});\n\n\t\treturn rendered;\n\t}\n\n\t/**\n\t * Find a string in a section\n\t * @param {string} _query The query string to find\n\t * @return {object[]} A list of matches, with form {cfi, excerpt}\n\t */\n\tfind(_query){\n\t\tvar section = this;\n\t\tvar matches = [];\n\t\tvar query = _query.toLowerCase();\n\t\tvar find = function(node){\n\t\t\tvar text = node.textContent.toLowerCase();\n\t\t\tvar range = section.document.createRange();\n\t\t\tvar cfi;\n\t\t\tvar pos;\n\t\t\tvar last = -1;\n\t\t\tvar excerpt;\n\t\t\tvar limit = 150;\n\n\t\t\twhile (pos != -1) {\n\t\t\t\t// Search for the query\n\t\t\t\tpos = text.indexOf(query, last + 1);\n\n\t\t\t\tif (pos != -1) {\n\t\t\t\t\t// We found it! Generate a CFI\n\t\t\t\t\trange = section.document.createRange();\n\t\t\t\t\trange.setStart(node, pos);\n\t\t\t\t\trange.setEnd(node, pos + query.length);\n\n\t\t\t\t\tcfi = section.cfiFromRange(range);\n\n\t\t\t\t\t// Generate the excerpt\n\t\t\t\t\tif (node.textContent.length < limit) {\n\t\t\t\t\t\texcerpt = node.textContent;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\texcerpt = node.textContent.substring(pos - limit/2, pos + limit/2);\n\t\t\t\t\t\texcerpt = \"...\" + excerpt + \"...\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add the CFI to the matches list\n\t\t\t\t\tmatches.push({\n\t\t\t\t\t\tcfi: cfi,\n\t\t\t\t\t\texcerpt: excerpt\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tlast = pos;\n\t\t\t}\n\t\t};\n\n\t\tsprint(section.document, function(node) {\n\t\t\tfind(node);\n\t\t});\n\n\t\treturn matches;\n\t};\n\n\n\t/**\n\t * Search a string in multiple sequential Element of the section. If the document.createTreeWalker api is missed(eg: IE8), use `find` as a fallback.\n\t * @param {string} _query The query string to search\n\t * @param {int} maxSeqEle The maximum number of Element that are combined for search, default value is 5.\n\t * @return {object[]} A list of matches, with form {cfi, excerpt}\n\t */\n\tsearch(_query , maxSeqEle = 5){\n\t\tif (typeof(document.createTreeWalker) == \"undefined\") {\n\t\t\treturn this.find(_query);\n\t\t}\n\t\tlet matches = [];\n\t\tconst excerptLimit = 150;\n\t\tconst section = this;\n\t\tconst query = _query.toLowerCase();\n\t\tconst search = function(nodeList){\n\t\t\tconst textWithCase = nodeList.reduce((acc ,current)=>{\n\t\t\t\treturn acc + current.textContent;\n\t\t\t},\"\");\n\t\t\tconst text = textWithCase.toLowerCase();\n\t\t\tconst pos = text.indexOf(query);\n\t\t\tif (pos != -1){\n\t\t\t\tconst startNodeIndex = 0 , endPos = pos + query.length;\n\t\t\t\tlet endNodeIndex = 0 , l = 0;\n\t\t\t\tif (pos < nodeList[startNodeIndex].length){\n\t\t\t\t\tlet cfi;\n\t\t\t\t\twhile( endNodeIndex < nodeList.length - 1 ){\n\t\t\t\t\t\tl += nodeList[endNodeIndex].length;\n\t\t\t\t\t\tif ( endPos <= l){\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tendNodeIndex += 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet startNode = nodeList[startNodeIndex] , endNode = nodeList[endNodeIndex];\n\t\t\t\t\tlet range = section.document.createRange();\n\t\t\t\t\trange.setStart(startNode,pos);\n\t\t\t\t\tlet beforeEndLengthCount = nodeList.slice(0, endNodeIndex).reduce((acc,current)=>{return acc+current.textContent.length;},0) ;\n\t\t\t\t\trange.setEnd(endNode, beforeEndLengthCount > endPos ? endPos : endPos - beforeEndLengthCount );\n\t\t\t\t\tcfi = section.cfiFromRange(range);\n\n\t\t\t\t\tlet excerpt = nodeList.slice(0, endNodeIndex+1).reduce((acc,current)=>{return acc+current.textContent ;},\"\");\n\t\t\t\t\tif (excerpt.length > excerptLimit){\n\t\t\t\t\t\texcerpt = excerpt.substring(pos - excerptLimit/2, pos + excerptLimit/2);\n\t\t\t\t\t\texcerpt = \"...\" + excerpt + \"...\";\n\t\t\t\t\t}\n\t\t\t\t\tmatches.push({\n\t\t\t\t\t\tcfi: cfi,\n\t\t\t\t\t\texcerpt: excerpt\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst treeWalker = document.createTreeWalker(section.document, NodeFilter.SHOW_TEXT, null, false);\n\t\tlet node , nodeList = [];\n\t\twhile (node = treeWalker.nextNode()) {\n\t\t\tnodeList.push(node);\n\t\t\tif (nodeList.length == maxSeqEle){\n\t\t\t\tsearch(nodeList.slice(0 , maxSeqEle));\n\t\t\t\tnodeList = nodeList.slice(1, maxSeqEle);\n\t\t\t}\n\t\t}\n\t\tif (nodeList.length > 0){\n\t\t\tsearch(nodeList);\n\t\t}\n\t\treturn matches;\n\t}\n\n\t/**\n\t* Reconciles the current chapters layout properties with\n\t* the global layout properties.\n\t* @param {object} globalLayout The global layout settings object, chapter properties string\n\t* @return {object} layoutProperties Object with layout properties\n\t*/\n\treconcileLayoutSettings(globalLayout){\n\t\t//-- Get the global defaults\n\t\tvar settings = {\n\t\t\tlayout : globalLayout.layout,\n\t\t\tspread : globalLayout.spread,\n\t\t\torientation : globalLayout.orientation\n\t\t};\n\n\t\t//-- Get the chapter's display type\n\t\tthis.properties.forEach(function(prop){\n\t\t\tvar rendition = prop.replace(\"rendition:\", \"\");\n\t\t\tvar split = rendition.indexOf(\"-\");\n\t\t\tvar property, value;\n\n\t\t\tif(split != -1){\n\t\t\t\tproperty = rendition.slice(0, split);\n\t\t\t\tvalue = rendition.slice(split+1);\n\n\t\t\t\tsettings[property] = value;\n\t\t\t}\n\t\t});\n\t\treturn settings;\n\t}\n\n\t/**\n\t * Get a CFI from a Range in the Section\n\t * @param {range} _range\n\t * @return {string} cfi an EpubCFI string\n\t */\n\tcfiFromRange(_range) {\n\t\treturn new EpubCFI(_range, this.cfiBase).toString();\n\t}\n\n\t/**\n\t * Get a CFI from an Element in the Section\n\t * @param {element} el\n\t * @return {string} cfi an EpubCFI string\n\t */\n\tcfiFromElement(el) {\n\t\treturn new EpubCFI(el, this.cfiBase).toString();\n\t}\n\n\t/**\n\t * Unload the section document\n\t */\n\tunload() {\n\t\tthis.document = undefined;\n\t\tthis.contents = undefined;\n\t\tthis.output = undefined;\n\t}\n\n\tdestroy() {\n\t\tthis.unload();\n\t\tthis.hooks.serialize.clear();\n\t\tthis.hooks.content.clear();\n\n\t\tthis.hooks = undefined;\n\t\tthis.idref = undefined;\n\t\tthis.linear = undefined;\n\t\tthis.properties = undefined;\n\t\tthis.index = undefined;\n\t\tthis.href = undefined;\n\t\tthis.url = undefined;\n\t\tthis.next = undefined;\n\t\tthis.prev = undefined;\n\n\t\tthis.cfiBase = undefined;\n\t}\n}\n\nexport default Section;\n","import EpubCFI from \"./epubcfi\";\nimport Hook from \"./utils/hook\";\nimport Section from \"./section\";\nimport {replaceBase, replaceCanonical, replaceMeta} from \"./utils/replacements\";\n\n/**\n * A collection of Spine Items\n */\nclass Spine {\n\tconstructor() {\n\t\tthis.spineItems = [];\n\t\tthis.spineByHref = {};\n\t\tthis.spineById = {};\n\n\t\tthis.hooks = {};\n\t\tthis.hooks.serialize = new Hook();\n\t\tthis.hooks.content = new Hook();\n\n\t\t// Register replacements\n\t\tthis.hooks.content.register(replaceBase);\n\t\tthis.hooks.content.register(replaceCanonical);\n\t\tthis.hooks.content.register(replaceMeta);\n\n\t\tthis.epubcfi = new EpubCFI();\n\n\t\tthis.loaded = false;\n\n\t\tthis.items = undefined;\n\t\tthis.manifest = undefined;\n\t\tthis.spineNodeIndex = undefined;\n\t\tthis.baseUrl = undefined;\n\t\tthis.length = undefined;\n\t}\n\n\t/**\n\t * Unpack items from a opf into spine items\n\t * @param {Packaging} _package\n\t * @param {method} resolver URL resolver\n\t * @param {method} canonical Resolve canonical url\n\t */\n\tunpack(_package, resolver, canonical) {\n\n\t\tthis.items = _package.spine;\n\t\tthis.manifest = _package.manifest;\n\t\tthis.spineNodeIndex = _package.spineNodeIndex;\n\t\tthis.baseUrl = _package.baseUrl || _package.basePath || \"\";\n\t\tthis.length = this.items.length;\n\n\t\tthis.items.forEach( (item, index) => {\n\t\t\tvar manifestItem = this.manifest[item.idref];\n\t\t\tvar spineItem;\n\n\t\t\titem.index = index;\n\t\t\titem.cfiBase = this.epubcfi.generateChapterComponent(this.spineNodeIndex, item.index, item.id);\n\n\t\t\tif (item.href) {\n\t\t\t\titem.url = resolver(item.href, true);\n\t\t\t\titem.canonical = canonical(item.href);\n\t\t\t}\n\n\t\t\tif(manifestItem) {\n\t\t\t\titem.href = manifestItem.href;\n\t\t\t\titem.url = resolver(item.href, true);\n\t\t\t\titem.canonical = canonical(item.href);\n\n\t\t\t\tif(manifestItem.properties.length){\n\t\t\t\t\titem.properties.push.apply(item.properties, manifestItem.properties);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (item.linear === \"yes\") {\n\t\t\t\titem.prev = function() {\n\t\t\t\t\tlet prevIndex = item.index;\n\t\t\t\t\twhile (prevIndex > 0) {\n\t\t\t\t\t\tlet prev = this.get(prevIndex-1);\n\t\t\t\t\t\tif (prev && prev.linear) {\n\t\t\t\t\t\t\treturn prev;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprevIndex -= 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}.bind(this);\n\t\t\t\titem.next = function() {\n\t\t\t\t\tlet nextIndex = item.index;\n\t\t\t\t\twhile (nextIndex < this.spineItems.length-1) {\n\t\t\t\t\t\tlet next = this.get(nextIndex+1);\n\t\t\t\t\t\tif (next && next.linear) {\n\t\t\t\t\t\t\treturn next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnextIndex += 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}.bind(this);\n\t\t\t} else {\n\t\t\t\titem.prev = function() {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\titem.next = function() {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tspineItem = new Section(item, this.hooks);\n\n\t\t\tthis.append(spineItem);\n\n\n\t\t});\n\n\t\tthis.loaded = true;\n\t}\n\n\t/**\n\t * Get an item from the spine\n\t * @param {string|number} [target]\n\t * @return {Section} section\n\t * @example spine.get();\n\t * @example spine.get(1);\n\t * @example spine.get(\"chap1.html\");\n\t * @example spine.get(\"#id1234\");\n\t */\n\tget(target) {\n\t\tvar index = 0;\n\n\t\tif (typeof target === \"undefined\") {\n\t\t\twhile (index < this.spineItems.length) {\n\t\t\t\tlet next = this.spineItems[index];\n\t\t\t\tif (next && next.linear) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tindex += 1;\n\t\t\t}\n\t\t} else if(this.epubcfi.isCfiString(target)) {\n\t\t\tlet cfi = new EpubCFI(target);\n\t\t\tindex = cfi.spinePos;\n\t\t} else if(typeof target === \"number\" || isNaN(target) === false){\n\t\t\tindex = target;\n\t\t} else if(typeof target === \"string\" && target.indexOf(\"#\") === 0) {\n\t\t\tindex = this.spineById[target.substring(1)];\n\t\t} else if(typeof target === \"string\") {\n\t\t\t// Remove fragments\n\t\t\ttarget = target.split(\"#\")[0];\n\t\t\tindex = this.spineByHref[target] || this.spineByHref[encodeURI(target)];\n\t\t}\n\n\t\treturn this.spineItems[index] || null;\n\t}\n\n\t/**\n\t * Append a Section to the Spine\n\t * @private\n\t * @param {Section} section\n\t */\n\tappend(section) {\n\t\tvar index = this.spineItems.length;\n\t\tsection.index = index;\n\n\t\tthis.spineItems.push(section);\n\n\t\t// Encode and Decode href lookups\n\t\t// see pr for details: https://github.com/futurepress/epub.js/pull/358\n\t\tthis.spineByHref[decodeURI(section.href)] = index;\n\t\tthis.spineByHref[encodeURI(section.href)] = index;\n\t\tthis.spineByHref[section.href] = index;\n\n\t\tthis.spineById[section.idref] = index;\n\n\t\treturn index;\n\t}\n\n\t/**\n\t * Prepend a Section to the Spine\n\t * @private\n\t * @param {Section} section\n\t */\n\tprepend(section) {\n\t\t// var index = this.spineItems.unshift(section);\n\t\tthis.spineByHref[section.href] = 0;\n\t\tthis.spineById[section.idref] = 0;\n\n\t\t// Re-index\n\t\tthis.spineItems.forEach(function(item, index){\n\t\t\titem.index = index;\n\t\t});\n\n\t\treturn 0;\n\t}\n\n\t// insert(section, index) {\n\t//\n\t// };\n\n\t/**\n\t * Remove a Section from the Spine\n\t * @private\n\t * @param {Section} section\n\t */\n\tremove(section) {\n\t\tvar index = this.spineItems.indexOf(section);\n\n\t\tif(index > -1) {\n\t\t\tdelete this.spineByHref[section.href];\n\t\t\tdelete this.spineById[section.idref];\n\n\t\t\treturn this.spineItems.splice(index, 1);\n\t\t}\n\t}\n\n\t/**\n\t * Loop over the Sections in the Spine\n\t * @return {method} forEach\n\t */\n\teach() {\n\t\treturn this.spineItems.forEach.apply(this.spineItems, arguments);\n\t}\n\n\t/**\n\t * Find the first Section in the Spine\n\t * @return {Section} first section\n\t */\n\tfirst() {\n\t\tlet index = 0;\n\n\t\tdo {\n\t\t\tlet next = this.get(index);\n\n\t\t\tif (next && next.linear) {\n\t\t\t\treturn next;\n\t\t\t}\n\t\t\tindex += 1;\n\t\t} while (index < this.spineItems.length) ;\n\t}\n\n\t/**\n\t * Find the last Section in the Spine\n\t * @return {Section} last section\n\t */\n\tlast() {\n\t\tlet index = this.spineItems.length-1;\n\n\t\tdo {\n\t\t\tlet prev = this.get(index);\n\t\t\tif (prev && prev.linear) {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\tindex -= 1;\n\t\t} while (index >= 0);\n\t}\n\n\tdestroy() {\n\t\tthis.each((section) => section.destroy());\n\n\t\tthis.spineItems = undefined\n\t\tthis.spineByHref = undefined\n\t\tthis.spineById = undefined\n\n\t\tthis.hooks.serialize.clear();\n\t\tthis.hooks.content.clear();\n\t\tthis.hooks = undefined;\n\n\t\tthis.epubcfi = undefined;\n\n\t\tthis.loaded = false;\n\n\t\tthis.items = undefined;\n\t\tthis.manifest = undefined;\n\t\tthis.spineNodeIndex = undefined;\n\t\tthis.baseUrl = undefined;\n\t\tthis.length = undefined;\n\t}\n}\n\nexport default Spine;\n","import {qs, sprint, locationOf, defer} from \"./utils/core\";\nimport Queue from \"./utils/queue\";\nimport EpubCFI from \"./epubcfi\";\nimport { EVENTS } from \"./utils/constants\";\nimport EventEmitter from \"event-emitter\";\n\n/**\n * Find Locations for a Book\n * @param {Spine} spine\n * @param {request} request\n * @param {number} [pause=100]\n */\nclass Locations {\n\tconstructor(spine, request, pause) {\n\t\tthis.spine = spine;\n\t\tthis.request = request;\n\t\tthis.pause = pause || 100;\n\n\t\tthis.q = new Queue(this);\n\t\tthis.epubcfi = new EpubCFI();\n\n\t\tthis._locations = [];\n\t\tthis._locationsWords = [];\n\t\tthis.total = 0;\n\n\t\tthis.break = 150;\n\n\t\tthis._current = 0;\n\n\t\tthis._wordCounter = 0;\n\n\t\tthis.currentLocation = '';\n\t\tthis._currentCfi ='';\n\t\tthis.processingTimeout = undefined;\n\t}\n\n\t/**\n\t * Load all of sections in the book to generate locations\n\t * @param {int} chars how many chars to split on\n\t * @return {Promise>} locations\n\t */\n\tgenerate(chars) {\n\n\t\tif (chars) {\n\t\t\tthis.break = chars;\n\t\t}\n\n\t\tthis.q.pause();\n\n\t\tthis.spine.each(function(section) {\n\t\t\tif (section.linear) {\n\t\t\t\tthis.q.enqueue(this.process.bind(this), section);\n\t\t\t}\n\t\t}.bind(this));\n\n\t\treturn this.q.run().then(function() {\n\t\t\tthis.total = this._locations.length - 1;\n\n\t\t\tif (this._currentCfi) {\n\t\t\t\tthis.currentLocation = this._currentCfi;\n\t\t\t}\n\n\t\t\treturn this._locations;\n\t\t\t// console.log(this.percentage(this.book.rendition.location.start), this.percentage(this.book.rendition.location.end));\n\t\t}.bind(this));\n\n\t}\n\n\tcreateRange () {\n\t\treturn {\n\t\t\tstartContainer: undefined,\n\t\t\tstartOffset: undefined,\n\t\t\tendContainer: undefined,\n\t\t\tendOffset: undefined\n\t\t};\n\t}\n\n\tprocess(section) {\n\n\t\treturn section.load(this.request)\n\t\t\t.then(function(contents) {\n\t\t\t\tvar completed = new defer();\n\t\t\t\tvar locations = this.parse(contents, section.cfiBase);\n\t\t\t\tthis._locations = this._locations.concat(locations);\n\n\t\t\t\tsection.unload();\n\n\t\t\t\tthis.processingTimeout = setTimeout(() => completed.resolve(locations), this.pause);\n\t\t\t\treturn completed.promise;\n\t\t\t}.bind(this));\n\n\t}\n\n\tparse(contents, cfiBase, chars) {\n\t\tvar locations = [];\n\t\tvar range;\n\t\tvar doc = contents.ownerDocument;\n\t\tvar body = qs(doc, \"body\");\n\t\tvar counter = 0;\n\t\tvar prev;\n\t\tvar _break = chars || this.break;\n\t\tvar parser = function(node) {\n\t\t\tvar len = node.length;\n\t\t\tvar dist;\n\t\t\tvar pos = 0;\n\n\t\t\tif (node.textContent.trim().length === 0) {\n\t\t\t\treturn false; // continue\n\t\t\t}\n\n\t\t\t// Start range\n\t\t\tif (counter == 0) {\n\t\t\t\trange = this.createRange();\n\t\t\t\trange.startContainer = node;\n\t\t\t\trange.startOffset = 0;\n\t\t\t}\n\n\t\t\tdist = _break - counter;\n\n\t\t\t// Node is smaller than a break,\n\t\t\t// skip over it\n\t\t\tif(dist > len){\n\t\t\t\tcounter += len;\n\t\t\t\tpos = len;\n\t\t\t}\n\n\n\t\t\twhile (pos < len) {\n\t\t\t\tdist = _break - counter;\n\n\t\t\t\tif (counter === 0) {\n\t\t\t\t\t// Start new range\n\t\t\t\t\tpos += 1;\n\t\t\t\t\trange = this.createRange();\n\t\t\t\t\trange.startContainer = node;\n\t\t\t\t\trange.startOffset = pos;\n\t\t\t\t}\n\n\t\t\t\t// pos += dist;\n\n\t\t\t\t// Gone over\n\t\t\t\tif(pos + dist >= len){\n\t\t\t\t\t// Continue counter for next node\n\t\t\t\t\tcounter += len - pos;\n\t\t\t\t\t// break\n\t\t\t\t\tpos = len;\n\t\t\t\t// At End\n\t\t\t\t} else {\n\t\t\t\t\t// Advance pos\n\t\t\t\t\tpos += dist;\n\n\t\t\t\t\t// End the previous range\n\t\t\t\t\trange.endContainer = node;\n\t\t\t\t\trange.endOffset = pos;\n\t\t\t\t\t// cfi = section.cfiFromRange(range);\n\t\t\t\t\tlet cfi = new EpubCFI(range, cfiBase).toString();\n\t\t\t\t\tlocations.push(cfi);\n\t\t\t\t\tcounter = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tprev = node;\n\t\t};\n\n\t\tsprint(body, parser.bind(this));\n\n\t\t// Close remaining\n\t\tif (range && range.startContainer && prev) {\n\t\t\trange.endContainer = prev;\n\t\t\trange.endOffset = prev.length;\n\t\t\tlet cfi = new EpubCFI(range, cfiBase).toString();\n\t\t\tlocations.push(cfi);\n\t\t\tcounter = 0;\n\t\t}\n\n\t\treturn locations;\n\t}\n\n\n\t/**\n\t * Load all of sections in the book to generate locations\n\t * @param {string} startCfi start position\n\t * @param {int} wordCount how many words to split on\n\t * @param {int} count result count\n\t * @return {object} locations\n\t */\n\tgenerateFromWords(startCfi, wordCount, count) {\n\t\tvar start = startCfi ? new EpubCFI(startCfi) : undefined;\n\t\tthis.q.pause();\n\t\tthis._locationsWords = [];\n\t\tthis._wordCounter = 0;\n\n\t\tthis.spine.each(function(section) {\n\t\t\tif (section.linear) {\n\t\t\t\tif (start) {\n\t\t\t\t\tif (section.index >= start.spinePos) {\n\t\t\t\t\t\tthis.q.enqueue(this.processWords.bind(this), section, wordCount, start, count);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.q.enqueue(this.processWords.bind(this), section, wordCount, start, count);\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(this));\n\n\t\treturn this.q.run().then(function() {\n\t\t\tif (this._currentCfi) {\n\t\t\t\tthis.currentLocation = this._currentCfi;\n\t\t\t}\n\n\t\t\treturn this._locationsWords;\n\t\t}.bind(this));\n\n\t}\n\n\tprocessWords(section, wordCount, startCfi, count) {\n\t\tif (count && this._locationsWords.length >= count) {\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\treturn section.load(this.request)\n\t\t\t.then(function(contents) {\n\t\t\t\tvar completed = new defer();\n\t\t\t\tvar locations = this.parseWords(contents, section, wordCount, startCfi);\n\t\t\t\tvar remainingCount = count - this._locationsWords.length;\n\t\t\t\tthis._locationsWords = this._locationsWords.concat(locations.length >= count ? locations.slice(0, remainingCount) : locations);\n\n\t\t\t\tsection.unload();\n\n\t\t\t\tthis.processingTimeout = setTimeout(() => completed.resolve(locations), this.pause);\n\t\t\t\treturn completed.promise;\n\t\t\t}.bind(this));\n\t}\n\n\t//http://stackoverflow.com/questions/18679576/counting-words-in-string\n\tcountWords(s) {\n\t\ts = s.replace(/(^\\s*)|(\\s*$)/gi, \"\");//exclude start and end white-space\n\t\ts = s.replace(/[ ]{2,}/gi, \" \");//2 or more space to 1\n\t\ts = s.replace(/\\n /, \"\\n\"); // exclude newline with a start spacing\n\t\treturn s.split(\" \").length;\n\t}\n\n\tparseWords(contents, section, wordCount, startCfi) {\n\t\tvar cfiBase = section.cfiBase;\n\t\tvar locations = [];\n\t\tvar doc = contents.ownerDocument;\n\t\tvar body = qs(doc, \"body\");\n\t\tvar prev;\n\t\tvar _break = wordCount;\n\t\tvar foundStartNode = startCfi ? startCfi.spinePos !== section.index : true;\n\t\tvar startNode;\n\t\tif (startCfi && section.index === startCfi.spinePos) {\n\t\t\tstartNode = startCfi.findNode(startCfi.range ? startCfi.path.steps.concat(startCfi.start.steps) : startCfi.path.steps, contents.ownerDocument);\n\t\t}\n\t\tvar parser = function(node) {\n\t\t\tif (!foundStartNode) {\n\t\t\t\tif (node === startNode) {\n\t\t\t\t\tfoundStartNode = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.textContent.length < 10) {\n\t\t\t\tif (node.textContent.trim().length === 0) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar len = this.countWords(node.textContent);\n\t\t\tvar dist;\n\t\t\tvar pos = 0;\n\n\t\t\tif (len === 0) {\n\t\t\t\treturn false; // continue\n\t\t\t}\n\n\t\t\tdist = _break - this._wordCounter;\n\n\t\t\t// Node is smaller than a break,\n\t\t\t// skip over it\n\t\t\tif (dist > len) {\n\t\t\t\tthis._wordCounter += len;\n\t\t\t\tpos = len;\n\t\t\t}\n\n\n\t\t\twhile (pos < len) {\n\t\t\t\tdist = _break - this._wordCounter;\n\n\t\t\t\t// Gone over\n\t\t\t\tif (pos + dist >= len) {\n\t\t\t\t\t// Continue counter for next node\n\t\t\t\t\tthis._wordCounter += len - pos;\n\t\t\t\t\t// break\n\t\t\t\t\tpos = len;\n\t\t\t\t\t// At End\n\t\t\t\t} else {\n\t\t\t\t\t// Advance pos\n\t\t\t\t\tpos += dist;\n\n\t\t\t\t\tlet cfi = new EpubCFI(node, cfiBase);\n\t\t\t\t\tlocations.push({ cfi: cfi.toString(), wordCount: this._wordCounter });\n\t\t\t\t\tthis._wordCounter = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tprev = node;\n\t\t};\n\n\t\tsprint(body, parser.bind(this));\n\n\t\treturn locations;\n\t}\n\n\t/**\n\t * Get a location from an EpubCFI\n\t * @param {EpubCFI} cfi\n\t * @return {number}\n\t */\n\tlocationFromCfi(cfi){\n\t\tlet loc;\n\t\tif (EpubCFI.prototype.isCfiString(cfi)) {\n\t\t\tcfi = new EpubCFI(cfi);\n\t\t}\n\t\t// Check if the location has not been set yet\n\t\tif(this._locations.length === 0) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tloc = locationOf(cfi, this._locations, this.epubcfi.compare);\n\n\t\tif (loc > this.total) {\n\t\t\treturn this.total;\n\t\t}\n\n\t\treturn loc;\n\t}\n\n\t/**\n\t * Get a percentage position in locations from an EpubCFI\n\t * @param {EpubCFI} cfi\n\t * @return {number}\n\t */\n\tpercentageFromCfi(cfi) {\n\t\tif(this._locations.length === 0) {\n\t\t\treturn null;\n\t\t}\n\t\t// Find closest cfi\n\t\tvar loc = this.locationFromCfi(cfi);\n\t\t// Get percentage in total\n\t\treturn this.percentageFromLocation(loc);\n\t}\n\n\t/**\n\t * Get a percentage position from a location index\n\t * @param {number} location\n\t * @return {number}\n\t */\n\tpercentageFromLocation(loc) {\n\t\tif (!loc || !this.total) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn (loc / this.total);\n\t}\n\n\t/**\n\t * Get an EpubCFI from location index\n\t * @param {number} loc\n\t * @return {EpubCFI} cfi\n\t */\n\tcfiFromLocation(loc){\n\t\tvar cfi = -1;\n\t\t// check that pg is an int\n\t\tif(typeof loc != \"number\"){\n\t\t\tloc = parseInt(loc);\n\t\t}\n\n\t\tif(loc >= 0 && loc < this._locations.length) {\n\t\t\tcfi = this._locations[loc];\n\t\t}\n\n\t\treturn cfi;\n\t}\n\n\t/**\n\t * Get an EpubCFI from location percentage\n\t * @param {number} percentage\n\t * @return {EpubCFI} cfi\n\t */\n\tcfiFromPercentage(percentage){\n\t\tlet loc;\n\t\tif (percentage > 1) {\n\t\t\tconsole.warn(\"Normalize cfiFromPercentage value to between 0 - 1\");\n\t\t}\n\n\t\t// Make sure 1 goes to very end\n\t\tif (percentage >= 1) {\n\t\t\tlet cfi = new EpubCFI(this._locations[this.total]);\n\t\t\tcfi.collapse();\n\t\t\treturn cfi.toString();\n\t\t}\n\n\t\tloc = Math.ceil(this.total * percentage);\n\t\treturn this.cfiFromLocation(loc);\n\t}\n\n\t/**\n\t * Load locations from JSON\n\t * @param {json} locations\n\t */\n\tload(locations){\n\t\tif (typeof locations === \"string\") {\n\t\t\tthis._locations = JSON.parse(locations);\n\t\t} else {\n\t\t\tthis._locations = locations;\n\t\t}\n\t\tthis.total = this._locations.length - 1;\n\t\treturn this._locations;\n\t}\n\n\t/**\n\t * Save locations to JSON\n\t * @return {json}\n\t */\n\tsave(){\n\t\treturn JSON.stringify(this._locations);\n\t}\n\n\tgetCurrent(){\n\t\treturn this._current;\n\t}\n\n\tsetCurrent(curr){\n\t\tvar loc;\n\n\t\tif(typeof curr == \"string\"){\n\t\t\tthis._currentCfi = curr;\n\t\t} else if (typeof curr == \"number\") {\n\t\t\tthis._current = curr;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\tif(this._locations.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(typeof curr == \"string\"){\n\t\t\tloc = this.locationFromCfi(curr);\n\t\t\tthis._current = loc;\n\t\t} else {\n\t\t\tloc = curr;\n\t\t}\n\n\t\tthis.emit(EVENTS.LOCATIONS.CHANGED, {\n\t\t\tpercentage: this.percentageFromLocation(loc)\n\t\t});\n\t}\n\n\t/**\n\t * Get the current location\n\t */\n\tget currentLocation() {\n\t\treturn this._current;\n\t}\n\n\t/**\n\t * Set the current location\n\t */\n\tset currentLocation(curr) {\n\t\tthis.setCurrent(curr);\n\t}\n\n\t/**\n\t * Locations length\n\t */\n\tlength () {\n\t\treturn this._locations.length;\n\t}\n\n\tdestroy () {\n\t\tthis.spine = undefined;\n\t\tthis.request = undefined;\n\t\tthis.pause = undefined;\n\n\t\tthis.q.stop();\n\t\tthis.q = undefined;\n\t\tthis.epubcfi = undefined;\n\n\t\tthis._locations = undefined\n\t\tthis.total = undefined;\n\n\t\tthis.break = undefined;\n\t\tthis._current = undefined;\n\n\t\tthis.currentLocation = undefined;\n\t\tthis._currentCfi = undefined;\n\t\tclearTimeout(this.processingTimeout);\n\t}\n}\n\nEventEmitter(Locations.prototype);\n\nexport default Locations;\n","import path from \"path-webpack\";\nimport {qs} from \"./utils/core\";\n\n/**\n * Handles Parsing and Accessing an Epub Container\n * @class\n * @param {document} [containerDocument] xml document\n */\nclass Container {\n\tconstructor(containerDocument) {\n\t\tthis.packagePath = '';\n\t\tthis.directory = '';\n\t\tthis.encoding = '';\n\n\t\tif (containerDocument) {\n\t\t\tthis.parse(containerDocument);\n\t\t}\n\t}\n\n\t/**\n\t * Parse the Container XML\n\t * @param {document} containerDocument\n\t */\n\tparse(containerDocument){\n\t\t//-- \n\t\tvar rootfile;\n\n\t\tif(!containerDocument) {\n\t\t\tthrow new Error(\"Container File Not Found\");\n\t\t}\n\n\t\trootfile = qs(containerDocument, \"rootfile\");\n\n\t\tif(!rootfile) {\n\t\t\tthrow new Error(\"No RootFile Found\");\n\t\t}\n\n\t\tthis.packagePath = rootfile.getAttribute(\"full-path\");\n\t\tthis.directory = path.dirname(this.packagePath);\n\t\tthis.encoding = containerDocument.xmlEncoding;\n\t}\n\n\tdestroy() {\n\t\tthis.packagePath = undefined;\n\t\tthis.directory = undefined;\n\t\tthis.encoding = undefined;\n\t}\n}\n\nexport default Container;\n","import {qs, qsa, qsp, indexOfElementNode} from \"./utils/core\";\n\n/**\n * Open Packaging Format Parser\n * @class\n * @param {document} packageDocument OPF XML\n */\nclass Packaging {\n\tconstructor(packageDocument) {\n\t\tthis.manifest = {};\n\t\tthis.navPath = '';\n\t\tthis.ncxPath = '';\n\t\tthis.coverPath = '';\n\t\tthis.spineNodeIndex = 0;\n\t\tthis.spine = [];\n\t\tthis.metadata = {};\n\n\t\tif (packageDocument) {\n\t\t\tthis.parse(packageDocument);\n\t\t}\n\t}\n\n\t/**\n\t * Parse OPF XML\n\t * @param {document} packageDocument OPF XML\n\t * @return {object} parsed package parts\n\t */\n\tparse(packageDocument){\n\t\tvar metadataNode, manifestNode, spineNode;\n\n\t\tif(!packageDocument) {\n\t\t\tthrow new Error(\"Package File Not Found\");\n\t\t}\n\n\t\tmetadataNode = qs(packageDocument, \"metadata\");\n\t\tif(!metadataNode) {\n\t\t\tthrow new Error(\"No Metadata Found\");\n\t\t}\n\n\t\tmanifestNode = qs(packageDocument, \"manifest\");\n\t\tif(!manifestNode) {\n\t\t\tthrow new Error(\"No Manifest Found\");\n\t\t}\n\n\t\tspineNode = qs(packageDocument, \"spine\");\n\t\tif(!spineNode) {\n\t\t\tthrow new Error(\"No Spine Found\");\n\t\t}\n\n\t\tthis.manifest = this.parseManifest(manifestNode);\n\t\tthis.navPath = this.findNavPath(manifestNode);\n\t\tthis.ncxPath = this.findNcxPath(manifestNode, spineNode);\n\t\tthis.coverPath = this.findCoverPath(packageDocument);\n\n\t\tthis.spineNodeIndex = indexOfElementNode(spineNode);\n\n\t\tthis.spine = this.parseSpine(spineNode, this.manifest);\n\n\t\tthis.uniqueIdentifier = this.findUniqueIdentifier(packageDocument);\n\t\tthis.metadata = this.parseMetadata(metadataNode);\n\n\t\tthis.metadata.direction = spineNode.getAttribute(\"page-progression-direction\");\n\n\t\treturn {\n\t\t\t\"metadata\" : this.metadata,\n\t\t\t\"spine\" : this.spine,\n\t\t\t\"manifest\" : this.manifest,\n\t\t\t\"navPath\" : this.navPath,\n\t\t\t\"ncxPath\" : this.ncxPath,\n\t\t\t\"coverPath\": this.coverPath,\n\t\t\t\"spineNodeIndex\" : this.spineNodeIndex\n\t\t};\n\t}\n\n\t/**\n\t * Parse Metadata\n\t * @private\n\t * @param {node} xml\n\t * @return {object} metadata\n\t */\n\tparseMetadata(xml){\n\t\tvar metadata = {};\n\n\t\tmetadata.title = this.getElementText(xml, \"title\");\n\t\tmetadata.creator = this.getElementText(xml, \"creator\");\n\t\tmetadata.description = this.getElementText(xml, \"description\");\n\n\t\tmetadata.pubdate = this.getElementText(xml, \"date\");\n\n\t\tmetadata.publisher = this.getElementText(xml, \"publisher\");\n\n\t\tmetadata.identifier = this.getElementText(xml, \"identifier\");\n\t\tmetadata.language = this.getElementText(xml, \"language\");\n\t\tmetadata.rights = this.getElementText(xml, \"rights\");\n\n\t\tmetadata.modified_date = this.getPropertyText(xml, \"dcterms:modified\");\n\n\t\tmetadata.layout = this.getPropertyText(xml, \"rendition:layout\");\n\t\tmetadata.orientation = this.getPropertyText(xml, \"rendition:orientation\");\n\t\tmetadata.flow = this.getPropertyText(xml, \"rendition:flow\");\n\t\tmetadata.viewport = this.getPropertyText(xml, \"rendition:viewport\");\n\t\tmetadata.media_active_class = this.getPropertyText(xml, \"media:active-class\");\n\t\tmetadata.spread = this.getPropertyText(xml, \"rendition:spread\");\n\t\t// metadata.page_prog_dir = packageXml.querySelector(\"spine\").getAttribute(\"page-progression-direction\");\n\n\t\treturn metadata;\n\t}\n\n\t/**\n\t * Parse Manifest\n\t * @private\n\t * @param {node} manifestXml\n\t * @return {object} manifest\n\t */\n\tparseManifest(manifestXml){\n\t\tvar manifest = {};\n\n\t\t//-- Turn items into an array\n\t\t// var selected = manifestXml.querySelectorAll(\"item\");\n\t\tvar selected = qsa(manifestXml, \"item\");\n\t\tvar items = Array.prototype.slice.call(selected);\n\n\t\t//-- Create an object with the id as key\n\t\titems.forEach(function(item){\n\t\t\tvar id = item.getAttribute(\"id\"),\n\t\t\t\t\thref = item.getAttribute(\"href\") || \"\",\n\t\t\t\t\ttype = item.getAttribute(\"media-type\") || \"\",\n\t\t\t\t\toverlay = item.getAttribute(\"media-overlay\") || \"\",\n\t\t\t\t\tproperties = item.getAttribute(\"properties\") || \"\";\n\n\t\t\tmanifest[id] = {\n\t\t\t\t\"href\" : href,\n\t\t\t\t// \"url\" : href,\n\t\t\t\t\"type\" : type,\n\t\t\t\t\"overlay\" : overlay,\n\t\t\t\t\"properties\" : properties.length ? properties.split(\" \") : []\n\t\t\t};\n\n\t\t});\n\n\t\treturn manifest;\n\n\t}\n\n\t/**\n\t * Parse Spine\n\t * @private\n\t * @param {node} spineXml\n\t * @param {Packaging.manifest} manifest\n\t * @return {object} spine\n\t */\n\tparseSpine(spineXml, manifest){\n\t\tvar spine = [];\n\n\t\tvar selected = qsa(spineXml, \"itemref\");\n\t\tvar items = Array.prototype.slice.call(selected);\n\n\t\t// var epubcfi = new EpubCFI();\n\n\t\t//-- Add to array to maintain ordering and cross reference with manifest\n\t\titems.forEach(function(item, index){\n\t\t\tvar idref = item.getAttribute(\"idref\");\n\t\t\t// var cfiBase = epubcfi.generateChapterComponent(spineNodeIndex, index, Id);\n\t\t\tvar props = item.getAttribute(\"properties\") || \"\";\n\t\t\tvar propArray = props.length ? props.split(\" \") : [];\n\t\t\t// var manifestProps = manifest[Id].properties;\n\t\t\t// var manifestPropArray = manifestProps.length ? manifestProps.split(\" \") : [];\n\n\t\t\tvar itemref = {\n\t\t\t\t\"id\" : item.getAttribute(\"id\"),\n\t\t\t\t\"idref\" : idref,\n\t\t\t\t\"linear\" : item.getAttribute(\"linear\") || \"yes\",\n\t\t\t\t\"properties\" : propArray,\n\t\t\t\t// \"href\" : manifest[Id].href,\n\t\t\t\t// \"url\" : manifest[Id].url,\n\t\t\t\t\"index\" : index\n\t\t\t\t// \"cfiBase\" : cfiBase\n\t\t\t};\n\t\t\tspine.push(itemref);\n\t\t});\n\n\t\treturn spine;\n\t}\n\n\t/**\n\t * Find Unique Identifier\n\t * @private\n\t * @param {node} packageXml\n\t * @return {string} Unique Identifier text\n\t */\n\tfindUniqueIdentifier(packageXml){\n\t\tvar uniqueIdentifierId = packageXml.documentElement.getAttribute(\"unique-identifier\");\n\t\tif (! uniqueIdentifierId) {\n\t\t\treturn \"\";\n\t\t}\n\t\tvar identifier = packageXml.getElementById(uniqueIdentifierId);\n\t\tif (! identifier) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tif (identifier.localName === \"identifier\" && identifier.namespaceURI === \"http://purl.org/dc/elements/1.1/\") {\n\t\t\treturn identifier.childNodes.length > 0 ? identifier.childNodes[0].nodeValue.trim() : \"\";\n\t\t}\n\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Find TOC NAV\n\t * @private\n\t * @param {element} manifestNode\n\t * @return {string}\n\t */\n\tfindNavPath(manifestNode){\n\t\t// Find item with property \"nav\"\n\t\t// Should catch nav regardless of order\n\t\t// var node = manifestNode.querySelector(\"item[properties$='nav'], item[properties^='nav '], item[properties*=' nav ']\");\n\t\tvar node = qsp(manifestNode, \"item\", {\"properties\":\"nav\"});\n\t\treturn node ? node.getAttribute(\"href\") : false;\n\t}\n\n\t/**\n\t * Find TOC NCX\n\t * media-type=\"application/x-dtbncx+xml\" href=\"toc.ncx\"\n\t * @private\n\t * @param {element} manifestNode\n\t * @param {element} spineNode\n\t * @return {string}\n\t */\n\tfindNcxPath(manifestNode, spineNode){\n\t\t// var node = manifestNode.querySelector(\"item[media-type='application/x-dtbncx+xml']\");\n\t\tvar node = qsp(manifestNode, \"item\", {\"media-type\":\"application/x-dtbncx+xml\"});\n\t\tvar tocId;\n\n\t\t// If we can't find the toc by media-type then try to look for id of the item in the spine attributes as\n\t\t// according to http://www.idpf.org/epub/20/spec/OPF_2.0.1_draft.htm#Section2.4.1.2,\n\t\t// \"The item that describes the NCX must be referenced by the spine toc attribute.\"\n\t\tif (!node) {\n\t\t\ttocId = spineNode.getAttribute(\"toc\");\n\t\t\tif(tocId) {\n\t\t\t\t// node = manifestNode.querySelector(\"item[id='\" + tocId + \"']\");\n\t\t\t\tnode = manifestNode.querySelector(`#${tocId}`);\n\t\t\t}\n\t\t}\n\n\t\treturn node ? node.getAttribute(\"href\") : false;\n\t}\n\n\t/**\n\t * Find the Cover Path\n\t * \n\t * Fallback for Epub 2.0\n\t * @private\n\t * @param {node} packageXml\n\t * @return {string} href\n\t */\n\tfindCoverPath(packageXml){\n\t\tvar pkg = qs(packageXml, \"package\");\n\t\tvar epubVersion = pkg.getAttribute(\"version\");\n\t\t\n\t\t// Try parsing cover with epub 3.\n\t\t// var node = packageXml.querySelector(\"item[properties='cover-image']\");\n\t\tvar node = qsp(packageXml, \"item\", {\"properties\":\"cover-image\"});\n\t\tif (node) return node.getAttribute(\"href\");\n\t\t\n\t\t// Fallback to epub 2.\n\t\tvar metaCover = qsp(packageXml, \"meta\", {\"name\":\"cover\"});\n\n\t\tif (metaCover) {\n\t\t\tvar coverId = metaCover.getAttribute(\"content\");\n\t\t\t// var cover = packageXml.querySelector(\"item[id='\" + coverId + \"']\");\n\t\t\tvar cover = packageXml.getElementById(coverId);\n\t\t\treturn cover ? cover.getAttribute(\"href\") : \"\";\n\t\t}\n\t\telse {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Get text of a namespaced element\n\t * @private\n\t * @param {node} xml\n\t * @param {string} tag\n\t * @return {string} text\n\t */\n\tgetElementText(xml, tag){\n\t\tvar found = xml.getElementsByTagNameNS(\"http://purl.org/dc/elements/1.1/\", tag);\n\t\tvar el;\n\n\t\tif(!found || found.length === 0) return \"\";\n\n\t\tel = found[0];\n\n\t\tif(el.childNodes.length){\n\t\t\treturn el.childNodes[0].nodeValue;\n\t\t}\n\n\t\treturn \"\";\n\n\t}\n\n\t/**\n\t * Get text by property\n\t * @private\n\t * @param {node} xml\n\t * @param {string} property\n\t * @return {string} text\n\t */\n\tgetPropertyText(xml, property){\n\t\tvar el = qsp(xml, \"meta\", {\"property\":property});\n\n\t\tif(el && el.childNodes.length){\n\t\t\treturn el.childNodes[0].nodeValue;\n\t\t}\n\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Load JSON Manifest\n\t * @param {document} packageDocument OPF XML\n\t * @return {object} parsed package parts\n\t */\n\tload(json) {\n\t\tthis.metadata = json.metadata;\n\n\t\tlet spine = json.readingOrder || json.spine;\n\t\tthis.spine = spine.map((item, index) =>{\n\t\t\titem.index = index;\n\t\t\titem.linear = item.linear || \"yes\";\n\t\t\treturn item;\n\t\t});\n\n\t\tjson.resources.forEach((item, index) => {\n\t\t\tthis.manifest[index] = item;\n\n\t\t\tif (item.rel && item.rel[0] === \"cover\") {\n\t\t\t\tthis.coverPath = item.href;\n\t\t\t}\n\t\t});\n\n\t\tthis.spineNodeIndex = 0;\n\n\t\tthis.toc = json.toc.map((item, index) =>{\n\t\t\titem.label = item.title;\n\t\t\treturn item;\n\t\t});\n\n\t\treturn {\n\t\t\t\"metadata\" : this.metadata,\n\t\t\t\"spine\" : this.spine,\n\t\t\t\"manifest\" : this.manifest,\n\t\t\t\"navPath\" : this.navPath,\n\t\t\t\"ncxPath\" : this.ncxPath,\n\t\t\t\"coverPath\": this.coverPath,\n\t\t\t\"spineNodeIndex\" : this.spineNodeIndex,\n\t\t\t\"toc\" : this.toc\n\t\t};\n\t}\n\n\tdestroy() {\n\t\tthis.manifest = undefined;\n\t\tthis.navPath = undefined;\n\t\tthis.ncxPath = undefined;\n\t\tthis.coverPath = undefined;\n\t\tthis.spineNodeIndex = undefined;\n\t\tthis.spine = undefined;\n\t\tthis.metadata = undefined;\n\t}\n}\n\nexport default Packaging;\n","import {qs, qsa, querySelectorByType, filterChildren, getParentByTagName} from \"./utils/core\";\n\n/**\n * Navigation Parser\n * @param {document} xml navigation html / xhtml / ncx\n */\nclass Navigation {\n\tconstructor(xml) {\n\t\tthis.toc = [];\n\t\tthis.tocByHref = {};\n\t\tthis.tocById = {};\n\n\t\tthis.landmarks = [];\n\t\tthis.landmarksByType = {};\n\n\t\tthis.length = 0;\n\t\tif (xml) {\n\t\t\tthis.parse(xml);\n\t\t}\n\t}\n\n\t/**\n\t * Parse out the navigation items\n\t * @param {document} xml navigation html / xhtml / ncx\n\t */\n\tparse(xml) {\n\t\tlet isXml = xml.nodeType;\n\t\tlet html;\n\t\tlet ncx;\n\n\t\tif (isXml) {\n\t\t\thtml = qs(xml, \"html\");\n\t\t\tncx = qs(xml, \"ncx\");\n\t\t}\n\n\t\tif (!isXml) {\n\t\t\tthis.toc = this.load(xml);\n\t\t} else if(html) {\n\t\t\tthis.toc = this.parseNav(xml);\n\t\t\tthis.landmarks = this.parseLandmarks(xml);\n\t\t} else if(ncx){\n\t\t\tthis.toc = this.parseNcx(xml);\n\t\t}\n\n\t\tthis.length = 0;\n\n\t\tthis.unpack(this.toc);\n\t}\n\n\t/**\n\t * Unpack navigation items\n\t * @private\n\t * @param {array} toc\n\t */\n\tunpack(toc) {\n\t\tvar item;\n\n\t\tfor (var i = 0; i < toc.length; i++) {\n\t\t\titem = toc[i];\n\n\t\t\tif (item.href) {\n\t\t\t\tthis.tocByHref[item.href] = i;\n\t\t\t}\n\n\t\t\tif (item.id) {\n\t\t\t\tthis.tocById[item.id] = i;\n\t\t\t}\n\n\t\t\tthis.length++;\n\n\t\t\tif (item.subitems.length) {\n\t\t\t\tthis.unpack(item.subitems);\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Get an item from the navigation\n\t * @param {string} target\n\t * @return {object} navItem\n\t */\n\tget(target) {\n\t\tvar index;\n\n\t\tif(!target) {\n\t\t\treturn this.toc;\n\t\t}\n\n\t\tif(target.indexOf(\"#\") === 0) {\n\t\t\tindex = this.tocById[target.substring(1)];\n\t\t} else if(target in this.tocByHref){\n\t\t\tindex = this.tocByHref[target];\n\t\t}\n\n\t\treturn this.getByIndex(target, index, this.toc);\n\t}\n\n\t/**\n\t * Get an item from navigation subitems recursively by index\n\t * @param {string} target\n\t * @param {number} index\n\t * @param {array} navItems\n\t * @return {object} navItem\n\t */\n\tgetByIndex(target, index, navItems) {\n\t\tif (navItems.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst item = navItems[index];\n\t\tif (item && (target === item.id || target === item.href)) {\n\t\t\treturn item;\n\t\t} else {\n\t\t\tlet result;\n\t\t\tfor (let i = 0; i < navItems.length; ++i) {\n\t\t\t\tresult = this.getByIndex(target, index, navItems[i].subitems);\n\t\t\t\tif (result) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\t/**\n\t * Get a landmark by type\n\t * List of types: https://idpf.github.io/epub-vocabs/structure/\n\t * @param {string} type\n\t * @return {object} landmarkItem\n\t */\n\tlandmark(type) {\n\t\tvar index;\n\n\t\tif(!type) {\n\t\t\treturn this.landmarks;\n\t\t}\n\n\t\tindex = this.landmarksByType[type];\n\n\t\treturn this.landmarks[index];\n\t}\n\n\t/**\n\t * Parse toc from a Epub > 3.0 Nav\n\t * @private\n\t * @param {document} navHtml\n\t * @return {array} navigation list\n\t */\n\tparseNav(navHtml){\n\t\tvar navElement = querySelectorByType(navHtml, \"nav\", \"toc\");\n\t\tvar list = [];\n\n\t\tif (!navElement) return list;\n\n\t\tlet navList = filterChildren(navElement, \"ol\", true);\n\t\tif (!navList) return list;\n\n\t\tlist = this.parseNavList(navList);\n\t\treturn list;\n\t}\n\n\t/**\n\t * Parses lists in the toc\n\t * @param {document} navListHtml\n\t * @param {string} parent id\n\t * @return {array} navigation list\n\t */\n\tparseNavList(navListHtml, parent) {\n\t\tconst result = [];\n\n\t\tif (!navListHtml) return result;\n\t\tif (!navListHtml.children) return result;\n\t\t\n\t\tfor (let i = 0; i < navListHtml.children.length; i++) {\n\t\t\tconst item = this.navItem(navListHtml.children[i], parent);\n\n\t\t\tif (item) {\n\t\t\t\tresult.push(item);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Create a navItem\n\t * @private\n\t * @param {element} item\n\t * @return {object} navItem\n\t */\n\tnavItem(item, parent) {\n\t\tlet id = item.getAttribute(\"id\") || undefined;\n\t\tlet content = filterChildren(item, \"a\", true)\n\t\t\t|| filterChildren(item, \"span\", true);\n\n\t\tif (!content) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet src = content.getAttribute(\"href\") || \"\";\n\t\t\n\t\tif (!id) {\n\t\t\tid = src;\n\t\t}\n\t\tlet text = content.textContent || \"\";\n\n\t\tlet subitems = [];\n\t\tlet nested = filterChildren(item, \"ol\", true);\n\t\tif (nested) {\n\t\t\tsubitems = \tthis.parseNavList(nested, id);\n\t\t}\n\n\t\treturn {\n\t\t\t\"id\": id,\n\t\t\t\"href\": src,\n\t\t\t\"label\": text,\n\t\t\t\"subitems\" : subitems,\n\t\t\t\"parent\" : parent\n\t\t};\n\t}\n\n\t/**\n\t * Parse landmarks from a Epub > 3.0 Nav\n\t * @private\n\t * @param {document} navHtml\n\t * @return {array} landmarks list\n\t */\n\tparseLandmarks(navHtml){\n\t\tvar navElement = querySelectorByType(navHtml, \"nav\", \"landmarks\");\n\t\tvar navItems = navElement ? qsa(navElement, \"li\") : [];\n\t\tvar length = navItems.length;\n\t\tvar i;\n\t\tvar list = [];\n\t\tvar item;\n\n\t\tif(!navItems || length === 0) return list;\n\n\t\tfor (i = 0; i < length; ++i) {\n\t\t\titem = this.landmarkItem(navItems[i]);\n\t\t\tif (item) {\n\t\t\t\tlist.push(item);\n\t\t\t\tthis.landmarksByType[item.type] = i;\n\t\t\t}\n\t\t}\n\n\t\treturn list;\n\t}\n\n\t/**\n\t * Create a landmarkItem\n\t * @private\n\t * @param {element} item\n\t * @return {object} landmarkItem\n\t */\n\tlandmarkItem(item){\n\t\tlet content = filterChildren(item, \"a\", true);\n\n\t\tif (!content) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet type = content.getAttributeNS(\"http://www.idpf.org/2007/ops\", \"type\") || undefined;\n\t\tlet href = content.getAttribute(\"href\") || \"\";\n\t\tlet text = content.textContent || \"\";\n\n\t\treturn {\n\t\t\t\"href\": href,\n\t\t\t\"label\": text,\n\t\t\t\"type\" : type\n\t\t};\n\t}\n\n\t/**\n\t * Parse from a Epub > 3.0 NC\n\t * @private\n\t * @param {document} navHtml\n\t * @return {array} navigation list\n\t */\n\tparseNcx(tocXml){\n\t\tvar navPoints = qsa(tocXml, \"navPoint\");\n\t\tvar length = navPoints.length;\n\t\tvar i;\n\t\tvar toc = {};\n\t\tvar list = [];\n\t\tvar item, parent;\n\n\t\tif(!navPoints || length === 0) return list;\n\n\t\tfor (i = 0; i < length; ++i) {\n\t\t\titem = this.ncxItem(navPoints[i]);\n\t\t\ttoc[item.id] = item;\n\t\t\tif(!item.parent) {\n\t\t\t\tlist.push(item);\n\t\t\t} else {\n\t\t\t\tparent = toc[item.parent];\n\t\t\t\tparent.subitems.push(item);\n\t\t\t}\n\t\t}\n\n\t\treturn list;\n\t}\n\n\t/**\n\t * Create a ncxItem\n\t * @private\n\t * @param {element} item\n\t * @return {object} ncxItem\n\t */\n\tncxItem(item){\n\t\tvar id = item.getAttribute(\"id\") || false,\n\t\t\t\tcontent = qs(item, \"content\"),\n\t\t\t\tsrc = content.getAttribute(\"src\"),\n\t\t\t\tnavLabel = qs(item, \"navLabel\"),\n\t\t\t\ttext = navLabel.textContent ? navLabel.textContent : \"\",\n\t\t\t\tsubitems = [],\n\t\t\t\tparentNode = item.parentNode,\n\t\t\t\tparent;\n\n\t\tif(parentNode && (parentNode.nodeName === \"navPoint\" || parentNode.nodeName.split(':').slice(-1)[0] === \"navPoint\")) {\n\t\t\tparent = parentNode.getAttribute(\"id\");\n\t\t}\n\n\n\t\treturn {\n\t\t\t\"id\": id,\n\t\t\t\"href\": src,\n\t\t\t\"label\": text,\n\t\t\t\"subitems\" : subitems,\n\t\t\t\"parent\" : parent\n\t\t};\n\t}\n\n\t/**\n\t * Load Spine Items\n\t * @param {object} json the items to be loaded\n\t * @return {Array} navItems\n\t */\n\tload(json) {\n\t\treturn json.map(item => {\n\t\t\titem.label = item.title;\n\t\t\titem.subitems = item.children ? this.load(item.children) : [];\n\t\t\treturn item;\n\t\t});\n\t}\n\n\t/**\n\t * forEach pass through\n\t * @param {Function} fn function to run on each item\n\t * @return {method} forEach loop\n\t */\n\tforEach(fn) {\n\t\treturn this.toc.forEach(fn);\n\t}\n}\n\nexport default Navigation;\n","/*\n From Zip.js, by Gildas Lormeau\nedited down\n */\n\nvar table = {\n\t\"application\" : {\n\t\t\"ecmascript\" : [ \"es\", \"ecma\" ],\n\t\t\"javascript\" : \"js\",\n\t\t\"ogg\" : \"ogx\",\n\t\t\"pdf\" : \"pdf\",\n\t\t\"postscript\" : [ \"ps\", \"ai\", \"eps\", \"epsi\", \"epsf\", \"eps2\", \"eps3\" ],\n\t\t\"rdf+xml\" : \"rdf\",\n\t\t\"smil\" : [ \"smi\", \"smil\" ],\n\t\t\"xhtml+xml\" : [ \"xhtml\", \"xht\" ],\n\t\t\"xml\" : [ \"xml\", \"xsl\", \"xsd\", \"opf\", \"ncx\" ],\n\t\t\"zip\" : \"zip\",\n\t\t\"x-httpd-eruby\" : \"rhtml\",\n\t\t\"x-latex\" : \"latex\",\n\t\t\"x-maker\" : [ \"frm\", \"maker\", \"frame\", \"fm\", \"fb\", \"book\", \"fbdoc\" ],\n\t\t\"x-object\" : \"o\",\n\t\t\"x-shockwave-flash\" : [ \"swf\", \"swfl\" ],\n\t\t\"x-silverlight\" : \"scr\",\n\t\t\"epub+zip\" : \"epub\",\n\t\t\"font-tdpfr\" : \"pfr\",\n\t\t\"inkml+xml\" : [ \"ink\", \"inkml\" ],\n\t\t\"json\" : \"json\",\n\t\t\"jsonml+json\" : \"jsonml\",\n\t\t\"mathml+xml\" : \"mathml\",\n\t\t\"metalink+xml\" : \"metalink\",\n\t\t\"mp4\" : \"mp4s\",\n\t\t// \"oebps-package+xml\" : \"opf\",\n\t\t\"omdoc+xml\" : \"omdoc\",\n\t\t\"oxps\" : \"oxps\",\n\t\t\"vnd.amazon.ebook\" : \"azw\",\n\t\t\"widget\" : \"wgt\",\n\t\t// \"x-dtbncx+xml\" : \"ncx\",\n\t\t\"x-dtbook+xml\" : \"dtb\",\n\t\t\"x-dtbresource+xml\" : \"res\",\n\t\t\"x-font-bdf\" : \"bdf\",\n\t\t\"x-font-ghostscript\" : \"gsf\",\n\t\t\"x-font-linux-psf\" : \"psf\",\n\t\t\"x-font-otf\" : \"otf\",\n\t\t\"x-font-pcf\" : \"pcf\",\n\t\t\"x-font-snf\" : \"snf\",\n\t\t\"x-font-ttf\" : [ \"ttf\", \"ttc\" ],\n\t\t\"x-font-type1\" : [ \"pfa\", \"pfb\", \"pfm\", \"afm\" ],\n\t\t\"x-font-woff\" : \"woff\",\n\t\t\"x-mobipocket-ebook\" : [ \"prc\", \"mobi\" ],\n\t\t\"x-mspublisher\" : \"pub\",\n\t\t\"x-nzb\" : \"nzb\",\n\t\t\"x-tgif\" : \"obj\",\n\t\t\"xaml+xml\" : \"xaml\",\n\t\t\"xml-dtd\" : \"dtd\",\n\t\t\"xproc+xml\" : \"xpl\",\n\t\t\"xslt+xml\" : \"xslt\",\n\t\t\"internet-property-stream\" : \"acx\",\n\t\t\"x-compress\" : \"z\",\n\t\t\"x-compressed\" : \"tgz\",\n\t\t\"x-gzip\" : \"gz\",\n\t},\n\t\"audio\" : {\n\t\t\"flac\" : \"flac\",\n\t\t\"midi\" : [ \"mid\", \"midi\", \"kar\", \"rmi\" ],\n\t\t\"mpeg\" : [ \"mpga\", \"mpega\", \"mp2\", \"mp3\", \"m4a\", \"mp2a\", \"m2a\", \"m3a\" ],\n\t\t\"mpegurl\" : \"m3u\",\n\t\t\"ogg\" : [ \"oga\", \"ogg\", \"spx\" ],\n\t\t\"x-aiff\" : [ \"aif\", \"aiff\", \"aifc\" ],\n\t\t\"x-ms-wma\" : \"wma\",\n\t\t\"x-wav\" : \"wav\",\n\t\t\"adpcm\" : \"adp\",\n\t\t\"mp4\" : \"mp4a\",\n\t\t\"webm\" : \"weba\",\n\t\t\"x-aac\" : \"aac\",\n\t\t\"x-caf\" : \"caf\",\n\t\t\"x-matroska\" : \"mka\",\n\t\t\"x-pn-realaudio-plugin\" : \"rmp\",\n\t\t\"xm\" : \"xm\",\n\t\t\"mid\" : [ \"mid\", \"rmi\" ]\n\t},\n\t\"image\" : {\n\t\t\"gif\" : \"gif\",\n\t\t\"ief\" : \"ief\",\n\t\t\"jpeg\" : [ \"jpeg\", \"jpg\", \"jpe\" ],\n\t\t\"pcx\" : \"pcx\",\n\t\t\"png\" : \"png\",\n\t\t\"svg+xml\" : [ \"svg\", \"svgz\" ],\n\t\t\"tiff\" : [ \"tiff\", \"tif\" ],\n\t\t\"x-icon\" : \"ico\",\n\t\t\"bmp\" : \"bmp\",\n\t\t\"webp\" : \"webp\",\n\t\t\"x-pict\" : [ \"pic\", \"pct\" ],\n\t\t\"x-tga\" : \"tga\",\n\t\t\"cis-cod\" : \"cod\"\n\t},\n\t\"text\" : {\n\t\t\"cache-manifest\" : [ \"manifest\", \"appcache\" ],\n\t\t\"css\" : \"css\",\n\t\t\"csv\" : \"csv\",\n\t\t\"html\" : [ \"html\", \"htm\", \"shtml\", \"stm\" ],\n\t\t\"mathml\" : \"mml\",\n\t\t\"plain\" : [ \"txt\", \"text\", \"brf\", \"conf\", \"def\", \"list\", \"log\", \"in\", \"bas\" ],\n\t\t\"richtext\" : \"rtx\",\n\t\t\"tab-separated-values\" : \"tsv\",\n\t\t\"x-bibtex\" : \"bib\"\n\t},\n\t\"video\" : {\n\t\t\"mpeg\" : [ \"mpeg\", \"mpg\", \"mpe\", \"m1v\", \"m2v\", \"mp2\", \"mpa\", \"mpv2\" ],\n\t\t\"mp4\" : [ \"mp4\", \"mp4v\", \"mpg4\" ],\n\t\t\"quicktime\" : [ \"qt\", \"mov\" ],\n\t\t\"ogg\" : \"ogv\",\n\t\t\"vnd.mpegurl\" : [ \"mxu\", \"m4u\" ],\n\t\t\"x-flv\" : \"flv\",\n\t\t\"x-la-asf\" : [ \"lsf\", \"lsx\" ],\n\t\t\"x-mng\" : \"mng\",\n\t\t\"x-ms-asf\" : [ \"asf\", \"asx\", \"asr\" ],\n\t\t\"x-ms-wm\" : \"wm\",\n\t\t\"x-ms-wmv\" : \"wmv\",\n\t\t\"x-ms-wmx\" : \"wmx\",\n\t\t\"x-ms-wvx\" : \"wvx\",\n\t\t\"x-msvideo\" : \"avi\",\n\t\t\"x-sgi-movie\" : \"movie\",\n\t\t\"x-matroska\" : [ \"mpv\", \"mkv\", \"mk3d\", \"mks\" ],\n\t\t\"3gpp2\" : \"3g2\",\n\t\t\"h261\" : \"h261\",\n\t\t\"h263\" : \"h263\",\n\t\t\"h264\" : \"h264\",\n\t\t\"jpeg\" : \"jpgv\",\n\t\t\"jpm\" : [ \"jpm\", \"jpgm\" ],\n\t\t\"mj2\" : [ \"mj2\", \"mjp2\" ],\n\t\t\"vnd.ms-playready.media.pyv\" : \"pyv\",\n\t\t\"vnd.uvvu.mp4\" : [ \"uvu\", \"uvvu\" ],\n\t\t\"vnd.vivo\" : \"viv\",\n\t\t\"webm\" : \"webm\",\n\t\t\"x-f4v\" : \"f4v\",\n\t\t\"x-m4v\" : \"m4v\",\n\t\t\"x-ms-vob\" : \"vob\",\n\t\t\"x-smv\" : \"smv\"\n\t}\n};\n\nvar mimeTypes = (function() {\n\tvar type, subtype, val, index, mimeTypes = {};\n\tfor (type in table) {\n\t\tif (table.hasOwnProperty(type)) {\n\t\t\tfor (subtype in table[type]) {\n\t\t\t\tif (table[type].hasOwnProperty(subtype)) {\n\t\t\t\t\tval = table[type][subtype];\n\t\t\t\t\tif (typeof val == \"string\") {\n\t\t\t\t\t\tmimeTypes[val] = type + \"/\" + subtype;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (index = 0; index < val.length; index++) {\n\t\t\t\t\t\t\tmimeTypes[val[index]] = type + \"/\" + subtype;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn mimeTypes;\n})();\n\nvar defaultValue = \"text/plain\";//\"application/octet-stream\";\n\nfunction lookup(filename) {\n\treturn filename && mimeTypes[filename.split(\".\").pop().toLowerCase()] || defaultValue;\n};\n\nexport default { lookup };\n","import {substitute} from \"./utils/replacements\";\nimport {createBase64Url, createBlobUrl, blob2base64} from \"./utils/core\";\nimport Url from \"./utils/url\";\nimport mime from \"./utils/mime\";\nimport Path from \"./utils/path\";\nimport path from \"path-webpack\";\n\n/**\n * Handle Package Resources\n * @class\n * @param {Manifest} manifest\n * @param {object} [options]\n * @param {string} [options.replacements=\"base64\"]\n * @param {Archive} [options.archive]\n * @param {method} [options.resolver]\n */\nclass Resources {\n\tconstructor(manifest, options) {\n\t\tthis.settings = {\n\t\t\treplacements: (options && options.replacements) || \"base64\",\n\t\t\tarchive: (options && options.archive),\n\t\t\tresolver: (options && options.resolver),\n\t\t\trequest: (options && options.request)\n\t\t};\n\n\t\tthis.process(manifest);\n\t}\n\n\t/**\n\t * Process resources\n\t * @param {Manifest} manifest\n\t */\n\tprocess(manifest){\n\t\tthis.manifest = manifest;\n\t\tthis.resources = Object.keys(manifest).\n\t\t\tmap(function (key){\n\t\t\t\treturn manifest[key];\n\t\t\t});\n\n\t\tthis.replacementUrls = [];\n\n\t\tthis.html = [];\n\t\tthis.assets = [];\n\t\tthis.css = [];\n\n\t\tthis.urls = [];\n\t\tthis.cssUrls = [];\n\n\t\tthis.split();\n\t\tthis.splitUrls();\n\t}\n\n\t/**\n\t * Split resources by type\n\t * @private\n\t */\n\tsplit(){\n\n\t\t// HTML\n\t\tthis.html = this.resources.\n\t\t\tfilter(function (item){\n\t\t\t\tif (item.type === \"application/xhtml+xml\" ||\n\t\t\t\t\t\titem.type === \"text/html\") {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Exclude HTML\n\t\tthis.assets = this.resources.\n\t\t\tfilter(function (item){\n\t\t\t\tif (item.type !== \"application/xhtml+xml\" &&\n\t\t\t\t\t\titem.type !== \"text/html\") {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Only CSS\n\t\tthis.css = this.resources.\n\t\t\tfilter(function (item){\n\t\t\t\tif (item.type === \"text/css\") {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t/**\n\t * Convert split resources into Urls\n\t * @private\n\t */\n\tsplitUrls(){\n\n\t\t// All Assets Urls\n\t\tthis.urls = this.assets.\n\t\t\tmap(function(item) {\n\t\t\t\treturn item.href;\n\t\t\t}.bind(this));\n\n\t\t// Css Urls\n\t\tthis.cssUrls = this.css.map(function(item) {\n\t\t\treturn item.href;\n\t\t});\n\n\t}\n\n\t/**\n\t * Create a url to a resource\n\t * @param {string} url\n\t * @return {Promise} Promise resolves with url string\n\t */\n\tcreateUrl (url) {\n\t\tvar parsedUrl = new Url(url);\n\t\tvar mimeType = mime.lookup(parsedUrl.filename);\n\n\t\tif (this.settings.archive) {\n\t\t\treturn this.settings.archive.createUrl(url, {\"base64\": (this.settings.replacements === \"base64\")});\n\t\t} else {\n\t\t\tif (this.settings.replacements === \"base64\") {\n\t\t\t\treturn this.settings.request(url, 'blob')\n\t\t\t\t\t.then((blob) => {\n\t\t\t\t\t\treturn blob2base64(blob);\n\t\t\t\t\t})\n\t\t\t\t\t.then((blob) => {\n\t\t\t\t\t\treturn createBase64Url(blob, mimeType);\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn this.settings.request(url, 'blob').then((blob) => {\n\t\t\t\t\treturn createBlobUrl(blob, mimeType);\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Create blob urls for all the assets\n\t * @return {Promise} returns replacement urls\n\t */\n\treplacements(){\n\t\tif (this.settings.replacements === \"none\") {\n\t\t\treturn new Promise(function(resolve) {\n\t\t\t\tresolve(this.urls);\n\t\t\t}.bind(this));\n\t\t}\n\n\t\tvar replacements = this.urls.map( (url) => {\n\t\t\t\tvar absolute = this.settings.resolver(url);\n\n\t\t\t\treturn this.createUrl(absolute).\n\t\t\t\t\tcatch((err) => {\n\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t});\n\t\t\t});\n\n\t\treturn Promise.all(replacements)\n\t\t\t.then( (replacementUrls) => {\n\t\t\t\tthis.replacementUrls = replacementUrls.filter((url) => {\n\t\t\t\t\treturn (typeof(url) === \"string\");\n\t\t\t\t});\n\t\t\t\treturn replacementUrls;\n\t\t\t});\n\t}\n\n\t/**\n\t * Replace URLs in CSS resources\n\t * @private\n\t * @param {Archive} [archive]\n\t * @param {method} [resolver]\n\t * @return {Promise}\n\t */\n\treplaceCss(archive, resolver){\n\t\tvar replaced = [];\n\t\tarchive = archive || this.settings.archive;\n\t\tresolver = resolver || this.settings.resolver;\n\t\tthis.cssUrls.forEach(function(href) {\n\t\t\tvar replacement = this.createCssFile(href, archive, resolver)\n\t\t\t\t.then(function (replacementUrl) {\n\t\t\t\t\t// switch the url in the replacementUrls\n\t\t\t\t\tvar indexInUrls = this.urls.indexOf(href);\n\t\t\t\t\tif (indexInUrls > -1) {\n\t\t\t\t\t\tthis.replacementUrls[indexInUrls] = replacementUrl;\n\t\t\t\t\t}\n\t\t\t\t}.bind(this))\n\n\n\t\t\treplaced.push(replacement);\n\t\t}.bind(this));\n\t\treturn Promise.all(replaced);\n\t}\n\n\t/**\n\t * Create a new CSS file with the replaced URLs\n\t * @private\n\t * @param {string} href the original css file\n\t * @return {Promise} returns a BlobUrl to the new CSS file or a data url\n\t */\n\tcreateCssFile(href){\n\t\tvar newUrl;\n\n\t\tif (path.isAbsolute(href)) {\n\t\t\treturn new Promise(function(resolve){\n\t\t\t\tresolve();\n\t\t\t});\n\t\t}\n\n\t\tvar absolute = this.settings.resolver(href);\n\n\t\t// Get the text of the css file from the archive\n\t\tvar textResponse;\n\n\t\tif (this.settings.archive) {\n\t\t\ttextResponse = this.settings.archive.getText(absolute);\n\t\t} else {\n\t\t\ttextResponse = this.settings.request(absolute, \"text\");\n\t\t}\n\n\t\t// Get asset links relative to css file\n\t\tvar relUrls = this.urls.map( (assetHref) => {\n\t\t\tvar resolved = this.settings.resolver(assetHref);\n\t\t\tvar relative = new Path(absolute).relative(resolved);\n\n\t\t\treturn relative;\n\t\t});\n\n\t\tif (!textResponse) {\n\t\t\t// file not found, don't replace\n\t\t\treturn new Promise(function(resolve){\n\t\t\t\tresolve();\n\t\t\t});\n\t\t}\n\n\t\treturn textResponse.then( (text) => {\n\t\t\t// Replacements in the css text\n\t\t\ttext = substitute(text, relUrls, this.replacementUrls);\n\n\t\t\t// Get the new url\n\t\t\tif (this.settings.replacements === \"base64\") {\n\t\t\t\tnewUrl = createBase64Url(text, \"text/css\");\n\t\t\t} else {\n\t\t\t\tnewUrl = createBlobUrl(text, \"text/css\");\n\t\t\t}\n\n\t\t\treturn newUrl;\n\t\t}, (err) => {\n\t\t\t// handle response errors\n\t\t\treturn new Promise(function(resolve){\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\n\t}\n\n\t/**\n\t * Resolve all resources URLs relative to an absolute URL\n\t * @param {string} absolute to be resolved to\n\t * @param {resolver} [resolver]\n\t * @return {string[]} array with relative Urls\n\t */\n\trelativeTo(absolute, resolver){\n\t\tresolver = resolver || this.settings.resolver;\n\n\t\t// Get Urls relative to current sections\n\t\treturn this.urls.\n\t\t\tmap(function(href) {\n\t\t\t\tvar resolved = resolver(href);\n\t\t\t\tvar relative = new Path(absolute).relative(resolved);\n\t\t\t\treturn relative;\n\t\t\t}.bind(this));\n\t}\n\n\t/**\n\t * Get a URL for a resource\n\t * @param {string} path\n\t * @return {string} url\n\t */\n\tget(path) {\n\t\tvar indexInUrls = this.urls.indexOf(path);\n\t\tif (indexInUrls === -1) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.replacementUrls.length) {\n\t\t\treturn new Promise(function(resolve, reject) {\n\t\t\t\tresolve(this.replacementUrls[indexInUrls]);\n\t\t\t}.bind(this));\n\t\t} else {\n\t\t\treturn this.createUrl(path);\n\t\t}\n\t}\n\n\t/**\n\t * Substitute urls in content, with replacements,\n\t * relative to a url if provided\n\t * @param {string} content\n\t * @param {string} [url] url to resolve to\n\t * @return {string} content with urls substituted\n\t */\n\tsubstitute(content, url) {\n\t\tvar relUrls;\n\t\tif (url) {\n\t\t\trelUrls = this.relativeTo(url);\n\t\t} else {\n\t\t\trelUrls = this.urls;\n\t\t}\n\t\treturn substitute(content, relUrls, this.replacementUrls);\n\t}\n\n\tdestroy() {\n\t\tthis.settings = undefined;\n\t\tthis.manifest = undefined;\n\t\tthis.resources = undefined;\n\t\tthis.replacementUrls = undefined;\n\t\tthis.html = undefined;\n\t\tthis.assets = undefined;\n\t\tthis.css = undefined;\n\n\t\tthis.urls = undefined;\n\t\tthis.cssUrls = undefined;\n\t}\n}\n\nexport default Resources;\n","import EpubCFI from \"./epubcfi\";\nimport {\n\tqs,\n\tqsa,\n\tquerySelectorByType,\n\tindexOfSorted,\n\tlocationOf\n} from \"./utils/core\";\n\n/**\n * Page List Parser\n * @param {document} [xml]\n */\nclass PageList {\n\tconstructor(xml) {\n\t\tthis.pages = [];\n\t\tthis.locations = [];\n\t\tthis.epubcfi = new EpubCFI();\n\n\t\tthis.firstPage = 0;\n\t\tthis.lastPage = 0;\n\t\tthis.totalPages = 0;\n\n\t\tthis.toc = undefined;\n\t\tthis.ncx = undefined;\n\n\t\tif (xml) {\n\t\t\tthis.pageList = this.parse(xml);\n\t\t}\n\n\t\tif(this.pageList && this.pageList.length) {\n\t\t\tthis.process(this.pageList);\n\t\t}\n\t}\n\n\t/**\n\t * Parse PageList Xml\n\t * @param {document} xml\n\t */\n\tparse(xml) {\n\t\tvar html = qs(xml, \"html\");\n\t\tvar ncx = qs(xml, \"ncx\");\n\n\t\tif(html) {\n\t\t\treturn this.parseNav(xml);\n\t\t} else if(ncx){\n\t\t\treturn this.parseNcx(xml);\n\t\t}\n\n\t}\n\n\t/**\n\t * Parse a Nav PageList\n\t * @private\n\t * @param {node} navHtml\n\t * @return {PageList.item[]} list\n\t */\n\tparseNav(navHtml){\n\t\tvar navElement = querySelectorByType(navHtml, \"nav\", \"page-list\");\n\t\tvar navItems = navElement ? qsa(navElement, \"li\") : [];\n\t\tvar length = navItems.length;\n\t\tvar i;\n\t\tvar list = [];\n\t\tvar item;\n\n\t\tif(!navItems || length === 0) return list;\n\n\t\tfor (i = 0; i < length; ++i) {\n\t\t\titem = this.item(navItems[i]);\n\t\t\tlist.push(item);\n\t\t}\n\n\t\treturn list;\n\t}\n\n\tparseNcx(navXml) {\n\t\tvar list = [];\n\t\tvar i = 0;\n\t\tvar item;\n\t\tvar pageList;\n\t\tvar pageTargets;\n\t\tvar length = 0;\n\n\t\tpageList = qs(navXml, \"pageList\");\n\t\tif (!pageList) return list;\n\n\t\tpageTargets = qsa(pageList, \"pageTarget\");\n\t\tlength = pageTargets.length;\n\n\t\tif (!pageTargets || pageTargets.length === 0) {\n\t\t\treturn list;\n\t\t}\n\n\t\tfor (i = 0; i < length; ++i) {\n\t\t\titem = this.ncxItem(pageTargets[i]);\n\t\t\tlist.push(item);\n\t\t}\n\n\t\treturn list;\n\t}\n\n\tncxItem(item) {\n\t\tvar navLabel = qs(item, \"navLabel\");\n\t\tvar navLabelText = qs(navLabel, \"text\");\n\t\tvar pageText = navLabelText.textContent;\n\t\tvar content = qs(item, \"content\");\n\n\t\tvar href = content.getAttribute(\"src\");\n\t\tvar page = parseInt(pageText, 10);\n\n\t\treturn {\n\t\t\t\"href\": href,\n\t\t\t\"page\": page,\n\t\t};\n\t}\n\n\t/**\n\t * Page List Item\n\t * @private\n\t * @param {node} item\n\t * @return {object} pageListItem\n\t */\n\titem(item){\n\t\tvar content = qs(item, \"a\"),\n\t\t\t\thref = content.getAttribute(\"href\") || \"\",\n\t\t\t\ttext = content.textContent || \"\",\n\t\t\t\tpage = parseInt(text),\n\t\t\t\tisCfi = href.indexOf(\"epubcfi\"),\n\t\t\t\tsplit,\n\t\t\t\tpackageUrl,\n\t\t\t\tcfi;\n\n\t\tif(isCfi != -1) {\n\t\t\tsplit = href.split(\"#\");\n\t\t\tpackageUrl = split[0];\n\t\t\tcfi = split.length > 1 ? split[1] : false;\n\t\t\treturn {\n\t\t\t\t\"cfi\" : cfi,\n\t\t\t\t\"href\" : href,\n\t\t\t\t\"packageUrl\" : packageUrl,\n\t\t\t\t\"page\" : page\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\t\"href\" : href,\n\t\t\t\t\"page\" : page\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Process pageList items\n\t * @private\n\t * @param {array} pageList\n\t */\n\tprocess(pageList){\n\t\tpageList.forEach(function(item){\n\t\t\tthis.pages.push(item.page);\n\t\t\tif (item.cfi) {\n\t\t\t\tthis.locations.push(item.cfi);\n\t\t\t}\n\t\t}, this);\n\t\tthis.firstPage = parseInt(this.pages[0]);\n\t\tthis.lastPage = parseInt(this.pages[this.pages.length-1]);\n\t\tthis.totalPages = this.lastPage - this.firstPage;\n\t}\n\n\t/**\n\t * Get a PageList result from a EpubCFI\n\t * @param {string} cfi EpubCFI String\n\t * @return {number} page\n\t */\n\tpageFromCfi(cfi){\n\t\tvar pg = -1;\n\n\t\t// Check if the pageList has not been set yet\n\t\tif(this.locations.length === 0) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// TODO: check if CFI is valid?\n\n\t\t// check if the cfi is in the location list\n\t\t// var index = this.locations.indexOf(cfi);\n\t\tvar index = indexOfSorted(cfi, this.locations, this.epubcfi.compare);\n\t\tif(index != -1) {\n\t\t\tpg = this.pages[index];\n\t\t} else {\n\t\t\t// Otherwise add it to the list of locations\n\t\t\t// Insert it in the correct position in the locations page\n\t\t\t//index = EPUBJS.core.insert(cfi, this.locations, this.epubcfi.compare);\n\t\t\tindex = locationOf(cfi, this.locations, this.epubcfi.compare);\n\t\t\t// Get the page at the location just before the new one, or return the first\n\t\t\tpg = index-1 >= 0 ? this.pages[index-1] : this.pages[0];\n\t\t\tif(pg !== undefined) {\n\t\t\t\t// Add the new page in so that the locations and page array match up\n\t\t\t\t//this.pages.splice(index, 0, pg);\n\t\t\t} else {\n\t\t\t\tpg = -1;\n\t\t\t}\n\n\t\t}\n\t\treturn pg;\n\t}\n\n\t/**\n\t * Get an EpubCFI from a Page List Item\n\t * @param {string | number} pg\n\t * @return {string} cfi\n\t */\n\tcfiFromPage(pg){\n\t\tvar cfi = -1;\n\t\t// check that pg is an int\n\t\tif(typeof pg != \"number\"){\n\t\t\tpg = parseInt(pg);\n\t\t}\n\n\t\t// check if the cfi is in the page list\n\t\t// Pages could be unsorted.\n\t\tvar index = this.pages.indexOf(pg);\n\t\tif(index != -1) {\n\t\t\tcfi = this.locations[index];\n\t\t}\n\t\t// TODO: handle pages not in the list\n\t\treturn cfi;\n\t}\n\n\t/**\n\t * Get a Page from Book percentage\n\t * @param {number} percent\n\t * @return {number} page\n\t */\n\tpageFromPercentage(percent){\n\t\tvar pg = Math.round(this.totalPages * percent);\n\t\treturn pg;\n\t}\n\n\t/**\n\t * Returns a value between 0 - 1 corresponding to the location of a page\n\t * @param {number} pg the page\n\t * @return {number} percentage\n\t */\n\tpercentageFromPage(pg){\n\t\tvar percentage = (pg - this.firstPage) / this.totalPages;\n\t\treturn Math.round(percentage * 1000) / 1000;\n\t}\n\n\t/**\n\t * Returns a value between 0 - 1 corresponding to the location of a cfi\n\t * @param {string} cfi EpubCFI String\n\t * @return {number} percentage\n\t */\n\tpercentageFromCfi(cfi){\n\t\tvar pg = this.pageFromCfi(cfi);\n\t\tvar percentage = this.percentageFromPage(pg);\n\t\treturn percentage;\n\t}\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy() {\n\t\tthis.pages = undefined;\n\t\tthis.locations = undefined;\n\t\tthis.epubcfi = undefined;\n\n\t\tthis.pageList = undefined;\n\n\t\tthis.toc = undefined;\n\t\tthis.ncx = undefined;\n\t}\n}\n\nexport default PageList;\n","import {defer, isXml, parse} from \"./utils/core\";\nimport request from \"./utils/request\";\nimport mime from \"./utils/mime\";\nimport Path from \"./utils/path\";\nimport JSZip from \"jszip/dist/jszip\";\n\n/**\n * Handles Unzipping a requesting files from an Epub Archive\n * @class\n */\nclass Archive {\n\n\tconstructor() {\n\t\tthis.zip = undefined;\n\t\tthis.urlCache = {};\n\n\t\tthis.checkRequirements();\n\n\t}\n\n\t/**\n\t * Checks to see if JSZip exists in global namspace,\n\t * Requires JSZip if it isn't there\n\t * @private\n\t */\n\tcheckRequirements(){\n\t\ttry {\n\t\t\tthis.zip = new JSZip();\n\t\t} catch (e) {\n\t\t\tthrow new Error(\"JSZip lib not loaded\");\n\t\t}\n\t}\n\n\t/**\n\t * Open an archive\n\t * @param {binary} input\n\t * @param {boolean} [isBase64] tells JSZip if the input data is base64 encoded\n\t * @return {Promise} zipfile\n\t */\n\topen(input, isBase64){\n\t\treturn this.zip.loadAsync(input, {\"base64\": isBase64});\n\t}\n\n\t/**\n\t * Load and Open an archive\n\t * @param {string} zipUrl\n\t * @param {boolean} [isBase64] tells JSZip if the input data is base64 encoded\n\t * @return {Promise} zipfile\n\t */\n\topenUrl(zipUrl, isBase64){\n\t\treturn request(zipUrl, \"binary\")\n\t\t\t.then(function(data){\n\t\t\t\treturn this.zip.loadAsync(data, {\"base64\": isBase64});\n\t\t\t}.bind(this));\n\t}\n\n\t/**\n\t * Request a url from the archive\n\t * @param {string} url a url to request from the archive\n\t * @param {string} [type] specify the type of the returned result\n\t * @return {Promise}\n\t */\n\trequest(url, type){\n\t\tvar deferred = new defer();\n\t\tvar response;\n\t\tvar path = new Path(url);\n\n\t\t// If type isn't set, determine it from the file extension\n\t\tif(!type) {\n\t\t\ttype = path.extension;\n\t\t}\n\n\t\tif(type == \"blob\"){\n\t\t\tresponse = this.getBlob(url);\n\t\t} else {\n\t\t\tresponse = this.getText(url);\n\t\t}\n\n\t\tif (response) {\n\t\t\tresponse.then(function (r) {\n\t\t\t\tlet result = this.handleResponse(r, type);\n\t\t\t\tdeferred.resolve(result);\n\t\t\t}.bind(this));\n\t\t} else {\n\t\t\tdeferred.reject({\n\t\t\t\tmessage : \"File not found in the epub: \" + url,\n\t\t\t\tstack : new Error().stack\n\t\t\t});\n\t\t}\n\t\treturn deferred.promise;\n\t}\n\n\t/**\n\t * Handle the response from request\n\t * @private\n\t * @param {any} response\n\t * @param {string} [type]\n\t * @return {any} the parsed result\n\t */\n\thandleResponse(response, type){\n\t\tvar r;\n\n\t\tif(type == \"json\") {\n\t\t\tr = JSON.parse(response);\n\t\t}\n\t\telse\n\t\tif(isXml(type)) {\n\t\t\tr = parse(response, \"text/xml\");\n\t\t}\n\t\telse\n\t\tif(type == \"xhtml\") {\n\t\t\tr = parse(response, \"application/xhtml+xml\");\n\t\t}\n\t\telse\n\t\tif(type == \"html\" || type == \"htm\") {\n\t\t\tr = parse(response, \"text/html\");\n\t\t } else {\n\t\t\t r = response;\n\t\t }\n\n\t\treturn r;\n\t}\n\n\t/**\n\t * Get a Blob from Archive by Url\n\t * @param {string} url\n\t * @param {string} [mimeType]\n\t * @return {Blob}\n\t */\n\tgetBlob(url, mimeType){\n\t\tvar decodededUrl = window.decodeURIComponent(url.substr(1)); // Remove first slash\n\t\tvar entry = this.zip.file(decodededUrl);\n\n\t\tif(entry) {\n\t\t\tmimeType = mimeType || mime.lookup(entry.name);\n\t\t\treturn entry.async(\"uint8array\").then(function(uint8array) {\n\t\t\t\treturn new Blob([uint8array], {type : mimeType});\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Get Text from Archive by Url\n\t * @param {string} url\n\t * @param {string} [encoding]\n\t * @return {string}\n\t */\n\tgetText(url, encoding){\n\t\tvar decodededUrl = window.decodeURIComponent(url.substr(1)); // Remove first slash\n\t\tvar entry = this.zip.file(decodededUrl);\n\n\t\tif(entry) {\n\t\t\treturn entry.async(\"string\").then(function(text) {\n\t\t\t\treturn text;\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Get a base64 encoded result from Archive by Url\n\t * @param {string} url\n\t * @param {string} [mimeType]\n\t * @return {string} base64 encoded\n\t */\n\tgetBase64(url, mimeType){\n\t\tvar decodededUrl = window.decodeURIComponent(url.substr(1)); // Remove first slash\n\t\tvar entry = this.zip.file(decodededUrl);\n\n\t\tif(entry) {\n\t\t\tmimeType = mimeType || mime.lookup(entry.name);\n\t\t\treturn entry.async(\"base64\").then(function(data) {\n\t\t\t\treturn \"data:\" + mimeType + \";base64,\" + data;\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Create a Url from an unarchived item\n\t * @param {string} url\n\t * @param {object} [options.base64] use base64 encoding or blob url\n\t * @return {Promise} url promise with Url string\n\t */\n\tcreateUrl(url, options){\n\t\tvar deferred = new defer();\n\t\tvar _URL = window.URL || window.webkitURL || window.mozURL;\n\t\tvar tempUrl;\n\t\tvar response;\n\t\tvar useBase64 = options && options.base64;\n\n\t\tif(url in this.urlCache) {\n\t\t\tdeferred.resolve(this.urlCache[url]);\n\t\t\treturn deferred.promise;\n\t\t}\n\n\t\tif (useBase64) {\n\t\t\tresponse = this.getBase64(url);\n\n\t\t\tif (response) {\n\t\t\t\tresponse.then(function(tempUrl) {\n\n\t\t\t\t\tthis.urlCache[url] = tempUrl;\n\t\t\t\t\tdeferred.resolve(tempUrl);\n\n\t\t\t\t}.bind(this));\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tresponse = this.getBlob(url);\n\n\t\t\tif (response) {\n\t\t\t\tresponse.then(function(blob) {\n\n\t\t\t\t\ttempUrl = _URL.createObjectURL(blob);\n\t\t\t\t\tthis.urlCache[url] = tempUrl;\n\t\t\t\t\tdeferred.resolve(tempUrl);\n\n\t\t\t\t}.bind(this));\n\n\t\t\t}\n\t\t}\n\n\n\t\tif (!response) {\n\t\t\tdeferred.reject({\n\t\t\t\tmessage : \"File not found in the epub: \" + url,\n\t\t\t\tstack : new Error().stack\n\t\t\t});\n\t\t}\n\n\t\treturn deferred.promise;\n\t}\n\n\t/**\n\t * Revoke Temp Url for a archive item\n\t * @param {string} url url of the item in the archive\n\t */\n\trevokeUrl(url){\n\t\tvar _URL = window.URL || window.webkitURL || window.mozURL;\n\t\tvar fromCache = this.urlCache[url];\n\t\tif(fromCache) _URL.revokeObjectURL(fromCache);\n\t}\n\n\tdestroy() {\n\t\tvar _URL = window.URL || window.webkitURL || window.mozURL;\n\t\tfor (let fromCache in this.urlCache) {\n\t\t\t_URL.revokeObjectURL(fromCache);\n\t\t}\n\t\tthis.zip = undefined;\n\t\tthis.urlCache = {};\n\t}\n}\n\nexport default Archive;\n","import {defer, isXml, parse} from \"./utils/core\";\nimport httpRequest from \"./utils/request\";\nimport mime from \"./utils/mime\";\nimport Path from \"./utils/path\";\nimport EventEmitter from \"event-emitter\";\nimport localforage from \"localforage\";\n\n/**\n * Handles saving and requesting files from local storage\n * @class\n * @param {string} name This should be the name of the application for modals\n * @param {function} [requester]\n * @param {function} [resolver]\n */\nclass Store {\n\n\tconstructor(name, requester, resolver) {\n\t\tthis.urlCache = {};\n\n\t\tthis.storage = undefined;\n\n\t\tthis.name = name;\n\t\tthis.requester = requester || httpRequest;\n\t\tthis.resolver = resolver;\n\n\t\tthis.online = true;\n\n\t\tthis.checkRequirements();\n\n\t\tthis.addListeners();\n\t}\n\n\t/**\n\t * Checks to see if localForage exists in global namspace,\n\t * Requires localForage if it isn't there\n\t * @private\n\t */\n\tcheckRequirements(){\n\t\ttry {\n\t\t\tlet store;\n\t\t\tif (typeof localforage === \"undefined\") {\n\t\t\t\tstore = localforage;\n\t\t\t}\n\t\t\tthis.storage = store.createInstance({\n\t\t\t\t\tname: this.name\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tthrow new Error(\"localForage lib not loaded\");\n\t\t}\n\t}\n\n\t/**\n\t * Add online and offline event listeners\n\t * @private\n\t */\n\taddListeners() {\n\t\tthis._status = this.status.bind(this);\n\t\twindow.addEventListener('online', this._status);\n\t window.addEventListener('offline', this._status);\n\t}\n\n\t/**\n\t * Remove online and offline event listeners\n\t * @private\n\t */\n\tremoveListeners() {\n\t\twindow.removeEventListener('online', this._status);\n\t window.removeEventListener('offline', this._status);\n\t\tthis._status = undefined;\n\t}\n\n\t/**\n\t * Update the online / offline status\n\t * @private\n\t */\n\tstatus(event) {\n\t\tlet online = navigator.onLine;\n\t\tthis.online = online;\n\t\tif (online) {\n\t\t\tthis.emit(\"online\", this);\n\t\t} else {\n\t\t\tthis.emit(\"offline\", this);\n\t\t}\n\t}\n\n\t/**\n\t * Add all of a book resources to the store\n\t * @param {Resources} resources book resources\n\t * @param {boolean} [force] force resaving resources\n\t * @return {Promise} store objects\n\t */\n\tadd(resources, force) {\n\t\tlet mapped = resources.resources.map((item) => {\n\t\t\tlet { href } = item;\n\t\t\tlet url = this.resolver(href);\n\t\t\tlet encodedUrl = window.encodeURIComponent(url);\n\n\t\t\treturn this.storage.getItem(encodedUrl).then((item) => {\n\t\t\t\tif (!item || force) {\n\t\t\t\t\treturn this.requester(url, \"binary\")\n\t\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\t\treturn this.storage.setItem(encodedUrl, data);\n\t\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn item;\n\t\t\t\t}\n\t\t\t});\n\n\t\t});\n\t\treturn Promise.all(mapped);\n\t}\n\n\t/**\n\t * Put binary data from a url to storage\n\t * @param {string} url a url to request from storage\n\t * @param {boolean} [withCredentials]\n\t * @param {object} [headers]\n\t * @return {Promise}\n\t */\n\tput(url, withCredentials, headers) {\n\t\tlet encodedUrl = window.encodeURIComponent(url);\n\n\t\treturn this.storage.getItem(encodedUrl).then((result) => {\n\t\t\tif (!result) {\n\t\t\t\treturn this.requester(url, \"binary\", withCredentials, headers).then((data) => {\n\t\t\t\t\treturn this.storage.setItem(encodedUrl, data);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t}\n\n\t/**\n\t * Request a url\n\t * @param {string} url a url to request from storage\n\t * @param {string} [type] specify the type of the returned result\n\t * @param {boolean} [withCredentials]\n\t * @param {object} [headers]\n\t * @return {Promise}\n\t */\n\trequest(url, type, withCredentials, headers){\n\t\tif (this.online) {\n\t\t\t// From network\n\t\t\treturn this.requester(url, type, withCredentials, headers).then((data) => {\n\t\t\t\t// save to store if not present\n\t\t\t\tthis.put(url);\n\t\t\t\treturn data;\n\t\t\t})\n\t\t} else {\n\t\t\t// From store\n\t\t\treturn this.retrieve(url, type);\n\t\t}\n\n\t}\n\n\t/**\n\t * Request a url from storage\n\t * @param {string} url a url to request from storage\n\t * @param {string} [type] specify the type of the returned result\n\t * @return {Promise}\n\t */\n\tretrieve(url, type) {\n\t\tvar deferred = new defer();\n\t\tvar response;\n\t\tvar path = new Path(url);\n\n\t\t// If type isn't set, determine it from the file extension\n\t\tif(!type) {\n\t\t\ttype = path.extension;\n\t\t}\n\n\t\tif(type == \"blob\"){\n\t\t\tresponse = this.getBlob(url);\n\t\t} else {\n\t\t\tresponse = this.getText(url);\n\t\t}\n\n\n\t\treturn response.then((r) => {\n\t\t\tvar deferred = new defer();\n\t\t\tvar result;\n\t\t\tif (r) {\n\t\t\t\tresult = this.handleResponse(r, type);\n\t\t\t\tdeferred.resolve(result);\n\t\t\t} else {\n\t\t\t\tdeferred.reject({\n\t\t\t\t\tmessage : \"File not found in storage: \" + url,\n\t\t\t\t\tstack : new Error().stack\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn deferred.promise;\n\t\t});\n\t}\n\n\t/**\n\t * Handle the response from request\n\t * @private\n\t * @param {any} response\n\t * @param {string} [type]\n\t * @return {any} the parsed result\n\t */\n\thandleResponse(response, type){\n\t\tvar r;\n\n\t\tif(type == \"json\") {\n\t\t\tr = JSON.parse(response);\n\t\t}\n\t\telse\n\t\tif(isXml(type)) {\n\t\t\tr = parse(response, \"text/xml\");\n\t\t}\n\t\telse\n\t\tif(type == \"xhtml\") {\n\t\t\tr = parse(response, \"application/xhtml+xml\");\n\t\t}\n\t\telse\n\t\tif(type == \"html\" || type == \"htm\") {\n\t\t\tr = parse(response, \"text/html\");\n\t\t } else {\n\t\t\t r = response;\n\t\t }\n\n\t\treturn r;\n\t}\n\n\t/**\n\t * Get a Blob from Storage by Url\n\t * @param {string} url\n\t * @param {string} [mimeType]\n\t * @return {Blob}\n\t */\n\tgetBlob(url, mimeType){\n\t\tlet encodedUrl = window.encodeURIComponent(url);\n\n\t\treturn this.storage.getItem(encodedUrl).then(function(uint8array) {\n\t\t\tif(!uint8array) return;\n\n\t\t\tmimeType = mimeType || mime.lookup(url);\n\n\t\t\treturn new Blob([uint8array], {type : mimeType});\n\t\t});\n\n\t}\n\n\t/**\n\t * Get Text from Storage by Url\n\t * @param {string} url\n\t * @param {string} [mimeType]\n\t * @return {string}\n\t */\n\tgetText(url, mimeType){\n\t\tlet encodedUrl = window.encodeURIComponent(url);\n\n\t\tmimeType = mimeType || mime.lookup(url);\n\n\t\treturn this.storage.getItem(encodedUrl).then(function(uint8array) {\n\t\t\tvar deferred = new defer();\n\t\t\tvar reader = new FileReader();\n\t\t\tvar blob;\n\n\t\t\tif(!uint8array) return;\n\n\t\t\tblob = new Blob([uint8array], {type : mimeType});\n\n\t\t\treader.addEventListener(\"loadend\", () => {\n\t\t\t\tdeferred.resolve(reader.result);\n\t\t\t});\n\n\t\t\treader.readAsText(blob, mimeType);\n\n\t\t\treturn deferred.promise;\n\t\t});\n\t}\n\n\t/**\n\t * Get a base64 encoded result from Storage by Url\n\t * @param {string} url\n\t * @param {string} [mimeType]\n\t * @return {string} base64 encoded\n\t */\n\tgetBase64(url, mimeType){\n\t\tlet encodedUrl = window.encodeURIComponent(url);\n\n\t\tmimeType = mimeType || mime.lookup(url);\n\n\t\treturn this.storage.getItem(encodedUrl).then((uint8array) => {\n\t\t\tvar deferred = new defer();\n\t\t\tvar reader = new FileReader();\n\t\t\tvar blob;\n\n\t\t\tif(!uint8array) return;\n\n\t\t\tblob = new Blob([uint8array], {type : mimeType});\n\n\t\t\treader.addEventListener(\"loadend\", () => {\n\t\t\t\tdeferred.resolve(reader.result);\n\t\t\t});\n\t\t\treader.readAsDataURL(blob, mimeType);\n\n\t\t\treturn deferred.promise;\n\t\t});\n\t}\n\n\t/**\n\t * Create a Url from a stored item\n\t * @param {string} url\n\t * @param {object} [options.base64] use base64 encoding or blob url\n\t * @return {Promise} url promise with Url string\n\t */\n\tcreateUrl(url, options){\n\t\tvar deferred = new defer();\n\t\tvar _URL = window.URL || window.webkitURL || window.mozURL;\n\t\tvar tempUrl;\n\t\tvar response;\n\t\tvar useBase64 = options && options.base64;\n\n\t\tif(url in this.urlCache) {\n\t\t\tdeferred.resolve(this.urlCache[url]);\n\t\t\treturn deferred.promise;\n\t\t}\n\n\t\tif (useBase64) {\n\t\t\tresponse = this.getBase64(url);\n\n\t\t\tif (response) {\n\t\t\t\tresponse.then(function(tempUrl) {\n\n\t\t\t\t\tthis.urlCache[url] = tempUrl;\n\t\t\t\t\tdeferred.resolve(tempUrl);\n\n\t\t\t\t}.bind(this));\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tresponse = this.getBlob(url);\n\n\t\t\tif (response) {\n\t\t\t\tresponse.then(function(blob) {\n\n\t\t\t\t\ttempUrl = _URL.createObjectURL(blob);\n\t\t\t\t\tthis.urlCache[url] = tempUrl;\n\t\t\t\t\tdeferred.resolve(tempUrl);\n\n\t\t\t\t}.bind(this));\n\n\t\t\t}\n\t\t}\n\n\n\t\tif (!response) {\n\t\t\tdeferred.reject({\n\t\t\t\tmessage : \"File not found in storage: \" + url,\n\t\t\t\tstack : new Error().stack\n\t\t\t});\n\t\t}\n\n\t\treturn deferred.promise;\n\t}\n\n\t/**\n\t * Revoke Temp Url for a archive item\n\t * @param {string} url url of the item in the store\n\t */\n\trevokeUrl(url){\n\t\tvar _URL = window.URL || window.webkitURL || window.mozURL;\n\t\tvar fromCache = this.urlCache[url];\n\t\tif(fromCache) _URL.revokeObjectURL(fromCache);\n\t}\n\n\tdestroy() {\n\t\tvar _URL = window.URL || window.webkitURL || window.mozURL;\n\t\tfor (let fromCache in this.urlCache) {\n\t\t\t_URL.revokeObjectURL(fromCache);\n\t\t}\n\t\tthis.urlCache = {};\n\t\tthis.removeListeners();\n\t}\n}\n\nEventEmitter(Store.prototype);\n\nexport default Store;\n","import {qs, qsa } from \"./utils/core\";\n\n/**\n * Open DisplayOptions Format Parser\n * @class\n * @param {document} displayOptionsDocument XML\n */\nclass DisplayOptions {\n\tconstructor(displayOptionsDocument) {\n\t\tthis.interactive = \"\";\n\t\tthis.fixedLayout = \"\";\n\t\tthis.openToSpread = \"\";\n\t\tthis.orientationLock = \"\";\n\n\t\tif (displayOptionsDocument) {\n\t\t\tthis.parse(displayOptionsDocument);\n\t\t}\n\t}\n\n\t/**\n\t * Parse XML\n\t * @param {document} displayOptionsDocument XML\n\t * @return {DisplayOptions} self\n\t */\n\tparse(displayOptionsDocument) {\n\t\tif(!displayOptionsDocument) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst displayOptionsNode = qs(displayOptionsDocument, \"display_options\");\n\t\tif(!displayOptionsNode) {\n\t\t\treturn this;\n\t\t} \n\n\t\tconst options = qsa(displayOptionsNode, \"option\");\n\t\toptions.forEach((el) => {\n\t\t\tlet value = \"\";\n\n\t\t\tif (el.childNodes.length) {\n\t\t\t\tvalue = el.childNodes[0].nodeValue;\n\t\t\t}\n\n\t\t\tswitch (el.attributes.name.value) {\n\t\t\t case \"interactive\":\n\t\t\t this.interactive = value;\n\t\t\t break;\n\t\t\t case \"fixed-layout\":\n\t\t\t this.fixedLayout = value;\n\t\t\t break;\n\t\t\t case \"open-to-spread\":\n\t\t\t this.openToSpread = value;\n\t\t\t break;\n\t\t\t case \"orientation-lock\":\n\t\t\t this.orientationLock = value;\n\t\t\t break;\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tdestroy() {\n\t\tthis.interactive = undefined;\n\t\tthis.fixedLayout = undefined;\n\t\tthis.openToSpread = undefined;\n\t\tthis.orientationLock = undefined;\n\t}\n}\n\nexport default DisplayOptions;\n","import EventEmitter from \"event-emitter\";\nimport {extend, defer} from \"./utils/core\";\nimport Url from \"./utils/url\";\nimport Path from \"./utils/path\";\nimport Spine from \"./spine\";\nimport Locations from \"./locations\";\nimport Container from \"./container\";\nimport Packaging from \"./packaging\";\nimport Navigation from \"./navigation\";\nimport Resources from \"./resources\";\nimport PageList from \"./pagelist\";\nimport Rendition from \"./rendition\";\nimport Archive from \"./archive\";\nimport request from \"./utils/request\";\nimport EpubCFI from \"./epubcfi\";\nimport Store from \"./store\";\nimport DisplayOptions from \"./displayoptions\";\nimport { EPUBJS_VERSION, EVENTS } from \"./utils/constants\";\n\nconst CONTAINER_PATH = \"META-INF/container.xml\";\nconst IBOOKS_DISPLAY_OPTIONS_PATH = \"META-INF/com.apple.ibooks.display-options.xml\";\n\nconst INPUT_TYPE = {\n\tBINARY: \"binary\",\n\tBASE64: \"base64\",\n\tEPUB: \"epub\",\n\tOPF: \"opf\",\n\tMANIFEST: \"json\",\n\tDIRECTORY: \"directory\"\n};\n\n/**\n * An Epub representation with methods for the loading, parsing and manipulation\n * of its contents.\n * @class\n * @param {string} [url]\n * @param {object} [options]\n * @param {method} [options.requestMethod] a request function to use instead of the default\n * @param {boolean} [options.requestCredentials=undefined] send the xhr request withCredentials\n * @param {object} [options.requestHeaders=undefined] send the xhr request headers\n * @param {string} [options.encoding=binary] optional to pass 'binary' or base64' for archived Epubs\n * @param {string} [options.replacements=none] use base64, blobUrl, or none for replacing assets in archived Epubs\n * @param {method} [options.canonical] optional function to determine canonical urls for a path\n * @param {string} [options.openAs] optional string to determine the input type\n * @param {string} [options.store=false] cache the contents in local storage, value should be the name of the reader\n * @returns {Book}\n * @example new Book(\"/path/to/book.epub\", {})\n * @example new Book({ replacements: \"blobUrl\" })\n */\nclass Book {\n\tconstructor(url, options) {\n\t\t// Allow passing just options to the Book\n\t\tif (typeof(options) === \"undefined\" &&\n\t\t\t typeof(url) !== \"string\" &&\n\t\t url instanceof Blob === false &&\n\t\t url instanceof ArrayBuffer === false) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\tthis.settings = extend(this.settings || {}, {\n\t\t\trequestMethod: undefined,\n\t\t\trequestCredentials: undefined,\n\t\t\trequestHeaders: undefined,\n\t\t\tencoding: undefined,\n\t\t\treplacements: undefined,\n\t\t\tcanonical: undefined,\n\t\t\topenAs: undefined,\n\t\t\tstore: undefined\n\t\t});\n\n\t\textend(this.settings, options);\n\n\n\t\t// Promises\n\t\tthis.opening = new defer();\n\t\t/**\n\t\t * @member {promise} opened returns after the book is loaded\n\t\t * @memberof Book\n\t\t */\n\t\tthis.opened = this.opening.promise;\n\t\tthis.isOpen = false;\n\n\t\tthis.loading = {\n\t\t\tmanifest: new defer(),\n\t\t\tspine: new defer(),\n\t\t\tmetadata: new defer(),\n\t\t\tcover: new defer(),\n\t\t\tnavigation: new defer(),\n\t\t\tpageList: new defer(),\n\t\t\tresources: new defer(),\n\t\t\tdisplayOptions: new defer()\n\t\t};\n\n\t\tthis.loaded = {\n\t\t\tmanifest: this.loading.manifest.promise,\n\t\t\tspine: this.loading.spine.promise,\n\t\t\tmetadata: this.loading.metadata.promise,\n\t\t\tcover: this.loading.cover.promise,\n\t\t\tnavigation: this.loading.navigation.promise,\n\t\t\tpageList: this.loading.pageList.promise,\n\t\t\tresources: this.loading.resources.promise,\n\t\t\tdisplayOptions: this.loading.displayOptions.promise\n\t\t};\n\n\t\t/**\n\t\t * @member {promise} ready returns after the book is loaded and parsed\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.ready = Promise.all([\n\t\t\tthis.loaded.manifest,\n\t\t\tthis.loaded.spine,\n\t\t\tthis.loaded.metadata,\n\t\t\tthis.loaded.cover,\n\t\t\tthis.loaded.navigation,\n\t\t\tthis.loaded.resources,\n\t\t\tthis.loaded.displayOptions\n\t\t]);\n\n\n\t\t// Queue for methods used before opening\n\t\tthis.isRendered = false;\n\t\t// this._q = queue(this);\n\n\t\t/**\n\t\t * @member {method} request\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.request = this.settings.requestMethod || request;\n\n\t\t/**\n\t\t * @member {Spine} spine\n\t\t * @memberof Book\n\t\t */\n\t\tthis.spine = new Spine();\n\n\t\t/**\n\t\t * @member {Locations} locations\n\t\t * @memberof Book\n\t\t */\n\t\tthis.locations = new Locations(this.spine, this.load.bind(this));\n\n\t\t/**\n\t\t * @member {Navigation} navigation\n\t\t * @memberof Book\n\t\t */\n\t\tthis.navigation = undefined;\n\n\t\t/**\n\t\t * @member {PageList} pagelist\n\t\t * @memberof Book\n\t\t */\n\t\tthis.pageList = undefined;\n\n\t\t/**\n\t\t * @member {Url} url\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.url = undefined;\n\n\t\t/**\n\t\t * @member {Path} path\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.path = undefined;\n\n\t\t/**\n\t\t * @member {boolean} archived\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.archived = false;\n\n\t\t/**\n\t\t * @member {Archive} archive\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.archive = undefined;\n\n\t\t/**\n\t\t * @member {Store} storage\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.storage = undefined;\n\n\t\t/**\n\t\t * @member {Resources} resources\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.resources = undefined;\n\n\t\t/**\n\t\t * @member {Rendition} rendition\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.rendition = undefined;\n\n\t\t/**\n\t\t * @member {Container} container\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.container = undefined;\n\n\t\t/**\n\t\t * @member {Packaging} packaging\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.packaging = undefined;\n\n\t\t/**\n\t\t * @member {DisplayOptions} displayOptions\n\t\t * @memberof DisplayOptions\n\t\t * @private\n\t\t */\n\t\tthis.displayOptions = undefined;\n\n\t\t// this.toc = undefined;\n\t\tif (this.settings.store) {\n\t\t\tthis.store(this.settings.store);\n\t\t}\n\n\t\tif(url) {\n\t\t\tthis.open(url, this.settings.openAs).catch((error) => {\n\t\t\t\tvar err = new Error(\"Cannot load book at \"+ url );\n\t\t\t\tthis.emit(EVENTS.BOOK.OPEN_FAILED, err);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Open a epub or url\n\t * @param {string | ArrayBuffer} input Url, Path or ArrayBuffer\n\t * @param {string} [what=\"binary\", \"base64\", \"epub\", \"opf\", \"json\", \"directory\"] force opening as a certain type\n\t * @returns {Promise} of when the book has been loaded\n\t * @example book.open(\"/path/to/book.epub\")\n\t */\n\topen(input, what) {\n\t\tvar opening;\n\t\tvar type = what || this.determineType(input);\n\n\t\tif (type === INPUT_TYPE.BINARY) {\n\t\t\tthis.archived = true;\n\t\t\tthis.url = new Url(\"/\", \"\");\n\t\t\topening = this.openEpub(input);\n\t\t} else if (type === INPUT_TYPE.BASE64) {\n\t\t\tthis.archived = true;\n\t\t\tthis.url = new Url(\"/\", \"\");\n\t\t\topening = this.openEpub(input, type);\n\t\t} else if (type === INPUT_TYPE.EPUB) {\n\t\t\tthis.archived = true;\n\t\t\tthis.url = new Url(\"/\", \"\");\n\t\t\topening = this.request(input, \"binary\", this.settings.requestCredentials, this.settings.requestHeaders)\n\t\t\t\t.then(this.openEpub.bind(this));\n\t\t} else if(type == INPUT_TYPE.OPF) {\n\t\t\tthis.url = new Url(input);\n\t\t\topening = this.openPackaging(this.url.Path.toString());\n\t\t} else if(type == INPUT_TYPE.MANIFEST) {\n\t\t\tthis.url = new Url(input);\n\t\t\topening = this.openManifest(this.url.Path.toString());\n\t\t} else {\n\t\t\tthis.url = new Url(input);\n\t\t\topening = this.openContainer(CONTAINER_PATH)\n\t\t\t\t.then(this.openPackaging.bind(this));\n\t\t}\n\n\t\treturn opening;\n\t}\n\n\t/**\n\t * Open an archived epub\n\t * @private\n\t * @param {binary} data\n\t * @param {string} [encoding]\n\t * @return {Promise}\n\t */\n\topenEpub(data, encoding) {\n\t\treturn this.unarchive(data, encoding || this.settings.encoding)\n\t\t\t.then(() => {\n\t\t\t\treturn this.openContainer(CONTAINER_PATH);\n\t\t\t})\n\t\t\t.then((packagePath) => {\n\t\t\t\treturn this.openPackaging(packagePath);\n\t\t\t});\n\t}\n\n\t/**\n\t * Open the epub container\n\t * @private\n\t * @param {string} url\n\t * @return {string} packagePath\n\t */\n\topenContainer(url) {\n\t\treturn this.load(url)\n\t\t\t.then((xml) => {\n\t\t\t\tthis.container = new Container(xml);\n\t\t\t\treturn this.resolve(this.container.packagePath);\n\t\t\t});\n\t}\n\n\t/**\n\t * Open the Open Packaging Format Xml\n\t * @private\n\t * @param {string} url\n\t * @return {Promise}\n\t */\n\topenPackaging(url) {\n\t\tthis.path = new Path(url);\n\t\treturn this.load(url)\n\t\t\t.then((xml) => {\n\t\t\t\tthis.packaging = new Packaging(xml);\n\t\t\t\treturn this.unpack(this.packaging);\n\t\t\t});\n\t}\n\n\t/**\n\t * Open the manifest JSON\n\t * @private\n\t * @param {string} url\n\t * @return {Promise}\n\t */\n\topenManifest(url) {\n\t\tthis.path = new Path(url);\n\t\treturn this.load(url)\n\t\t\t.then((json) => {\n\t\t\t\tthis.packaging = new Packaging();\n\t\t\t\tthis.packaging.load(json);\n\t\t\t\treturn this.unpack(this.packaging);\n\t\t\t});\n\t}\n\n\t/**\n\t * Load a resource from the Book\n\t * @param {string} path path to the resource to load\n\t * @return {Promise} returns a promise with the requested resource\n\t */\n\tload(path) {\n\t\tvar resolved = this.resolve(path);\n\t\tif(this.archived) {\n\t\t\treturn this.archive.request(resolved);\n\t\t} else {\n\t\t\treturn this.request(resolved, null, this.settings.requestCredentials, this.settings.requestHeaders);\n\t\t}\n\t}\n\n\t/**\n\t * Resolve a path to it's absolute position in the Book\n\t * @param {string} path\n\t * @param {boolean} [absolute] force resolving the full URL\n\t * @return {string} the resolved path string\n\t */\n\tresolve(path, absolute) {\n\t\tif (!path) {\n\t\t\treturn;\n\t\t}\n\t\tvar resolved = path;\n\t\tvar isAbsolute = (path.indexOf(\"://\") > -1);\n\n\t\tif (isAbsolute) {\n\t\t\treturn path;\n\t\t}\n\n\t\tif (this.path) {\n\t\t\tresolved = this.path.resolve(path);\n\t\t}\n\n\t\tif(absolute != false && this.url) {\n\t\t\tresolved = this.url.resolve(resolved);\n\t\t}\n\n\t\treturn resolved;\n\t}\n\n\t/**\n\t * Get a canonical link to a path\n\t * @param {string} path\n\t * @return {string} the canonical path string\n\t */\n\tcanonical(path) {\n\t\tvar url = path;\n\n\t\tif (!path) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tif (this.settings.canonical) {\n\t\t\turl = this.settings.canonical(path);\n\t\t} else {\n\t\t\turl = this.resolve(path, true);\n\t\t}\n\n\t\treturn url;\n\t}\n\n\t/**\n\t * Determine the type of they input passed to open\n\t * @private\n\t * @param {string} input\n\t * @return {string} binary | directory | epub | opf\n\t */\n\tdetermineType(input) {\n\t\tvar url;\n\t\tvar path;\n\t\tvar extension;\n\n\t\tif (this.settings.encoding === \"base64\") {\n\t\t\treturn INPUT_TYPE.BASE64;\n\t\t}\n\n\t\tif(typeof(input) != \"string\") {\n\t\t\treturn INPUT_TYPE.BINARY;\n\t\t}\n\n\t\turl = new Url(input);\n\t\tpath = url.path();\n\t\textension = path.extension;\n\n\t\t// If there's a search string, remove it before determining type\n\t\tif (extension) {\n\t\t\textension = extension.replace(/\\?.*$/, \"\");\n\t\t}\n\n\t\tif (!extension) {\n\t\t\treturn INPUT_TYPE.DIRECTORY;\n\t\t}\n\n\t\tif(extension === \"epub\"){\n\t\t\treturn INPUT_TYPE.EPUB;\n\t\t}\n\n\t\tif(extension === \"opf\"){\n\t\t\treturn INPUT_TYPE.OPF;\n\t\t}\n\n\t\tif(extension === \"json\"){\n\t\t\treturn INPUT_TYPE.MANIFEST;\n\t\t}\n\t}\n\n\n\t/**\n\t * unpack the contents of the Books packaging\n\t * @private\n\t * @param {Packaging} packaging object\n\t */\n\tunpack(packaging) {\n\t\tthis.package = packaging; //TODO: deprecated this\n\n\t\tif (this.packaging.metadata.layout === \"\") {\n\t\t\t// rendition:layout not set - check display options if book is pre-paginated\n\t\t\tthis.load(this.url.resolve(IBOOKS_DISPLAY_OPTIONS_PATH)).then((xml) => {\n\t\t\t\tthis.displayOptions = new DisplayOptions(xml);\n\t\t\t\tthis.loading.displayOptions.resolve(this.displayOptions);\n\t\t\t}).catch((err) => {\n\t\t\t\tthis.displayOptions = new DisplayOptions();\n\t\t\t\tthis.loading.displayOptions.resolve(this.displayOptions);\n\t\t\t});\n\t\t} else {\n\t\t\tthis.displayOptions = new DisplayOptions();\n\t\t\tthis.loading.displayOptions.resolve(this.displayOptions);\n\t\t}\n\n\t\tthis.spine.unpack(this.packaging, this.resolve.bind(this), this.canonical.bind(this));\n\n\t\tthis.resources = new Resources(this.packaging.manifest, {\n\t\t\tarchive: this.archive,\n\t\t\tresolver: this.resolve.bind(this),\n\t\t\trequest: this.request.bind(this),\n\t\t\treplacements: this.settings.replacements || (this.archived ? \"blobUrl\" : \"base64\")\n\t\t});\n\n\t\tthis.loadNavigation(this.packaging).then(() => {\n\t\t\t// this.toc = this.navigation.toc;\n\t\t\tthis.loading.navigation.resolve(this.navigation);\n\t\t});\n\n\t\tif (this.packaging.coverPath) {\n\t\t\tthis.cover = this.resolve(this.packaging.coverPath);\n\t\t}\n\t\t// Resolve promises\n\t\tthis.loading.manifest.resolve(this.packaging.manifest);\n\t\tthis.loading.metadata.resolve(this.packaging.metadata);\n\t\tthis.loading.spine.resolve(this.spine);\n\t\tthis.loading.cover.resolve(this.cover);\n\t\tthis.loading.resources.resolve(this.resources);\n\t\tthis.loading.pageList.resolve(this.pageList);\n\n\t\tthis.isOpen = true;\n\n\t\tif(this.archived || this.settings.replacements && this.settings.replacements != \"none\") {\n\t\t\tthis.replacements().then(() => {\n\t\t\t\tthis.loaded.displayOptions.then(() => {\n\t\t\t\t\tthis.opening.resolve(this);\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tconsole.error(err);\n\t\t\t});\n\t\t} else {\n\t\t\t// Resolve book opened promise\n\t\t\tthis.loaded.displayOptions.then(() => {\n\t\t\t\tthis.opening.resolve(this);\n\t\t\t});\n\t\t}\n\n\t}\n\n\t/**\n\t * Load Navigation and PageList from package\n\t * @private\n\t * @param {Packaging} packaging\n\t */\n\tloadNavigation(packaging) {\n\t\tlet navPath = packaging.navPath || packaging.ncxPath;\n\t\tlet toc = packaging.toc;\n\n\t\t// From json manifest\n\t\tif (toc) {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tthis.navigation = new Navigation(toc);\n\n\t\t\t\tif (packaging.pageList) {\n\t\t\t\t\tthis.pageList = new PageList(packaging.pageList); // TODO: handle page lists from Manifest\n\t\t\t\t}\n\n\t\t\t\tresolve(this.navigation);\n\t\t\t});\n\t\t}\n\n\t\tif (!navPath) {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tthis.navigation = new Navigation();\n\t\t\t\tthis.pageList = new PageList();\n\n\t\t\t\tresolve(this.navigation);\n\t\t\t});\n\t\t}\n\n\t\treturn this.load(navPath, \"xml\")\n\t\t\t.then((xml) => {\n\t\t\t\tthis.navigation = new Navigation(xml);\n\t\t\t\tthis.pageList = new PageList(xml);\n\t\t\t\treturn this.navigation;\n\t\t\t});\n\t}\n\n\t/**\n\t * Gets a Section of the Book from the Spine\n\t * Alias for `book.spine.get`\n\t * @param {string} target\n\t * @return {Section}\n\t */\n\tsection(target) {\n\t\treturn this.spine.get(target);\n\t}\n\n\t/**\n\t * Sugar to render a book to an element\n\t * @param {element | string} element element or string to add a rendition to\n\t * @param {object} [options]\n\t * @return {Rendition}\n\t */\n\trenderTo(element, options) {\n\t\tthis.rendition = new Rendition(this, options);\n\t\tthis.rendition.attachTo(element);\n\n\t\treturn this.rendition;\n\t}\n\n\t/**\n\t * Set if request should use withCredentials\n\t * @param {boolean} credentials\n\t */\n\tsetRequestCredentials(credentials) {\n\t\tthis.settings.requestCredentials = credentials;\n\t}\n\n\t/**\n\t * Set headers request should use\n\t * @param {object} headers\n\t */\n\tsetRequestHeaders(headers) {\n\t\tthis.settings.requestHeaders = headers;\n\t}\n\n\t/**\n\t * Unarchive a zipped epub\n\t * @private\n\t * @param {binary} input epub data\n\t * @param {string} [encoding]\n\t * @return {Archive}\n\t */\n\tunarchive(input, encoding) {\n\t\tthis.archive = new Archive();\n\t\treturn this.archive.open(input, encoding);\n\t}\n\n\t/**\n\t * Store the epubs contents\n\t * @private\n\t * @param {binary} input epub data\n\t * @param {string} [encoding]\n\t * @return {Store}\n\t */\n\tstore(name) {\n\t\t// Use \"blobUrl\" or \"base64\" for replacements\n\t\tlet replacementsSetting = this.settings.replacements && this.settings.replacements !== \"none\";\n\t\t// Save original url\n\t\tlet originalUrl = this.url;\n\t\t// Save original request method\n\t\tlet requester = this.settings.requestMethod || request.bind(this);\n\t\t// Create new Store\n\t\tthis.storage = new Store(name, requester, this.resolve.bind(this));\n\t\t// Replace request method to go through store\n\t\tthis.request = this.storage.request.bind(this.storage);\n\n\t\tthis.opened.then(() => {\n\t\t\tif (this.archived) {\n\t\t\t\tthis.storage.requester = this.archive.request.bind(this.archive);\n\t\t\t}\n\t\t\t// Substitute hook\n\t\t\tlet substituteResources = (output, section) => {\n\t\t\t\tsection.output = this.resources.substitute(output, section.url);\n\t\t\t};\n\n\t\t\t// Set to use replacements\n\t\t\tthis.resources.settings.replacements = replacementsSetting || \"blobUrl\";\n\t\t\t// Create replacement urls\n\t\t\tthis.resources.replacements().\n\t\t\t\tthen(() => {\n\t\t\t\t\treturn this.resources.replaceCss();\n\t\t\t\t});\n\n\t\t\tthis.storage.on(\"offline\", () => {\n\t\t\t\t// Remove url to use relative resolving for hrefs\n\t\t\t\tthis.url = new Url(\"/\", \"\");\n\t\t\t\t// Add hook to replace resources in contents\n\t\t\t\tthis.spine.hooks.serialize.register(substituteResources);\n\t\t\t});\n\n\t\t\tthis.storage.on(\"online\", () => {\n\t\t\t\t// Restore original url\n\t\t\t\tthis.url = originalUrl;\n\t\t\t\t// Remove hook\n\t\t\t\tthis.spine.hooks.serialize.deregister(substituteResources);\n\t\t\t});\n\n\t\t});\n\n\t\treturn this.storage;\n\t}\n\n\t/**\n\t * Get the cover url\n\t * @return {Promise} coverUrl\n\t */\n\tcoverUrl() {\n\t\treturn this.loaded.cover.then(() => {\n\t\t\tif (!this.cover) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (this.archived) {\n\t\t\t\treturn this.archive.createUrl(this.cover);\n\t\t\t} else {\n\t\t\t\treturn this.cover;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Load replacement urls\n\t * @private\n\t * @return {Promise} completed loading urls\n\t */\n\treplacements() {\n\t\tthis.spine.hooks.serialize.register((output, section) => {\n\t\t\tsection.output = this.resources.substitute(output, section.url);\n\t\t});\n\n\t\treturn this.resources.replacements().\n\t\t\tthen(() => {\n\t\t\t\treturn this.resources.replaceCss();\n\t\t\t});\n\t}\n\n\t/**\n\t * Find a DOM Range for a given CFI Range\n\t * @param {EpubCFI} cfiRange a epub cfi range\n\t * @return {Promise}\n\t */\n\tgetRange(cfiRange) {\n\t\tvar cfi = new EpubCFI(cfiRange);\n\t\tvar item = this.spine.get(cfi.spinePos);\n\t\tvar _request = this.load.bind(this);\n\t\tif (!item) {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\treject(\"CFI could not be found\");\n\t\t\t});\n\t\t}\n\t\treturn item.load(_request).then(function (contents) {\n\t\t\tvar range = cfi.toRange(item.document);\n\t\t\treturn range;\n\t\t});\n\t}\n\n\t/**\n\t * Generates the Book Key using the identifier in the manifest or other string provided\n\t * @param {string} [identifier] to use instead of metadata identifier\n\t * @return {string} key\n\t */\n\tkey(identifier) {\n\t\tvar ident = identifier || this.packaging.metadata.identifier || this.url.filename;\n\t\treturn `epubjs:${EPUBJS_VERSION}:${ident}`;\n\t}\n\n\t/**\n\t * Destroy the Book and all associated objects\n\t */\n\tdestroy() {\n\t\tthis.opened = undefined;\n\t\tthis.loading = undefined;\n\t\tthis.loaded = undefined;\n\t\tthis.ready = undefined;\n\n\t\tthis.isOpen = false;\n\t\tthis.isRendered = false;\n\n\t\tthis.spine && this.spine.destroy();\n\t\tthis.locations && this.locations.destroy();\n\t\tthis.pageList && this.pageList.destroy();\n\t\tthis.archive && this.archive.destroy();\n\t\tthis.resources && this.resources.destroy();\n\t\tthis.container && this.container.destroy();\n\t\tthis.packaging && this.packaging.destroy();\n\t\tthis.rendition && this.rendition.destroy();\n\t\tthis.displayOptions && this.displayOptions.destroy();\n\n\t\tthis.spine = undefined;\n\t\tthis.locations = undefined;\n\t\tthis.pageList = undefined;\n\t\tthis.archive = undefined;\n\t\tthis.resources = undefined;\n\t\tthis.container = undefined;\n\t\tthis.packaging = undefined;\n\t\tthis.rendition = undefined;\n\n\t\tthis.navigation = undefined;\n\t\tthis.url = undefined;\n\t\tthis.path = undefined;\n\t\tthis.archived = false;\n\t}\n\n}\n\n//-- Enable binding events to book\nEventEmitter(Book.prototype);\n\nexport default Book;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Underline = exports.Highlight = exports.Mark = exports.Pane = undefined;\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _svg = require('./svg');\n\nvar _svg2 = _interopRequireDefault(_svg);\n\nvar _events = require('./events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Pane = exports.Pane = function () {\n function Pane(target) {\n var container = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.body;\n\n _classCallCheck(this, Pane);\n\n this.target = target;\n this.element = _svg2.default.createElement('svg');\n this.marks = [];\n\n // Match the coordinates of the target element\n this.element.style.position = 'absolute';\n // Disable pointer events\n this.element.setAttribute('pointer-events', 'none');\n\n // Set up mouse event proxying between the target element and the marks\n _events2.default.proxyMouse(this.target, this.marks);\n\n this.container = container;\n this.container.appendChild(this.element);\n\n this.render();\n }\n\n _createClass(Pane, [{\n key: 'addMark',\n value: function addMark(mark) {\n var g = _svg2.default.createElement('g');\n this.element.appendChild(g);\n mark.bind(g, this.container);\n\n this.marks.push(mark);\n\n mark.render();\n return mark;\n }\n }, {\n key: 'removeMark',\n value: function removeMark(mark) {\n var idx = this.marks.indexOf(mark);\n if (idx === -1) {\n return;\n }\n var el = mark.unbind();\n this.element.removeChild(el);\n this.marks.splice(idx, 1);\n }\n }, {\n key: 'render',\n value: function render() {\n setCoords(this.element, coords(this.target, this.container));\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = this.marks[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var m = _step.value;\n\n m.render();\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n }]);\n\n return Pane;\n}();\n\nvar Mark = exports.Mark = function () {\n function Mark() {\n _classCallCheck(this, Mark);\n\n this.element = null;\n }\n\n _createClass(Mark, [{\n key: 'bind',\n value: function bind(element, container) {\n this.element = element;\n this.container = container;\n }\n }, {\n key: 'unbind',\n value: function unbind() {\n var el = this.element;\n this.element = null;\n return el;\n }\n }, {\n key: 'render',\n value: function render() {}\n }, {\n key: 'dispatchEvent',\n value: function dispatchEvent(e) {\n if (!this.element) return;\n this.element.dispatchEvent(e);\n }\n }, {\n key: 'getBoundingClientRect',\n value: function getBoundingClientRect() {\n return this.element.getBoundingClientRect();\n }\n }, {\n key: 'getClientRects',\n value: function getClientRects() {\n var rects = [];\n var el = this.element.firstChild;\n while (el) {\n rects.push(el.getBoundingClientRect());\n el = el.nextSibling;\n }\n return rects;\n }\n }, {\n key: 'filteredRanges',\n value: function filteredRanges() {\n var rects = Array.from(this.range.getClientRects());\n\n // De-duplicate the boxes\n return rects.filter(function (box) {\n for (var i = 0; i < rects.length; i++) {\n if (rects[i] === box) {\n return true;\n }\n var contained = contains(rects[i], box);\n if (contained) {\n return false;\n }\n }\n return true;\n });\n }\n }]);\n\n return Mark;\n}();\n\nvar Highlight = exports.Highlight = function (_Mark) {\n _inherits(Highlight, _Mark);\n\n function Highlight(range, className, data, attributes) {\n _classCallCheck(this, Highlight);\n\n var _this = _possibleConstructorReturn(this, (Highlight.__proto__ || Object.getPrototypeOf(Highlight)).call(this));\n\n _this.range = range;\n _this.className = className;\n _this.data = data || {};\n _this.attributes = attributes || {};\n return _this;\n }\n\n _createClass(Highlight, [{\n key: 'bind',\n value: function bind(element, container) {\n _get(Highlight.prototype.__proto__ || Object.getPrototypeOf(Highlight.prototype), 'bind', this).call(this, element, container);\n\n for (var attr in this.data) {\n if (this.data.hasOwnProperty(attr)) {\n this.element.dataset[attr] = this.data[attr];\n }\n }\n\n for (var attr in this.attributes) {\n if (this.attributes.hasOwnProperty(attr)) {\n this.element.setAttribute(attr, this.attributes[attr]);\n }\n }\n\n if (this.className) {\n this.element.classList.add(this.className);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n // Empty element\n while (this.element.firstChild) {\n this.element.removeChild(this.element.firstChild);\n }\n\n var docFrag = this.element.ownerDocument.createDocumentFragment();\n var filtered = this.filteredRanges();\n var offset = this.element.getBoundingClientRect();\n var container = this.container.getBoundingClientRect();\n\n for (var i = 0, len = filtered.length; i < len; i++) {\n var r = filtered[i];\n var el = _svg2.default.createElement('rect');\n el.setAttribute('x', r.left - offset.left + container.left);\n el.setAttribute('y', r.top - offset.top + container.top);\n el.setAttribute('height', r.height);\n el.setAttribute('width', r.width);\n docFrag.appendChild(el);\n }\n\n this.element.appendChild(docFrag);\n }\n }]);\n\n return Highlight;\n}(Mark);\n\nvar Underline = exports.Underline = function (_Highlight) {\n _inherits(Underline, _Highlight);\n\n function Underline(range, className, data, attributes) {\n _classCallCheck(this, Underline);\n\n return _possibleConstructorReturn(this, (Underline.__proto__ || Object.getPrototypeOf(Underline)).call(this, range, className, data, attributes));\n }\n\n _createClass(Underline, [{\n key: 'render',\n value: function render() {\n // Empty element\n while (this.element.firstChild) {\n this.element.removeChild(this.element.firstChild);\n }\n\n var docFrag = this.element.ownerDocument.createDocumentFragment();\n var filtered = this.filteredRanges();\n var offset = this.element.getBoundingClientRect();\n var container = this.container.getBoundingClientRect();\n\n for (var i = 0, len = filtered.length; i < len; i++) {\n var r = filtered[i];\n\n var rect = _svg2.default.createElement('rect');\n rect.setAttribute('x', r.left - offset.left + container.left);\n rect.setAttribute('y', r.top - offset.top + container.top);\n rect.setAttribute('height', r.height);\n rect.setAttribute('width', r.width);\n rect.setAttribute('fill', 'none');\n\n var line = _svg2.default.createElement('line');\n line.setAttribute('x1', r.left - offset.left + container.left);\n line.setAttribute('x2', r.left - offset.left + container.left + r.width);\n line.setAttribute('y1', r.top - offset.top + container.top + r.height - 1);\n line.setAttribute('y2', r.top - offset.top + container.top + r.height - 1);\n\n line.setAttribute('stroke-width', 1);\n line.setAttribute('stroke', 'black'); //TODO: match text color?\n line.setAttribute('stroke-linecap', 'square');\n\n docFrag.appendChild(rect);\n\n docFrag.appendChild(line);\n }\n\n this.element.appendChild(docFrag);\n }\n }]);\n\n return Underline;\n}(Highlight);\n\nfunction coords(el, container) {\n var offset = container.getBoundingClientRect();\n var rect = el.getBoundingClientRect();\n\n return {\n top: rect.top - offset.top,\n left: rect.left - offset.left,\n height: el.scrollHeight,\n width: el.scrollWidth\n };\n}\n\nfunction setCoords(el, coords) {\n el.style.setProperty('top', coords.top + 'px', 'important');\n el.style.setProperty('left', coords.left + 'px', 'important');\n el.style.setProperty('height', coords.height + 'px', 'important');\n el.style.setProperty('width', coords.width + 'px', 'important');\n}\n\nfunction contains(rect1, rect2) {\n return rect2.right <= rect1.right && rect2.left >= rect1.left && rect2.top >= rect1.top && rect2.bottom <= rect1.bottom;\n}\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var conventions = require(\"./conventions\");\nvar dom = require('./dom')\nvar entities = require('./entities');\nvar sax = require('./sax');\n\nvar DOMImplementation = dom.DOMImplementation;\n\nvar NAMESPACE = conventions.NAMESPACE;\n\nvar ParseError = sax.ParseError;\nvar XMLReader = sax.XMLReader;\n\nfunction DOMParser(options){\n\tthis.options = options ||{locator:{}};\n}\n\nDOMParser.prototype.parseFromString = function(source,mimeType){\n\tvar options = this.options;\n\tvar sax = new XMLReader();\n\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\n\tvar errorHandler = options.errorHandler;\n\tvar locator = options.locator;\n\tvar defaultNSMap = options.xmlns||{};\n\tvar isHTML = /\\/x?html?$/.test(mimeType);//mimeType.toLowerCase().indexOf('html') > -1;\n \tvar entityMap = isHTML ? entities.HTML_ENTITIES : entities.XML_ENTITIES;\n\tif(locator){\n\t\tdomBuilder.setDocumentLocator(locator)\n\t}\n\n\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\n\tsax.domBuilder = options.domBuilder || domBuilder;\n\tif(isHTML){\n\t\tdefaultNSMap[''] = NAMESPACE.HTML;\n\t}\n\tdefaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;\n\tif(source && typeof source === 'string'){\n\t\tsax.parse(source,defaultNSMap,entityMap);\n\t}else{\n\t\tsax.errorHandler.error(\"invalid doc source\");\n\t}\n\treturn domBuilder.doc;\n}\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\n\tif(!errorImpl){\n\t\tif(domBuilder instanceof DOMHandler){\n\t\t\treturn domBuilder;\n\t\t}\n\t\terrorImpl = domBuilder ;\n\t}\n\tvar errorHandler = {}\n\tvar isCallback = errorImpl instanceof Function;\n\tlocator = locator||{}\n\tfunction build(key){\n\t\tvar fn = errorImpl[key];\n\t\tif(!fn && isCallback){\n\t\t\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\n\t\t}\n\t\terrorHandler[key] = fn && function(msg){\n\t\t\tfn('[xmldom '+key+']\\t'+msg+_locator(locator));\n\t\t}||function(){};\n\t}\n\tbuild('warning');\n\tbuild('error');\n\tbuild('fatalError');\n\treturn errorHandler;\n}\n\n//console.log('#\\n\\n\\n\\n\\n\\n\\n####')\n/**\n * +ContentHandler+ErrorHandler\n * +LexicalHandler+EntityResolver2\n * -DeclHandler-DTDHandler\n *\n * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler\n * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2\n * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html\n */\nfunction DOMHandler() {\n this.cdata = false;\n}\nfunction position(locator,node){\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n}\n/**\n * @see org.xml.sax.ContentHandler#startDocument\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\n */\nDOMHandler.prototype = {\n\tstartDocument : function() {\n \tthis.doc = new DOMImplementation().createDocument(null, null, null);\n \tif (this.locator) {\n \tthis.doc.documentURI = this.locator.systemId;\n \t}\n\t},\n\tstartElement:function(namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.doc;\n\t var el = doc.createElementNS(namespaceURI, qName||localName);\n\t var len = attrs.length;\n\t appendElement(this, el);\n\t this.currentElement = el;\n\n\t\tthis.locator && position(this.locator,el)\n\t for (var i = 0 ; i < len; i++) {\n\t var namespaceURI = attrs.getURI(i);\n\t var value = attrs.getValue(i);\n\t var qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tthis.locator &&position(attrs.getLocator(i),attr);\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr)\n\t }\n\t},\n\tendElement:function(namespaceURI, localName, qName) {\n\t\tvar current = this.currentElement\n\t\tvar tagName = current.tagName;\n\t\tthis.currentElement = current.parentNode;\n\t},\n\tstartPrefixMapping:function(prefix, uri) {\n\t},\n\tendPrefixMapping:function(prefix) {\n\t},\n\tprocessingInstruction:function(target, data) {\n\t var ins = this.doc.createProcessingInstruction(target, data);\n\t this.locator && position(this.locator,ins)\n\t appendElement(this, ins);\n\t},\n\tignorableWhitespace:function(ch, start, length) {\n\t},\n\tcharacters:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t\t//console.log(chars)\n\t\tif(chars){\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\n\t\t\t}\n\t\t\tif(this.currentElement){\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t}else if(/^\\s*$/.test(chars)){\n\t\t\t\tthis.doc.appendChild(charNode);\n\t\t\t\t//process xml\n\t\t\t}\n\t\t\tthis.locator && position(this.locator,charNode)\n\t\t}\n\t},\n\tskippedEntity:function(name) {\n\t},\n\tendDocument:function() {\n\t\tthis.doc.normalize();\n\t},\n\tsetDocumentLocator:function (locator) {\n\t if(this.locator = locator){// && !('lineNumber' in locator)){\n\t \tlocator.lineNumber = 0;\n\t }\n\t},\n\t//LexicalHandler\n\tcomment:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t var comm = this.doc.createComment(chars);\n\t this.locator && position(this.locator,comm)\n\t appendElement(this, comm);\n\t},\n\n\tstartCDATA:function() {\n\t //used in characters() methods\n\t this.cdata = true;\n\t},\n\tendCDATA:function() {\n\t this.cdata = false;\n\t},\n\n\tstartDTD:function(name, publicId, systemId) {\n\t\tvar impl = this.doc.implementation;\n\t if (impl && impl.createDocumentType) {\n\t var dt = impl.createDocumentType(name, publicId, systemId);\n\t this.locator && position(this.locator,dt)\n\t appendElement(this, dt);\n\t\t\t\t\tthis.doc.doctype = dt;\n\t }\n\t},\n\t/**\n\t * @see org.xml.sax.ErrorHandler\n\t * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\n\t */\n\twarning:function(error) {\n\t\tconsole.warn('[xmldom warning]\\t'+error,_locator(this.locator));\n\t},\n\terror:function(error) {\n\t\tconsole.error('[xmldom error]\\t'+error,_locator(this.locator));\n\t},\n\tfatalError:function(error) {\n\t\tthrow new ParseError(error, this.locator);\n\t}\n}\nfunction _locator(l){\n\tif(l){\n\t\treturn '\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\n\t}\n}\nfunction _toString(chars,start,length){\n\tif(typeof chars == 'string'){\n\t\treturn chars.substr(start,length)\n\t}else{//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif(chars.length >= start+length || start){\n\t\t\treturn new java.lang.String(chars,start,length)+'';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\n/*\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\n * used method of org.xml.sax.ext.LexicalHandler:\n * #comment(chars, start, length)\n * #startCDATA()\n * #endCDATA()\n * #startDTD(name, publicId, systemId)\n *\n *\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\n * #endDTD()\n * #startEntity(name)\n * #endEntity(name)\n *\n *\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\n * IGNORED method of org.xml.sax.ext.DeclHandler\n * \t#attributeDecl(eName, aName, type, mode, value)\n * #elementDecl(name, model)\n * #externalEntityDecl(name, publicId, systemId)\n * #internalEntityDecl(name, value)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\n * IGNORED method of org.xml.sax.EntityResolver2\n * #resolveEntity(String name,String publicId,String baseURI,String systemId)\n * #resolveEntity(publicId, systemId)\n * #getExternalSubset(name, baseURI)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\n * IGNORED method of org.xml.sax.DTDHandler\n * #notationDecl(name, publicId, systemId) {};\n * #unparsedEntityDecl(name, publicId, systemId, notationName) {};\n */\n\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(key){\n\tDOMHandler.prototype[key] = function(){return null}\n})\n\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\nfunction appendElement (hander,node) {\n if (!hander.currentElement) {\n hander.doc.appendChild(node);\n } else {\n hander.currentElement.appendChild(node);\n }\n}//appendChild and setAttributeNS are preformance key\n\nexports.__DOMHandler = DOMHandler;\nexports.DOMParser = DOMParser;\n\n/**\n * @deprecated Import/require from main entry point instead\n */\nexports.DOMImplementation = dom.DOMImplementation;\n\n/**\n * @deprecated Import/require from main entry point instead\n */\nexports.XMLSerializer = dom.XMLSerializer;\n","'use strict';\n\nvar freeze = require('./conventions').freeze;\n\n/**\n * The entities that are predefined in every XML document.\n *\n * @see https://www.w3.org/TR/2006/REC-xml11-20060816/#sec-predefined-ent W3C XML 1.1\n * @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent W3C XML 1.0\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML Wikipedia\n */\nexports.XML_ENTITIES = freeze({\n\tamp: '&',\n\tapos: \"'\",\n\tgt: '>',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see XML_ENTITIES\n * @see DOMParser.parseFromString\n * @see DOMImplementation.prototype.createHTMLDocument\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated use `HTML_ENTITIES` instead\n * @see HTML_ENTITIES\n */\nexports.entityMap = exports.HTML_ENTITIES;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","'use strict';\n\nvar d = require('d')\n , callable = require('es5-ext/object/valid-callable')\n\n , apply = Function.prototype.apply, call = Function.prototype.call\n , create = Object.create, defineProperty = Object.defineProperty\n , defineProperties = Object.defineProperties\n , hasOwnProperty = Object.prototype.hasOwnProperty\n , descriptor = { configurable: true, enumerable: false, writable: true }\n\n , on, once, off, emit, methods, descriptors, base;\n\non = function (type, listener) {\n\tvar data;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) {\n\t\tdata = descriptor.value = create(null);\n\t\tdefineProperty(this, '__ee__', descriptor);\n\t\tdescriptor.value = null;\n\t} else {\n\t\tdata = this.__ee__;\n\t}\n\tif (!data[type]) data[type] = listener;\n\telse if (typeof data[type] === 'object') data[type].push(listener);\n\telse data[type] = [data[type], listener];\n\n\treturn this;\n};\n\nonce = function (type, listener) {\n\tvar once, self;\n\n\tcallable(listener);\n\tself = this;\n\ton.call(this, type, once = function () {\n\t\toff.call(self, type, once);\n\t\tapply.call(listener, this, arguments);\n\t});\n\n\tonce.__eeOnceListener__ = listener;\n\treturn this;\n};\n\noff = function (type, listener) {\n\tvar data, listeners, candidate, i;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return this;\n\tdata = this.__ee__;\n\tif (!data[type]) return this;\n\tlisteners = data[type];\n\n\tif (typeof listeners === 'object') {\n\t\tfor (i = 0; (candidate = listeners[i]); ++i) {\n\t\t\tif ((candidate === listener) ||\n\t\t\t\t\t(candidate.__eeOnceListener__ === listener)) {\n\t\t\t\tif (listeners.length === 2) data[type] = listeners[i ? 0 : 1];\n\t\t\t\telse listeners.splice(i, 1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif ((listeners === listener) ||\n\t\t\t\t(listeners.__eeOnceListener__ === listener)) {\n\t\t\tdelete data[type];\n\t\t}\n\t}\n\n\treturn this;\n};\n\nemit = function (type) {\n\tvar i, l, listener, listeners, args;\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return;\n\tlisteners = this.__ee__[type];\n\tif (!listeners) return;\n\n\tif (typeof listeners === 'object') {\n\t\tl = arguments.length;\n\t\targs = new Array(l - 1);\n\t\tfor (i = 1; i < l; ++i) args[i - 1] = arguments[i];\n\n\t\tlisteners = listeners.slice();\n\t\tfor (i = 0; (listener = listeners[i]); ++i) {\n\t\t\tapply.call(listener, this, args);\n\t\t}\n\t} else {\n\t\tswitch (arguments.length) {\n\t\tcase 1:\n\t\t\tcall.call(listeners, this);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tcall.call(listeners, this, arguments[1]);\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tcall.call(listeners, this, arguments[1], arguments[2]);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tl = arguments.length;\n\t\t\targs = new Array(l - 1);\n\t\t\tfor (i = 1; i < l; ++i) {\n\t\t\t\targs[i - 1] = arguments[i];\n\t\t\t}\n\t\t\tapply.call(listeners, this, args);\n\t\t}\n\t}\n};\n\nmethods = {\n\ton: on,\n\tonce: once,\n\toff: off,\n\temit: emit\n};\n\ndescriptors = {\n\ton: d(on),\n\tonce: d(once),\n\toff: d(off),\n\temit: d(emit)\n};\n\nbase = defineProperties({}, descriptors);\n\nmodule.exports = exports = function (o) {\n\treturn (o == null) ? create(base) : defineProperties(Object(o), descriptors);\n};\nexports.methods = methods;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.proxyMouse = proxyMouse;\nexports.clone = clone;\n// import 'babelify/polyfill'; // needed for Object.assign\n\nexports.default = {\n proxyMouse: proxyMouse\n};\n\n/**\n * Start proxying all mouse events that occur on the target node to each node in\n * a set of tracked nodes.\n *\n * The items in tracked do not strictly have to be DOM Nodes, but they do have\n * to have dispatchEvent, getBoundingClientRect, and getClientRects methods.\n *\n * @param target {Node} The node on which to listen for mouse events.\n * @param tracked {Node[]} A (possibly mutable) array of nodes to which to proxy\n * events.\n */\n\nfunction proxyMouse(target, tracked) {\n function dispatch(e) {\n // We walk through the set of tracked elements in reverse order so that\n // events are sent to those most recently added first.\n //\n // This is the least surprising behaviour as it simulates the way the\n // browser would work if items added later were drawn \"on top of\"\n // earlier ones.\n for (var i = tracked.length - 1; i >= 0; i--) {\n var t = tracked[i];\n var x = e.clientX;\n var y = e.clientY;\n\n if (e.touches && e.touches.length) {\n x = e.touches[0].clientX;\n y = e.touches[0].clientY;\n }\n\n if (!contains(t, target, x, y)) {\n continue;\n }\n\n // The event targets this mark, so dispatch a cloned event:\n t.dispatchEvent(clone(e));\n // We only dispatch the cloned event to the first matching mark.\n break;\n }\n }\n\n if (target.nodeName === \"iframe\" || target.nodeName === \"IFRAME\") {\n\n try {\n // Try to get the contents if same domain\n this.target = target.contentDocument;\n } catch (err) {\n this.target = target;\n }\n } else {\n this.target = target;\n }\n\n var _arr = ['mouseup', 'mousedown', 'click', 'touchstart'];\n for (var _i = 0; _i < _arr.length; _i++) {\n var ev = _arr[_i];\n this.target.addEventListener(ev, function (e) {\n return dispatch(e);\n }, false);\n }\n}\n\n/**\n * Clone a mouse event object.\n *\n * @param e {MouseEvent} A mouse event object to clone.\n * @returns {MouseEvent}\n */\nfunction clone(e) {\n var opts = Object.assign({}, e, { bubbles: false });\n try {\n return new MouseEvent(e.type, opts);\n } catch (err) {\n // compat: webkit\n var copy = document.createEvent('MouseEvents');\n copy.initMouseEvent(e.type, false, opts.cancelable, opts.view, opts.detail, opts.screenX, opts.screenY, opts.clientX, opts.clientY, opts.ctrlKey, opts.altKey, opts.shiftKey, opts.metaKey, opts.button, opts.relatedTarget);\n return copy;\n }\n}\n\n/**\n * Check if the item contains the point denoted by the passed coordinates\n * @param item {Object} An object with getBoundingClientRect and getClientRects\n * methods.\n * @param x {Number}\n * @param y {Number}\n * @returns {Boolean}\n */\nfunction contains(item, target, x, y) {\n // offset\n var offset = target.getBoundingClientRect();\n\n function rectContains(r, x, y) {\n var top = r.top - offset.top;\n var left = r.left - offset.left;\n var bottom = top + r.height;\n var right = left + r.width;\n return top <= y && left <= x && bottom > y && right > x;\n }\n\n // Check overall bounding box first\n var rect = item.getBoundingClientRect();\n if (!rectContains(rect, x, y)) {\n return false;\n }\n\n // Then continue to check each child rect\n var rects = item.getClientRects();\n for (var i = 0, len = rects.length; i < len; i++) {\n if (rectContains(rects[i], x, y)) {\n return true;\n }\n }\n return false;\n}\n","import EventEmitter from \"event-emitter\";\nimport {extend, borders, uuid, isNumber, bounds, defer, createBlobUrl, revokeBlobUrl} from \"../../utils/core\";\nimport EpubCFI from \"../../epubcfi\";\nimport Contents from \"../../contents\";\nimport { EVENTS } from \"../../utils/constants\";\nimport { Pane, Highlight, Underline } from \"marks-pane\";\n\nclass IframeView {\n\tconstructor(section, options) {\n\t\tthis.settings = extend({\n\t\t\tignoreClass : \"\",\n\t\t\taxis: undefined, //options.layout && options.layout.props.flow === \"scrolled\" ? \"vertical\" : \"horizontal\",\n\t\t\tdirection: undefined,\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\tlayout: undefined,\n\t\t\tglobalLayoutProperties: {},\n\t\t\tmethod: undefined,\n\t\t\tforceRight: false,\n\t\t\tallowScriptedContent: false,\n\t\t\tallowPopups: false\n\t\t}, options || {});\n\n\t\tthis.id = \"epubjs-view-\" + uuid();\n\t\tthis.section = section;\n\t\tthis.index = section.index;\n\n\t\tthis.element = this.container(this.settings.axis);\n\n\t\tthis.added = false;\n\t\tthis.displayed = false;\n\t\tthis.rendered = false;\n\n\t\t// this.width = this.settings.width;\n\t\t// this.height = this.settings.height;\n\n\t\tthis.fixedWidth = 0;\n\t\tthis.fixedHeight = 0;\n\n\t\t// Blank Cfi for Parsing\n\t\tthis.epubcfi = new EpubCFI();\n\n\t\tthis.layout = this.settings.layout;\n\t\t// Dom events to listen for\n\t\t// this.listenedEvents = [\"keydown\", \"keyup\", \"keypressed\", \"mouseup\", \"mousedown\", \"click\", \"touchend\", \"touchstart\"];\n\n\t\tthis.pane = undefined;\n\t\tthis.highlights = {};\n\t\tthis.underlines = {};\n\t\tthis.marks = {};\n\n\t}\n\n\tcontainer(axis) {\n\t\tvar element = document.createElement(\"div\");\n\n\t\telement.classList.add(\"epub-view\");\n\n\t\t// this.element.style.minHeight = \"100px\";\n\t\telement.style.height = \"0px\";\n\t\telement.style.width = \"0px\";\n\t\telement.style.overflow = \"hidden\";\n\t\telement.style.position = \"relative\";\n\t\telement.style.display = \"block\";\n\n\t\tif(axis && axis == \"horizontal\"){\n\t\t\telement.style.flex = \"none\";\n\t\t} else {\n\t\t\telement.style.flex = \"initial\";\n\t\t}\n\n\t\treturn element;\n\t}\n\n\tcreate() {\n\n\t\tif(this.iframe) {\n\t\t\treturn this.iframe;\n\t\t}\n\n\t\tif(!this.element) {\n\t\t\tthis.element = this.createContainer();\n\t\t}\n\n\t\tthis.iframe = document.createElement(\"iframe\");\n\t\tthis.iframe.id = this.id;\n\t\tthis.iframe.scrolling = \"no\"; // Might need to be removed: breaks ios width calculations\n\t\tthis.iframe.style.overflow = \"hidden\";\n\t\tthis.iframe.seamless = \"seamless\";\n\t\t// Back up if seamless isn't supported\n\t\tthis.iframe.style.border = \"none\";\n\n\t\t// sandbox\n\t\tthis.iframe.sandbox = \"allow-same-origin\";\n\t\tif (this.settings.allowScriptedContent) {\n\t\t\tthis.iframe.sandbox += \" allow-scripts\";\n\t\t}\n\t\tif (this.settings.allowPopups) {\n\t\t\tthis.iframe.sandbox += \" allow-popups\";\n\t\t}\n\t\t\n\t\tthis.iframe.setAttribute(\"enable-annotation\", \"true\");\n\n\t\tthis.resizing = true;\n\n\t\t// this.iframe.style.display = \"none\";\n\t\tthis.element.style.visibility = \"hidden\";\n\t\tthis.iframe.style.visibility = \"hidden\";\n\n\t\tthis.iframe.style.width = \"0\";\n\t\tthis.iframe.style.height = \"0\";\n\t\tthis._width = 0;\n\t\tthis._height = 0;\n\n\t\tthis.element.setAttribute(\"ref\", this.index);\n\n\t\tthis.added = true;\n\n\t\tthis.elementBounds = bounds(this.element);\n\n\t\t// if(width || height){\n\t\t// this.resize(width, height);\n\t\t// } else if(this.width && this.height){\n\t\t// this.resize(this.width, this.height);\n\t\t// } else {\n\t\t// this.iframeBounds = bounds(this.iframe);\n\t\t// }\n\n\n\t\tif((\"srcdoc\" in this.iframe)) {\n\t\t\tthis.supportsSrcdoc = true;\n\t\t} else {\n\t\t\tthis.supportsSrcdoc = false;\n\t\t}\n\n\t\tif (!this.settings.method) {\n\t\t\tthis.settings.method = this.supportsSrcdoc ? \"srcdoc\" : \"write\";\n\t\t}\n\n\t\treturn this.iframe;\n\t}\n\n\trender(request, show) {\n\n\t\t// view.onLayout = this.layout.format.bind(this.layout);\n\t\tthis.create();\n\n\t\t// Fit to size of the container, apply padding\n\t\tthis.size();\n\n\t\tif(!this.sectionRender) {\n\t\t\tthis.sectionRender = this.section.render(request);\n\t\t}\n\n\t\t// Render Chain\n\t\treturn this.sectionRender\n\t\t\t.then(function(contents){\n\t\t\t\treturn this.load(contents);\n\t\t\t}.bind(this))\n\t\t\t.then(function(){\n\n\t\t\t\t// find and report the writingMode axis\n\t\t\t\tlet writingMode = this.contents.writingMode();\n\n\t\t\t\t// Set the axis based on the flow and writing mode\n\t\t\t\tlet axis;\n\t\t\t\tif (this.settings.flow === \"scrolled\") {\n\t\t\t\t\taxis = (writingMode.indexOf(\"vertical\") === 0) ? \"horizontal\" : \"vertical\";\n\t\t\t\t} else {\n\t\t\t\t\taxis = (writingMode.indexOf(\"vertical\") === 0) ? \"vertical\" : \"horizontal\";\n\t\t\t\t}\n\n\t\t\t\tif (writingMode.indexOf(\"vertical\") === 0 && this.settings.flow === \"paginated\") {\n\t\t\t\t\tthis.layout.delta = this.layout.height;\n\t\t\t\t}\n\n\t\t\t\tthis.setAxis(axis);\n\t\t\t\tthis.emit(EVENTS.VIEWS.AXIS, axis);\n\n\t\t\t\tthis.setWritingMode(writingMode);\n\t\t\t\tthis.emit(EVENTS.VIEWS.WRITING_MODE, writingMode);\n\n\n\t\t\t\t// apply the layout function to the contents\n\t\t\t\tthis.layout.format(this.contents, this.section, this.axis);\n\n\t\t\t\t// Listen for events that require an expansion of the iframe\n\t\t\t\tthis.addListeners();\n\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\t// Expand the iframe to the full size of the content\n\t\t\t\t\tthis.expand();\n\n\t\t\t\t\tif (this.settings.forceRight) {\n\t\t\t\t\t\tthis.element.style.marginLeft = this.width() + \"px\";\n\t\t\t\t\t}\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\n\t\t\t}.bind(this), function(e){\n\t\t\t\tthis.emit(EVENTS.VIEWS.LOAD_ERROR, e);\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\treject(e);\n\t\t\t\t});\n\t\t\t}.bind(this))\n\t\t\t.then(function() {\n\t\t\t\tthis.emit(EVENTS.VIEWS.RENDERED, this.section);\n\t\t\t}.bind(this));\n\n\t}\n\n\treset () {\n\t\tif (this.iframe) {\n\t\t\tthis.iframe.style.width = \"0\";\n\t\t\tthis.iframe.style.height = \"0\";\n\t\t\tthis._width = 0;\n\t\t\tthis._height = 0;\n\t\t\tthis._textWidth = undefined;\n\t\t\tthis._contentWidth = undefined;\n\t\t\tthis._textHeight = undefined;\n\t\t\tthis._contentHeight = undefined;\n\t\t}\n\t\tthis._needsReframe = true;\n\t}\n\n\t// Determine locks base on settings\n\tsize(_width, _height) {\n\t\tvar width = _width || this.settings.width;\n\t\tvar height = _height || this.settings.height;\n\n\t\tif(this.layout.name === \"pre-paginated\") {\n\t\t\tthis.lock(\"both\", width, height);\n\t\t} else if(this.settings.axis === \"horizontal\") {\n\t\t\tthis.lock(\"height\", width, height);\n\t\t} else {\n\t\t\tthis.lock(\"width\", width, height);\n\t\t}\n\n\t\tthis.settings.width = width;\n\t\tthis.settings.height = height;\n\t}\n\n\t// Lock an axis to element dimensions, taking borders into account\n\tlock(what, width, height) {\n\t\tvar elBorders = borders(this.element);\n\t\tvar iframeBorders;\n\n\t\tif(this.iframe) {\n\t\t\tiframeBorders = borders(this.iframe);\n\t\t} else {\n\t\t\tiframeBorders = {width: 0, height: 0};\n\t\t}\n\n\t\tif(what == \"width\" && isNumber(width)){\n\t\t\tthis.lockedWidth = width - elBorders.width - iframeBorders.width;\n\t\t\t// this.resize(this.lockedWidth, width); // width keeps ratio correct\n\t\t}\n\n\t\tif(what == \"height\" && isNumber(height)){\n\t\t\tthis.lockedHeight = height - elBorders.height - iframeBorders.height;\n\t\t\t// this.resize(width, this.lockedHeight);\n\t\t}\n\n\t\tif(what === \"both\" &&\n\t\t\t isNumber(width) &&\n\t\t\t isNumber(height)){\n\n\t\t\tthis.lockedWidth = width - elBorders.width - iframeBorders.width;\n\t\t\tthis.lockedHeight = height - elBorders.height - iframeBorders.height;\n\t\t\t// this.resize(this.lockedWidth, this.lockedHeight);\n\t\t}\n\n\t\tif(this.displayed && this.iframe) {\n\n\t\t\t// this.contents.layout();\n\t\t\tthis.expand();\n\t\t}\n\n\n\n\t}\n\n\t// Resize a single axis based on content dimensions\n\texpand(force) {\n\t\tvar width = this.lockedWidth;\n\t\tvar height = this.lockedHeight;\n\t\tvar columns;\n\n\t\tvar textWidth, textHeight;\n\n\t\tif(!this.iframe || this._expanding) return;\n\n\t\tthis._expanding = true;\n\n\t\tif(this.layout.name === \"pre-paginated\") {\n\t\t\twidth = this.layout.columnWidth;\n\t\t\theight = this.layout.height;\n\t\t}\n\t\t// Expand Horizontally\n\t\telse if(this.settings.axis === \"horizontal\") {\n\t\t\t// Get the width of the text\n\t\t\twidth = this.contents.textWidth();\n\n\t\t\tif (width % this.layout.pageWidth > 0) {\n\t\t\t\twidth = Math.ceil(width / this.layout.pageWidth) * this.layout.pageWidth;\n\t\t\t}\n\n\t\t\tif (this.settings.forceEvenPages) {\n\t\t\t\tcolumns = (width / this.layout.pageWidth);\n\t\t\t\tif ( this.layout.divisor > 1 &&\n\t\t\t\t\t\t this.layout.name === \"reflowable\" &&\n\t\t\t\t\t\t(columns % 2 > 0)) {\n\t\t\t\t\t// add a blank page\n\t\t\t\t\twidth += this.layout.pageWidth;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} // Expand Vertically\n\t\telse if(this.settings.axis === \"vertical\") {\n\t\t\theight = this.contents.textHeight();\n\t\t\tif (this.settings.flow === \"paginated\" &&\n\t\t\t\theight % this.layout.height > 0) {\n\t\t\t\theight = Math.ceil(height / this.layout.height) * this.layout.height;\n\t\t\t}\n\t\t}\n\n\t\t// Only Resize if dimensions have changed or\n\t\t// if Frame is still hidden, so needs reframing\n\t\tif(this._needsReframe || width != this._width || height != this._height){\n\t\t\tthis.reframe(width, height);\n\t\t}\n\n\t\tthis._expanding = false;\n\t}\n\n\treframe(width, height) {\n\t\tvar size;\n\n\t\tif(isNumber(width)){\n\t\t\tthis.element.style.width = width + \"px\";\n\t\t\tthis.iframe.style.width = width + \"px\";\n\t\t\tthis._width = width;\n\t\t}\n\n\t\tif(isNumber(height)){\n\t\t\tthis.element.style.height = height + \"px\";\n\t\t\tthis.iframe.style.height = height + \"px\";\n\t\t\tthis._height = height;\n\t\t}\n\n\t\tlet widthDelta = this.prevBounds ? width - this.prevBounds.width : width;\n\t\tlet heightDelta = this.prevBounds ? height - this.prevBounds.height : height;\n\n\t\tsize = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthDelta: widthDelta,\n\t\t\theightDelta: heightDelta,\n\t\t};\n\n\t\tthis.pane && this.pane.render();\n\n\t\trequestAnimationFrame(() => {\n\t\t\tlet mark;\n\t\t\tfor (let m in this.marks) {\n\t\t\t\tif (this.marks.hasOwnProperty(m)) {\n\t\t\t\t\tmark = this.marks[m];\n\t\t\t\t\tthis.placeMark(mark.element, mark.range);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.onResize(this, size);\n\n\t\tthis.emit(EVENTS.VIEWS.RESIZED, size);\n\n\t\tthis.prevBounds = size;\n\n\t\tthis.elementBounds = bounds(this.element);\n\n\t}\n\n\n\tload(contents) {\n\t\tvar loading = new defer();\n\t\tvar loaded = loading.promise;\n\n\t\tif(!this.iframe) {\n\t\t\tloading.reject(new Error(\"No Iframe Available\"));\n\t\t\treturn loaded;\n\t\t}\n\n\t\tthis.iframe.onload = function(event) {\n\n\t\t\tthis.onLoad(event, loading);\n\n\t\t}.bind(this);\n\n\t\tif (this.settings.method === \"blobUrl\") {\n\t\t\tthis.blobUrl = createBlobUrl(contents, \"application/xhtml+xml\");\n\t\t\tthis.iframe.src = this.blobUrl;\n\t\t\tthis.element.appendChild(this.iframe);\n\t\t} else if(this.settings.method === \"srcdoc\"){\n\t\t\tthis.iframe.srcdoc = contents;\n\t\t\tthis.element.appendChild(this.iframe);\n\t\t} else {\n\n\t\t\tthis.element.appendChild(this.iframe);\n\n\t\t\tthis.document = this.iframe.contentDocument;\n\n\t\t\tif(!this.document) {\n\t\t\t\tloading.reject(new Error(\"No Document Available\"));\n\t\t\t\treturn loaded;\n\t\t\t}\n\n\t\t\tthis.iframe.contentDocument.open();\n\t\t\t// For Cordova windows platform\n\t\t\tif(window.MSApp && MSApp.execUnsafeLocalFunction) {\n\t\t\t\tvar outerThis = this;\n\t\t\t\tMSApp.execUnsafeLocalFunction(function () {\n\t\t\t\t\touterThis.iframe.contentDocument.write(contents);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.iframe.contentDocument.write(contents);\n\t\t\t}\n\t\t\tthis.iframe.contentDocument.close();\n\n\t\t}\n\n\t\treturn loaded;\n\t}\n\n\tonLoad(event, promise) {\n\n\t\tthis.window = this.iframe.contentWindow;\n\t\tthis.document = this.iframe.contentDocument;\n\n\t\tthis.contents = new Contents(this.document, this.document.body, this.section.cfiBase, this.section.index);\n\n\t\tthis.rendering = false;\n\n\t\tvar link = this.document.querySelector(\"link[rel='canonical']\");\n\t\tif (link) {\n\t\t\tlink.setAttribute(\"href\", this.section.canonical);\n\t\t} else {\n\t\t\tlink = this.document.createElement(\"link\");\n\t\t\tlink.setAttribute(\"rel\", \"canonical\");\n\t\t\tlink.setAttribute(\"href\", this.section.canonical);\n\t\t\tthis.document.querySelector(\"head\").appendChild(link);\n\t\t}\n\n\t\tthis.contents.on(EVENTS.CONTENTS.EXPAND, () => {\n\t\t\tif(this.displayed && this.iframe) {\n\t\t\t\tthis.expand();\n\t\t\t\tif (this.contents) {\n\t\t\t\t\tthis.layout.format(this.contents);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.contents.on(EVENTS.CONTENTS.RESIZE, (e) => {\n\t\t\tif(this.displayed && this.iframe) {\n\t\t\t\tthis.expand();\n\t\t\t\tif (this.contents) {\n\t\t\t\t\tthis.layout.format(this.contents);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tpromise.resolve(this.contents);\n\t}\n\n\tsetLayout(layout) {\n\t\tthis.layout = layout;\n\n\t\tif (this.contents) {\n\t\t\tthis.layout.format(this.contents);\n\t\t\tthis.expand();\n\t\t}\n\t}\n\n\tsetAxis(axis) {\n\n\t\tthis.settings.axis = axis;\n\n\t\tif(axis == \"horizontal\"){\n\t\t\tthis.element.style.flex = \"none\";\n\t\t} else {\n\t\t\tthis.element.style.flex = \"initial\";\n\t\t}\n\n\t\tthis.size();\n\n\t}\n\n\tsetWritingMode(mode) {\n\t\t// this.element.style.writingMode = writingMode;\n\t\tthis.writingMode = mode;\n\t}\n\n\taddListeners() {\n\t\t//TODO: Add content listeners for expanding\n\t}\n\n\tremoveListeners(layoutFunc) {\n\t\t//TODO: remove content listeners for expanding\n\t}\n\n\tdisplay(request) {\n\t\tvar displayed = new defer();\n\n\t\tif (!this.displayed) {\n\n\t\t\tthis.render(request)\n\t\t\t\t.then(function () {\n\n\t\t\t\t\tthis.emit(EVENTS.VIEWS.DISPLAYED, this);\n\t\t\t\t\tthis.onDisplayed(this);\n\n\t\t\t\t\tthis.displayed = true;\n\t\t\t\t\tdisplayed.resolve(this);\n\n\t\t\t\t}.bind(this), function (err) {\n\t\t\t\t\tdisplayed.reject(err, this);\n\t\t\t\t});\n\n\t\t} else {\n\t\t\tdisplayed.resolve(this);\n\t\t}\n\n\n\t\treturn displayed.promise;\n\t}\n\n\tshow() {\n\n\t\tthis.element.style.visibility = \"visible\";\n\n\t\tif(this.iframe){\n\t\t\tthis.iframe.style.visibility = \"visible\";\n\n\t\t\t// Remind Safari to redraw the iframe\n\t\t\tthis.iframe.style.transform = \"translateZ(0)\";\n\t\t\tthis.iframe.offsetWidth;\n\t\t\tthis.iframe.style.transform = null;\n\t\t}\n\n\t\tthis.emit(EVENTS.VIEWS.SHOWN, this);\n\t}\n\n\thide() {\n\t\t// this.iframe.style.display = \"none\";\n\t\tthis.element.style.visibility = \"hidden\";\n\t\tthis.iframe.style.visibility = \"hidden\";\n\n\t\tthis.stopExpanding = true;\n\t\tthis.emit(EVENTS.VIEWS.HIDDEN, this);\n\t}\n\n\toffset() {\n\t\treturn {\n\t\t\ttop: this.element.offsetTop,\n\t\t\tleft: this.element.offsetLeft\n\t\t}\n\t}\n\n\twidth() {\n\t\treturn this._width;\n\t}\n\n\theight() {\n\t\treturn this._height;\n\t}\n\n\tposition() {\n\t\treturn this.element.getBoundingClientRect();\n\t}\n\n\tlocationOf(target) {\n\t\tvar parentPos = this.iframe.getBoundingClientRect();\n\t\tvar targetPos = this.contents.locationOf(target, this.settings.ignoreClass);\n\n\t\treturn {\n\t\t\t\"left\": targetPos.left,\n\t\t\t\"top\": targetPos.top\n\t\t};\n\t}\n\n\tonDisplayed(view) {\n\t\t// Stub, override with a custom functions\n\t}\n\n\tonResize(view, e) {\n\t\t// Stub, override with a custom functions\n\t}\n\n\tbounds(force) {\n\t\tif(force || !this.elementBounds) {\n\t\t\tthis.elementBounds = bounds(this.element);\n\t\t}\n\n\t\treturn this.elementBounds;\n\t}\n\n\thighlight(cfiRange, data={}, cb, className = \"epubjs-hl\", styles = {}) {\n\t\tif (!this.contents) {\n\t\t\treturn;\n\t\t}\n\t\tconst attributes = Object.assign({\"fill\": \"yellow\", \"fill-opacity\": \"0.3\", \"mix-blend-mode\": \"multiply\"}, styles);\n\t\tlet range = this.contents.range(cfiRange);\n\n\t\tlet emitter = () => {\n\t\t\tthis.emit(EVENTS.VIEWS.MARK_CLICKED, cfiRange, data);\n\t\t};\n\n\t\tdata[\"epubcfi\"] = cfiRange;\n\n\t\tif (!this.pane) {\n\t\t\tthis.pane = new Pane(this.iframe, this.element);\n\t\t}\n\n\t\tlet m = new Highlight(range, className, data, attributes);\n\t\tlet h = this.pane.addMark(m);\n\n\t\tthis.highlights[cfiRange] = { \"mark\": h, \"element\": h.element, \"listeners\": [emitter, cb] };\n\n\t\th.element.setAttribute(\"ref\", className);\n\t\th.element.addEventListener(\"click\", emitter);\n\t\th.element.addEventListener(\"touchstart\", emitter);\n\n\t\tif (cb) {\n\t\t\th.element.addEventListener(\"click\", cb);\n\t\t\th.element.addEventListener(\"touchstart\", cb);\n\t\t}\n\t\treturn h;\n\t}\n\n\tunderline(cfiRange, data={}, cb, className = \"epubjs-ul\", styles = {}) {\n\t\tif (!this.contents) {\n\t\t\treturn;\n\t\t}\n\t\tconst attributes = Object.assign({\"stroke\": \"black\", \"stroke-opacity\": \"0.3\", \"mix-blend-mode\": \"multiply\"}, styles);\n\t\tlet range = this.contents.range(cfiRange);\n\t\tlet emitter = () => {\n\t\t\tthis.emit(EVENTS.VIEWS.MARK_CLICKED, cfiRange, data);\n\t\t};\n\n\t\tdata[\"epubcfi\"] = cfiRange;\n\n\t\tif (!this.pane) {\n\t\t\tthis.pane = new Pane(this.iframe, this.element);\n\t\t}\n\n\t\tlet m = new Underline(range, className, data, attributes);\n\t\tlet h = this.pane.addMark(m);\n\n\t\tthis.underlines[cfiRange] = { \"mark\": h, \"element\": h.element, \"listeners\": [emitter, cb] };\n\n\t\th.element.setAttribute(\"ref\", className);\n\t\th.element.addEventListener(\"click\", emitter);\n\t\th.element.addEventListener(\"touchstart\", emitter);\n\n\t\tif (cb) {\n\t\t\th.element.addEventListener(\"click\", cb);\n\t\t\th.element.addEventListener(\"touchstart\", cb);\n\t\t}\n\t\treturn h;\n\t}\n\n\tmark(cfiRange, data={}, cb) {\n\t\tif (!this.contents) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (cfiRange in this.marks) {\n\t\t\tlet item = this.marks[cfiRange];\n\t\t\treturn item;\n\t\t}\n\n\t\tlet range = this.contents.range(cfiRange);\n\t\tif (!range) {\n\t\t\treturn;\n\t\t}\n\t\tlet container = range.commonAncestorContainer;\n\t\tlet parent = (container.nodeType === 1) ? container : container.parentNode;\n\n\t\tlet emitter = (e) => {\n\t\t\tthis.emit(EVENTS.VIEWS.MARK_CLICKED, cfiRange, data);\n\t\t};\n\n\t\tif (range.collapsed && container.nodeType === 1) {\n\t\t\trange = new Range();\n\t\t\trange.selectNodeContents(container);\n\t\t} else if (range.collapsed) { // Webkit doesn't like collapsed ranges\n\t\t\trange = new Range();\n\t\t\trange.selectNodeContents(parent);\n\t\t}\n\n\t\tlet mark = this.document.createElement(\"a\");\n\t\tmark.setAttribute(\"ref\", \"epubjs-mk\");\n\t\tmark.style.position = \"absolute\";\n\n\t\tmark.dataset[\"epubcfi\"] = cfiRange;\n\n\t\tif (data) {\n\t\t\tObject.keys(data).forEach((key) => {\n\t\t\t\tmark.dataset[key] = data[key];\n\t\t\t});\n\t\t}\n\n\t\tif (cb) {\n\t\t\tmark.addEventListener(\"click\", cb);\n\t\t\tmark.addEventListener(\"touchstart\", cb);\n\t\t}\n\n\t\tmark.addEventListener(\"click\", emitter);\n\t\tmark.addEventListener(\"touchstart\", emitter);\n\n\t\tthis.placeMark(mark, range);\n\n\t\tthis.element.appendChild(mark);\n\n\t\tthis.marks[cfiRange] = { \"element\": mark, \"range\": range, \"listeners\": [emitter, cb] };\n\n\t\treturn parent;\n\t}\n\n\tplaceMark(element, range) {\n\t\tlet top, right, left;\n\n\t\tif(this.layout.name === \"pre-paginated\" ||\n\t\t\tthis.settings.axis !== \"horizontal\") {\n\t\t\tlet pos = range.getBoundingClientRect();\n\t\t\ttop = pos.top;\n\t\t\tright = pos.right;\n\t\t} else {\n\t\t\t// Element might break columns, so find the left most element\n\t\t\tlet rects = range.getClientRects();\n\n\t\t\tlet rect;\n\t\t\tfor (var i = 0; i != rects.length; i++) {\n\t\t\t\trect = rects[i];\n\t\t\t\tif (!left || rect.left < left) {\n\t\t\t\t\tleft = rect.left;\n\t\t\t\t\t// right = rect.right;\n\t\t\t\t\tright = Math.ceil(left / this.layout.props.pageWidth) * this.layout.props.pageWidth - (this.layout.gap / 2);\n\t\t\t\t\ttop = rect.top;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\telement.style.top = `${top}px`;\n\t\telement.style.left = `${right}px`;\n\t}\n\n\tunhighlight(cfiRange) {\n\t\tlet item;\n\t\tif (cfiRange in this.highlights) {\n\t\t\titem = this.highlights[cfiRange];\n\n\t\t\tthis.pane.removeMark(item.mark);\n\t\t\titem.listeners.forEach((l) => {\n\t\t\t\tif (l) {\n\t\t\t\t\titem.element.removeEventListener(\"click\", l);\n\t\t\t\t\titem.element.removeEventListener(\"touchstart\", l);\n\t\t\t\t};\n\t\t\t});\n\t\t\tdelete this.highlights[cfiRange];\n\t\t}\n\t}\n\n\tununderline(cfiRange) {\n\t\tlet item;\n\t\tif (cfiRange in this.underlines) {\n\t\t\titem = this.underlines[cfiRange];\n\t\t\tthis.pane.removeMark(item.mark);\n\t\t\titem.listeners.forEach((l) => {\n\t\t\t\tif (l) {\n\t\t\t\t\titem.element.removeEventListener(\"click\", l);\n\t\t\t\t\titem.element.removeEventListener(\"touchstart\", l);\n\t\t\t\t};\n\t\t\t});\n\t\t\tdelete this.underlines[cfiRange];\n\t\t}\n\t}\n\n\tunmark(cfiRange) {\n\t\tlet item;\n\t\tif (cfiRange in this.marks) {\n\t\t\titem = this.marks[cfiRange];\n\t\t\tthis.element.removeChild(item.element);\n\t\t\titem.listeners.forEach((l) => {\n\t\t\t\tif (l) {\n\t\t\t\t\titem.element.removeEventListener(\"click\", l);\n\t\t\t\t\titem.element.removeEventListener(\"touchstart\", l);\n\t\t\t\t};\n\t\t\t});\n\t\t\tdelete this.marks[cfiRange];\n\t\t}\n\t}\n\n\tdestroy() {\n\n\t\tfor (let cfiRange in this.highlights) {\n\t\t\tthis.unhighlight(cfiRange);\n\t\t}\n\n\t\tfor (let cfiRange in this.underlines) {\n\t\t\tthis.ununderline(cfiRange);\n\t\t}\n\n\t\tfor (let cfiRange in this.marks) {\n\t\t\tthis.unmark(cfiRange);\n\t\t}\n\n\t\tif (this.blobUrl) {\n\t\t\trevokeBlobUrl(this.blobUrl);\n\t\t}\n\n\t\tif(this.displayed){\n\t\t\tthis.displayed = false;\n\n\t\t\tthis.removeListeners();\n\t\t\tthis.contents.destroy();\n\n\t\t\tthis.stopExpanding = true;\n\t\t\tthis.element.removeChild(this.iframe);\n\n\t\t\tif (this.pane) {\n\t\t\t\tthis.pane.element.remove();\n\t\t\t\tthis.pane = undefined;\n\t\t\t}\n\n\t\t\tthis.iframe = undefined;\n\t\t\tthis.contents = undefined;\n\n\t\t\tthis._textWidth = null;\n\t\t\tthis._textHeight = null;\n\t\t\tthis._width = null;\n\t\t\tthis._height = null;\n\t\t}\n\n\t\t// this.element.style.height = \"0px\";\n\t\t// this.element.style.width = \"0px\";\n\t}\n}\n\nEventEmitter(IframeView.prototype);\n\nexport default IframeView;\n","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n var f = basename(path);\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","var NAMESPACE = require(\"./conventions\").NAMESPACE;\n\n//[4] \tNameStartChar\t ::= \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n//[4a] \tNameChar\t ::= \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n//[5] \tName\t ::= \tNameStartChar (NameChar)*\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring\nvar S_ATTR_SPACE=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7;//closed el\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @param {string} message\n * @param {any?} locator Optional, can provide details about the location in the source\n * @constructor\n */\nfunction ParseError(message, locator) {\n\tthis.message = message\n\tthis.locator = locator\n\tif(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nParseError.prototype = new Error();\nParseError.prototype.name = ParseError.name\n\nfunction XMLReader(){\n\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif(k in entityMap){\n\t\t\treturn entityMap[k];\n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tif(end>start){\n\t\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\tlocator&&position(start);\n\t\t\tdomBuilder.characters(xt,0,end-start);\n\t\t\tstart = end\n\t\t}\n\t}\n\tfunction position(p,m){\n\t\twhile(p>=lineEnd && (m = linePattern.exec(source))){\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t\t//console.log('line++:',locator,startPos,endPos)\n\t\t}\n\t\tlocator.columnNumber = p-lineStart+1;\n\t}\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\ttry{\n\t\t\tvar tagStart = source.indexOf('<',start);\n\t\t\tif(tagStart<0){\n\t\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t \t\t\tvar text = doc.createTextNode(source.substr(start));\n\t \t\t\tdoc.appendChild(text);\n\t \t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(tagStart>start){\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch(source.charAt(tagStart+1)){\n\t\t\tcase '/':\n\t\t\t\tvar end = source.indexOf('>',tagStart+3);\n\t\t\t\tvar tagName = source.substring(tagStart + 2, end).replace(/[ \\t\\n\\r]+$/g, '');\n\t\t\t\tvar config = parseStack.pop();\n\t\t\t\tif(end<0){\n\n\t \t\ttagName = source.substring(tagStart+2).replace(/[\\s<].*/,'');\n\t \t\terrorHandler.error(\"end tag name: \"+tagName+' is not complete:'+config.tagName);\n\t \t\tend = tagStart+1+tagName.length;\n\t \t}else if(tagName.match(/\\s\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseInstruction(source,tagStart,domBuilder);\n\t\t\t\tbreak;\n\t\t\tcase '!':// start){\n\t\t\tstart = end;\n\t\t}else{\n\t\t\t//TODO: 这里有可能sax回退,有位置错误风险\n\t\t\tappendText(Math.max(tagStart,start)+1);\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\n */\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\n\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (el.attributeNames.hasOwnProperty(qname)) {\n\t\t\terrorHandler.fatalError('Attribute ' + qname + ' redefined')\n\t\t}\n\t\tel.addValue(qname, value, startIndex)\n\t}\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_SPACE){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t){//equal\n\t\t\t\tif(s === S_ATTR){\n\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"')\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t}\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\t\taddAttribute(attrName, value, start-1);\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t}else{\n\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\t//console.log(attrName,value,start,p)\n\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t//console.dir(el)\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_ATTR_END\n\t\t\t}else{\n\t\t\t\t//fatalError: no equal before\n\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\ts =S_TAG_CLOSE;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\tcase S_ATTR:\n\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tel.closed = true;\n\t\t\t\tbreak;\n\t\t\t//case S_EQ:\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\") // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\t\tif(s == S_TAG){\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_ATTR_NOQUOT_VALUE://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_SPACE:\n\t\t\t\tif(s === S_ATTR_SPACE){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!');\n\t\t\t\t\taddAttribute(attrName, value.replace(/&#?\\w+;/g,entityReplacer), start)\n\t\t\t\t}else{\n\t\t\t\t\tif(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(value, value, start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\n\t\t\treturn p;\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tvar value = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t//case S_EQ:\n\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t//\tvoid();break;\n\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t//ignore warning\n\t\t\t\t}\n\t\t\t}else{//not space\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\tswitch(s){\n\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tvar tagName = el.tagName;\n\t\t\t\t\tif (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead2!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}//end outer switch\n\t\t//console.log('p++',p)\n\t\tp++;\n\t}\n}\n/**\n * @return true if has new namespace define\n */\nfunction appendElement(el,domBuilder,currentNSMap){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName ;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t//console.log(currentNSMap,0)\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t\t//console.log(currentNSMap,1)\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value)\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix || '']\n\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart = source.indexOf('',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\n\t\t\t\t\t//lexHandler.startCDATA();\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\t//lexHandler.endCDATA();\n\t\t\t\t\treturn elEndStart;\n\t\t\t\t//}\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t//}\n\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\t//if(tagName in closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\t//console.log(tagName)\n\t\tpos = source.lastIndexOf('')\n\t\tif(pos',start+4);\n\t\t\t//append comment source.substring(4,end)//\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM ', sysid, '>');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i 0) {\n\t\ttype = \"default\";\n\t} else {\n\t\tif (typeof Element !== 'undefined' && Element.prototype.scrollIntoView) {\n\t\t\tdefiner.children[0].children[1].scrollIntoView();\n\t\t\tif (definer.scrollLeft < 0) {\n\t\t\t\ttype = \"negative\";\n\t\t\t}\n\t\t} else {\n\t\t\tdefiner.scrollLeft = 1;\n\t\t\tif (definer.scrollLeft === 0) {\n\t\t\t\ttype = \"negative\";\n\t\t\t}\n\t\t}\n\t}\n\n\tdocument.body.removeChild(definer);\n\treturn type;\n}\n\nexport function createDefiner() {\n\tvar definer = document.createElement('div');\n\tdefiner.dir=\"rtl\";\n\n\tdefiner.style.position = \"fixed\";\n\tdefiner.style.width = \"1px\";\n\tdefiner.style.height = \"1px\";\n\tdefiner.style.top = \"0px\";\n\tdefiner.style.left = \"0px\";\n\tdefiner.style.overflow = \"hidden\";\n\n\tvar innerDiv = document.createElement('div');\n\tinnerDiv.style.width = \"2px\";\n\n\tvar spanA = document.createElement('span');\n\tspanA.style.width = \"1px\";\n\tspanA.style.display = \"inline-block\";\n\n\tvar spanB = document.createElement('span');\n\tspanB.style.width = \"1px\";\n\tspanB.style.display = \"inline-block\";\n\n\tinnerDiv.appendChild(spanA);\n\tinnerDiv.appendChild(spanB);\n\tdefiner.appendChild(innerDiv);\n\n\treturn definer;\n}\n","import {uuid, isNumber, isElement, windowBounds, extend} from \"../../utils/core\";\nimport throttle from 'lodash/throttle'\n\nclass Stage {\n\tconstructor(_options) {\n\t\tthis.settings = _options || {};\n\t\tthis.id = \"epubjs-container-\" + uuid();\n\n\t\tthis.container = this.create(this.settings);\n\n\t\tif(this.settings.hidden) {\n\t\t\tthis.wrapper = this.wrap(this.container);\n\t\t}\n\n\t}\n\n\t/*\n\t* Creates an element to render to.\n\t* Resizes to passed width and height or to the elements size\n\t*/\n\tcreate(options){\n\t\tlet height = options.height;// !== false ? options.height : \"100%\";\n\t\tlet width = options.width;// !== false ? options.width : \"100%\";\n\t\tlet overflow = options.overflow || false;\n\t\tlet axis = options.axis || \"vertical\";\n\t\tlet direction = options.direction;\n\n\t\textend(this.settings, options);\n\n\t\tif(options.height && isNumber(options.height)) {\n\t\t\theight = options.height + \"px\";\n\t\t}\n\n\t\tif(options.width && isNumber(options.width)) {\n\t\t\twidth = options.width + \"px\";\n\t\t}\n\n\t\t// Create new container element\n\t\tlet container = document.createElement(\"div\");\n\n\t\tcontainer.id = this.id;\n\t\tcontainer.classList.add(\"epub-container\");\n\n\t\t// Style Element\n\t\t// container.style.fontSize = \"0\";\n\t\tcontainer.style.wordSpacing = \"0\";\n\t\tcontainer.style.lineHeight = \"0\";\n\t\tcontainer.style.verticalAlign = \"top\";\n\t\tcontainer.style.position = \"relative\";\n\n\t\tif(axis === \"horizontal\") {\n\t\t\t// container.style.whiteSpace = \"nowrap\";\n\t\t\tcontainer.style.display = \"flex\";\n\t\t\tcontainer.style.flexDirection = \"row\";\n\t\t\tcontainer.style.flexWrap = \"nowrap\";\n\t\t}\n\n\t\tif(width){\n\t\t\tcontainer.style.width = width;\n\t\t}\n\n\t\tif(height){\n\t\t\tcontainer.style.height = height;\n\t\t}\n\n\t\tif (overflow) {\n\t\t\tif (overflow === \"scroll\" && axis === \"vertical\") {\n\t\t\t\tcontainer.style[\"overflow-y\"] = overflow;\n\t\t\t\tcontainer.style[\"overflow-x\"] = \"hidden\";\n\t\t\t} else if (overflow === \"scroll\" && axis === \"horizontal\") {\n\t\t\t\tcontainer.style[\"overflow-y\"] = \"hidden\";\n\t\t\t\tcontainer.style[\"overflow-x\"] = overflow;\n\t\t\t} else {\n\t\t\t\tcontainer.style[\"overflow\"] = overflow;\n\t\t\t}\n\t\t}\n\n\t\tif (direction) {\n\t\t\tcontainer.dir = direction;\n\t\t\tcontainer.style[\"direction\"] = direction;\n\t\t}\n\n\t\tif (direction && this.settings.fullsize) {\n\t\t\tdocument.body.style[\"direction\"] = direction;\n\t\t}\n\n\t\treturn container;\n\t}\n\n\twrap(container) {\n\t\tvar wrapper = document.createElement(\"div\");\n\n\t\twrapper.style.visibility = \"hidden\";\n\t\twrapper.style.overflow = \"hidden\";\n\t\twrapper.style.width = \"0\";\n\t\twrapper.style.height = \"0\";\n\n\t\twrapper.appendChild(container);\n\t\treturn wrapper;\n\t}\n\n\n\tgetElement(_element){\n\t\tvar element;\n\n\t\tif(isElement(_element)) {\n\t\t\telement = _element;\n\t\t} else if (typeof _element === \"string\") {\n\t\t\telement = document.getElementById(_element);\n\t\t}\n\n\t\tif(!element){\n\t\t\tthrow new Error(\"Not an Element\");\n\t\t}\n\n\t\treturn element;\n\t}\n\n\tattachTo(what){\n\n\t\tvar element = this.getElement(what);\n\t\tvar base;\n\n\t\tif(!element){\n\t\t\treturn;\n\t\t}\n\n\t\tif(this.settings.hidden) {\n\t\t\tbase = this.wrapper;\n\t\t} else {\n\t\t\tbase = this.container;\n\t\t}\n\n\t\telement.appendChild(base);\n\n\t\tthis.element = element;\n\n\t\treturn element;\n\n\t}\n\n\tgetContainer() {\n\t\treturn this.container;\n\t}\n\n\tonResize(func){\n\t\t// Only listen to window for resize event if width and height are not fixed.\n\t\t// This applies if it is set to a percent or auto.\n\t\tif(!isNumber(this.settings.width) ||\n\t\t\t !isNumber(this.settings.height) ) {\n\t\t\tthis.resizeFunc = throttle(func, 50);\n\t\t\twindow.addEventListener(\"resize\", this.resizeFunc, false);\n\t\t}\n\n\t}\n\n\tonOrientationChange(func){\n\t\tthis.orientationChangeFunc = func;\n\t\twindow.addEventListener(\"orientationchange\", this.orientationChangeFunc, false);\n\t}\n\n\tsize(width, height){\n\t\tvar bounds;\n\t\tlet _width = width || this.settings.width;\n\t\tlet _height = height || this.settings.height;\n\n\t\t// If width or height are set to false, inherit them from containing element\n\t\tif(width === null) {\n\t\t\tbounds = this.element.getBoundingClientRect();\n\n\t\t\tif(bounds.width) {\n\t\t\t\twidth = Math.floor(bounds.width);\n\t\t\t\tthis.container.style.width = width + \"px\";\n\t\t\t}\n\t\t} else {\n\t\t\tif (isNumber(width)) {\n\t\t\t\tthis.container.style.width = width + \"px\";\n\t\t\t} else {\n\t\t\t\tthis.container.style.width = width;\n\t\t\t}\n\t\t}\n\n\t\tif(height === null) {\n\t\t\tbounds = bounds || this.element.getBoundingClientRect();\n\n\t\t\tif(bounds.height) {\n\t\t\t\theight = bounds.height;\n\t\t\t\tthis.container.style.height = height + \"px\";\n\t\t\t}\n\n\t\t} else {\n\t\t\tif (isNumber(height)) {\n\t\t\t\tthis.container.style.height = height + \"px\";\n\t\t\t} else {\n\t\t\t\tthis.container.style.height = height;\n\t\t\t}\n\t\t}\n\n\t\tif(!isNumber(width)) {\n\t\t\twidth = this.container.clientWidth;\n\t\t}\n\n\t\tif(!isNumber(height)) {\n\t\t\theight = this.container.clientHeight;\n\t\t}\n\n\t\tthis.containerStyles = window.getComputedStyle(this.container);\n\n\t\tthis.containerPadding = {\n\t\t\tleft: parseFloat(this.containerStyles[\"padding-left\"]) || 0,\n\t\t\tright: parseFloat(this.containerStyles[\"padding-right\"]) || 0,\n\t\t\ttop: parseFloat(this.containerStyles[\"padding-top\"]) || 0,\n\t\t\tbottom: parseFloat(this.containerStyles[\"padding-bottom\"]) || 0\n\t\t};\n\n\t\t// Bounds not set, get them from window\n\t\tlet _windowBounds = windowBounds();\n\t\tlet bodyStyles = window.getComputedStyle(document.body);\n\t\tlet bodyPadding = {\n\t\t\tleft: parseFloat(bodyStyles[\"padding-left\"]) || 0,\n\t\t\tright: parseFloat(bodyStyles[\"padding-right\"]) || 0,\n\t\t\ttop: parseFloat(bodyStyles[\"padding-top\"]) || 0,\n\t\t\tbottom: parseFloat(bodyStyles[\"padding-bottom\"]) || 0\n\t\t};\n\n\t\tif (!_width) {\n\t\t\twidth = _windowBounds.width -\n\t\t\t\t\t\t\t\tbodyPadding.left -\n\t\t\t\t\t\t\t\tbodyPadding.right;\n\t\t}\n\n\t\tif ((this.settings.fullsize && !_height) || !_height) {\n\t\t\theight = _windowBounds.height -\n\t\t\t\t\t\t\t\tbodyPadding.top -\n\t\t\t\t\t\t\t\tbodyPadding.bottom;\n\t\t}\n\n\t\treturn {\n\t\t\twidth: width -\n\t\t\t\t\t\t\tthis.containerPadding.left -\n\t\t\t\t\t\t\tthis.containerPadding.right,\n\t\t\theight: height -\n\t\t\t\t\t\t\tthis.containerPadding.top -\n\t\t\t\t\t\t\tthis.containerPadding.bottom\n\t\t};\n\n\t}\n\n\tbounds(){\n\t\tlet box;\n\t\tif (this.container.style.overflow !== \"visible\") {\n\t\t\tbox = this.container && this.container.getBoundingClientRect();\n\t\t}\n\n\t\tif(!box || !box.width || !box.height) {\n\t\t\treturn windowBounds();\n\t\t} else {\n\t\t\treturn box;\n\t\t}\n\n\t}\n\n\tgetSheet(){\n\t\tvar style = document.createElement(\"style\");\n\n\t\t// WebKit hack --> https://davidwalsh.name/add-rules-stylesheets\n\t\tstyle.appendChild(document.createTextNode(\"\"));\n\n\t\tdocument.head.appendChild(style);\n\n\t\treturn style.sheet;\n\t}\n\n\taddStyleRules(selector, rulesArray){\n\t\tvar scope = \"#\" + this.id + \" \";\n\t\tvar rules = \"\";\n\n\t\tif(!this.sheet){\n\t\t\tthis.sheet = this.getSheet();\n\t\t}\n\n\t\trulesArray.forEach(function(set) {\n\t\t\tfor (var prop in set) {\n\t\t\t\tif(set.hasOwnProperty(prop)) {\n\t\t\t\t\trules += prop + \":\" + set[prop] + \";\";\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.sheet.insertRule(scope + selector + \" {\" + rules + \"}\", 0);\n\t}\n\n\taxis(axis) {\n\t\tif(axis === \"horizontal\") {\n\t\t\tthis.container.style.display = \"flex\";\n\t\t\tthis.container.style.flexDirection = \"row\";\n\t\t\tthis.container.style.flexWrap = \"nowrap\";\n\t\t} else {\n\t\t\tthis.container.style.display = \"block\";\n\t\t}\n\t\tthis.settings.axis = axis;\n\t}\n\n\t// orientation(orientation) {\n\t// \tif (orientation === \"landscape\") {\n\t//\n\t// \t} else {\n\t//\n\t// \t}\n\t//\n\t// \tthis.orientation = orientation;\n\t// }\n\n\tdirection(dir) {\n\t\tif (this.container) {\n\t\t\tthis.container.dir = dir;\n\t\t\tthis.container.style[\"direction\"] = dir;\n\t\t}\n\n\t\tif (this.settings.fullsize) {\n\t\t\tdocument.body.style[\"direction\"] = dir;\n\t\t}\n\t\tthis.settings.dir = dir;\n\t}\n\n\toverflow(overflow) {\n\t\tif (this.container) {\n\t\t\tif (overflow === \"scroll\" && this.settings.axis === \"vertical\") {\n\t\t\t\tthis.container.style[\"overflow-y\"] = overflow;\n\t\t\t\tthis.container.style[\"overflow-x\"] = \"hidden\";\n\t\t\t} else if (overflow === \"scroll\" && this.settings.axis === \"horizontal\") {\n\t\t\t\tthis.container.style[\"overflow-y\"] = \"hidden\";\n\t\t\t\tthis.container.style[\"overflow-x\"] = overflow;\n\t\t\t} else {\n\t\t\t\tthis.container.style[\"overflow\"] = overflow;\n\t\t\t}\n\t\t}\n\t\tthis.settings.overflow = overflow;\n\t}\n\n\tdestroy() {\n\t\tvar base;\n\n\t\tif (this.element) {\n\n\t\t\tif(this.settings.hidden) {\n\t\t\t\tbase = this.wrapper;\n\t\t\t} else {\n\t\t\t\tbase = this.container;\n\t\t\t}\n\n\t\t\tif(this.element.contains(this.container)) {\n\t\t\t\tthis.element.removeChild(this.container);\n\t\t\t}\n\n\t\t\twindow.removeEventListener(\"resize\", this.resizeFunc);\n\t\t\twindow.removeEventListener(\"orientationChange\", this.orientationChangeFunc);\n\n\t\t}\n\t}\n}\n\nexport default Stage;\n","class Views {\n\tconstructor(container) {\n\t\tthis.container = container;\n\t\tthis._views = [];\n\t\tthis.length = 0;\n\t\tthis.hidden = false;\n\t}\n\n\tall() {\n\t\treturn this._views;\n\t}\n\n\tfirst() {\n\t\treturn this._views[0];\n\t}\n\n\tlast() {\n\t\treturn this._views[this._views.length-1];\n\t}\n\n\tindexOf(view) {\n\t\treturn this._views.indexOf(view);\n\t}\n\n\tslice() {\n\t\treturn this._views.slice.apply(this._views, arguments);\n\t}\n\n\tget(i) {\n\t\treturn this._views[i];\n\t}\n\n\tappend(view){\n\t\tthis._views.push(view);\n\t\tif(this.container){\n\t\t\tthis.container.appendChild(view.element);\n\t\t}\n\t\tthis.length++;\n\t\treturn view;\n\t}\n\n\tprepend(view){\n\t\tthis._views.unshift(view);\n\t\tif(this.container){\n\t\t\tthis.container.insertBefore(view.element, this.container.firstChild);\n\t\t}\n\t\tthis.length++;\n\t\treturn view;\n\t}\n\n\tinsert(view, index) {\n\t\tthis._views.splice(index, 0, view);\n\n\t\tif(this.container){\n\t\t\tif(index < this.container.children.length){\n\t\t\t\tthis.container.insertBefore(view.element, this.container.children[index]);\n\t\t\t} else {\n\t\t\t\tthis.container.appendChild(view.element);\n\t\t\t}\n\t\t}\n\n\t\tthis.length++;\n\t\treturn view;\n\t}\n\n\tremove(view) {\n\t\tvar index = this._views.indexOf(view);\n\n\t\tif(index > -1) {\n\t\t\tthis._views.splice(index, 1);\n\t\t}\n\n\n\t\tthis.destroy(view);\n\n\t\tthis.length--;\n\t}\n\n\tdestroy(view) {\n\t\tif(view.displayed){\n\t\t\tview.destroy();\n\t\t}\n\t\t\n\t\tif(this.container){\n\t\t\t this.container.removeChild(view.element);\n\t\t}\n\t\tview = null;\n\t}\n\n\t// Iterators\n\n\tforEach() {\n\t\treturn this._views.forEach.apply(this._views, arguments);\n\t}\n\n\tclear(){\n\t\t// Remove all views\n\t\tvar view;\n\t\tvar len = this.length;\n\n\t\tif(!this.length) return;\n\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tview = this._views[i];\n\t\t\tthis.destroy(view);\n\t\t}\n\n\t\tthis._views = [];\n\t\tthis.length = 0;\n\t}\n\n\tfind(section){\n\n\t\tvar view;\n\t\tvar len = this.length;\n\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tview = this._views[i];\n\t\t\tif(view.displayed && view.section.index == section.index) {\n\t\t\t\treturn view;\n\t\t\t}\n\t\t}\n\n\t}\n\n\tdisplayed(){\n\t\tvar displayed = [];\n\t\tvar view;\n\t\tvar len = this.length;\n\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tview = this._views[i];\n\t\t\tif(view.displayed){\n\t\t\t\tdisplayed.push(view);\n\t\t\t}\n\t\t}\n\t\treturn displayed;\n\t}\n\n\tshow(){\n\t\tvar view;\n\t\tvar len = this.length;\n\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tview = this._views[i];\n\t\t\tif(view.displayed){\n\t\t\t\tview.show();\n\t\t\t}\n\t\t}\n\t\tthis.hidden = false;\n\t}\n\n\thide(){\n\t\tvar view;\n\t\tvar len = this.length;\n\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tview = this._views[i];\n\t\t\tif(view.displayed){\n\t\t\t\tview.hide();\n\t\t\t}\n\t\t}\n\t\tthis.hidden = true;\n\t}\n}\n\nexport default Views;\n","import EventEmitter from \"event-emitter\";\nimport {extend, defer, windowBounds, isNumber} from \"../../utils/core\";\nimport scrollType from \"../../utils/scrolltype\";\nimport Mapping from \"../../mapping\";\nimport Queue from \"../../utils/queue\";\nimport Stage from \"../helpers/stage\";\nimport Views from \"../helpers/views\";\nimport { EVENTS } from \"../../utils/constants\";\n\nclass DefaultViewManager {\n\tconstructor(options) {\n\n\t\tthis.name = \"default\";\n\t\tthis.optsSettings = options.settings;\n\t\tthis.View = options.view;\n\t\tthis.request = options.request;\n\t\tthis.renditionQueue = options.queue;\n\t\tthis.q = new Queue(this);\n\n\t\tthis.settings = extend(this.settings || {}, {\n\t\t\tinfinite: true,\n\t\t\thidden: false,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t\taxis: undefined,\n\t\t\twritingMode: undefined,\n\t\t\tflow: \"scrolled\",\n\t\t\tignoreClass: \"\",\n\t\t\tfullsize: undefined,\n\t\t\tallowScriptedContent: false,\n\t\t\tallowPopups: false\n\t\t});\n\n\t\textend(this.settings, options.settings || {});\n\n\t\tthis.viewSettings = {\n\t\t\tignoreClass: this.settings.ignoreClass,\n\t\t\taxis: this.settings.axis,\n\t\t\tflow: this.settings.flow,\n\t\t\tlayout: this.layout,\n\t\t\tmethod: this.settings.method, // srcdoc, blobUrl, write\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\tforceEvenPages: true,\n\t\t\tallowScriptedContent: this.settings.allowScriptedContent,\n\t\t\tallowPopups: this.settings.allowPopups\n\t\t};\n\n\t\tthis.rendered = false;\n\n\t}\n\n\trender(element, size){\n\t\tlet tag = element.tagName;\n\n\t\tif (typeof this.settings.fullsize === \"undefined\" &&\n\t\t\t\ttag && (tag.toLowerCase() == \"body\" ||\n\t\t\t\ttag.toLowerCase() == \"html\")) {\n\t\t\t\tthis.settings.fullsize = true;\n\t\t}\n\n\t\tif (this.settings.fullsize) {\n\t\t\tthis.settings.overflow = \"visible\";\n\t\t\tthis.overflow = this.settings.overflow;\n\t\t}\n\n\t\tthis.settings.size = size;\n\n\t\tthis.settings.rtlScrollType = scrollType();\n\n\t\t// Save the stage\n\t\tthis.stage = new Stage({\n\t\t\twidth: size.width,\n\t\t\theight: size.height,\n\t\t\toverflow: this.overflow,\n\t\t\thidden: this.settings.hidden,\n\t\t\taxis: this.settings.axis,\n\t\t\tfullsize: this.settings.fullsize,\n\t\t\tdirection: this.settings.direction\n\t\t});\n\n\t\tthis.stage.attachTo(element);\n\n\t\t// Get this stage container div\n\t\tthis.container = this.stage.getContainer();\n\n\t\t// Views array methods\n\t\tthis.views = new Views(this.container);\n\n\t\t// Calculate Stage Size\n\t\tthis._bounds = this.bounds();\n\t\tthis._stageSize = this.stage.size();\n\n\t\t// Set the dimensions for views\n\t\tthis.viewSettings.width = this._stageSize.width;\n\t\tthis.viewSettings.height = this._stageSize.height;\n\n\t\t// Function to handle a resize event.\n\t\t// Will only attach if width and height are both fixed.\n\t\tthis.stage.onResize(this.onResized.bind(this));\n\n\t\tthis.stage.onOrientationChange(this.onOrientationChange.bind(this));\n\n\t\t// Add Event Listeners\n\t\tthis.addEventListeners();\n\n\t\t// Add Layout method\n\t\t// this.applyLayoutMethod();\n\t\tif (this.layout) {\n\t\t\tthis.updateLayout();\n\t\t}\n\n\t\tthis.rendered = true;\n\n\t}\n\n\taddEventListeners(){\n\t\tvar scroller;\n\n\t\twindow.addEventListener(\"unload\", function(e){\n\t\t\tthis.destroy();\n\t\t}.bind(this));\n\n\t\tif(!this.settings.fullsize) {\n\t\t\tscroller = this.container;\n\t\t} else {\n\t\t\tscroller = window;\n\t\t}\n\n\t\tthis._onScroll = this.onScroll.bind(this);\n\t\tscroller.addEventListener(\"scroll\", this._onScroll);\n\t}\n\n\tremoveEventListeners(){\n\t\tvar scroller;\n\n\t\tif(!this.settings.fullsize) {\n\t\t\tscroller = this.container;\n\t\t} else {\n\t\t\tscroller = window;\n\t\t}\n\n\t\tscroller.removeEventListener(\"scroll\", this._onScroll);\n\t\tthis._onScroll = undefined;\n\t}\n\n\tdestroy(){\n\t\tclearTimeout(this.orientationTimeout);\n\t\tclearTimeout(this.resizeTimeout);\n\t\tclearTimeout(this.afterScrolled);\n\n\t\tthis.clear();\n\n\t\tthis.removeEventListeners();\n\n\t\tthis.stage.destroy();\n\n\t\tthis.rendered = false;\n\n\t\t/*\n\n\t\t\tclearTimeout(this.trimTimeout);\n\t\t\tif(this.settings.hidden) {\n\t\t\t\tthis.element.removeChild(this.wrapper);\n\t\t\t} else {\n\t\t\t\tthis.element.removeChild(this.container);\n\t\t\t}\n\t\t*/\n\t}\n\n\tonOrientationChange(e) {\n\t\tlet {orientation} = window;\n\n\t\tif(this.optsSettings.resizeOnOrientationChange) {\n\t\t\tthis.resize();\n\t\t}\n\n\t\t// Per ampproject:\n\t\t// In IOS 10.3, the measured size of an element is incorrect if the\n\t\t// element size depends on window size directly and the measurement\n\t\t// happens in window.resize event. Adding a timeout for correct\n\t\t// measurement. See https://github.com/ampproject/amphtml/issues/8479\n\t\tclearTimeout(this.orientationTimeout);\n\t\tthis.orientationTimeout = setTimeout(function(){\n\t\t\tthis.orientationTimeout = undefined;\n\n\t\t\tif(this.optsSettings.resizeOnOrientationChange) {\n\t\t\t\tthis.resize();\n\t\t\t}\n\n\t\t\tthis.emit(EVENTS.MANAGERS.ORIENTATION_CHANGE, orientation);\n\t\t}.bind(this), 500);\n\n\t}\n\n\tonResized(e) {\n\t\tthis.resize();\n\t}\n\n\tresize(width, height, epubcfi){\n\t\tlet stageSize = this.stage.size(width, height);\n\n\t\t// For Safari, wait for orientation to catch up\n\t\t// if the window is a square\n\t\tthis.winBounds = windowBounds();\n\t\tif (this.orientationTimeout &&\n\t\t\t\tthis.winBounds.width === this.winBounds.height) {\n\t\t\t// reset the stage size for next resize\n\t\t\tthis._stageSize = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._stageSize &&\n\t\t\t\tthis._stageSize.width === stageSize.width &&\n\t\t\t\tthis._stageSize.height === stageSize.height ) {\n\t\t\t// Size is the same, no need to resize\n\t\t\treturn;\n\t\t}\n\n\t\tthis._stageSize = stageSize;\n\n\t\tthis._bounds = this.bounds();\n\n\t\t// Clear current views\n\t\tthis.clear();\n\n\t\t// Update for new views\n\t\tthis.viewSettings.width = this._stageSize.width;\n\t\tthis.viewSettings.height = this._stageSize.height;\n\n\t\tthis.updateLayout();\n\n\t\tthis.emit(EVENTS.MANAGERS.RESIZED, {\n\t\t\twidth: this._stageSize.width,\n\t\t\theight: this._stageSize.height\n\t\t}, epubcfi);\n\t}\n\n\tcreateView(section, forceRight) {\n\t\treturn new this.View(section, extend(this.viewSettings, { forceRight }) );\n\t}\n\n\thandleNextPrePaginated(forceRight, section, action) {\n\t\tlet next;\n\n\t\tif (this.layout.name === \"pre-paginated\" && this.layout.divisor > 1) {\n\t\t\tif (forceRight || section.index === 0) {\n\t\t\t\t// First page (cover) should stand alone for pre-paginated books\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnext = section.next();\n\t\t\tif (next && !next.properties.includes(\"page-spread-left\")) {\n\t\t\t\treturn action.call(this, next);\n\t\t\t}\n\t\t}\n\t}\n\n\tdisplay(section, target){\n\n\t\tvar displaying = new defer();\n\t\tvar displayed = displaying.promise;\n\n\t\t// Check if moving to target is needed\n\t\tif (target === section.href || isNumber(target)) {\n\t\t\ttarget = undefined;\n\t\t}\n\n\t\t// Check to make sure the section we want isn't already shown\n\t\tvar visible = this.views.find(section);\n\n\t\t// View is already shown, just move to correct location in view\n\t\tif(visible && section && this.layout.name !== \"pre-paginated\") {\n\t\t\tlet offset = visible.offset();\n\n\t\t\tif (this.settings.direction === \"ltr\") {\n\t\t\t\tthis.scrollTo(offset.left, offset.top, true);\n\t\t\t} else {\n\t\t\t\tlet width = visible.width();\n\t\t\t\tthis.scrollTo(offset.left + width, offset.top, true);\n\t\t\t}\n\n\t\t\tif(target) {\n\t\t\t\tlet offset = visible.locationOf(target);\n\t\t\t\tlet width = visible.width();\n\t\t\t\tthis.moveTo(offset, width);\n\t\t\t}\n\n\t\t\tdisplaying.resolve();\n\t\t\treturn displayed;\n\t\t}\n\n\t\t// Hide all current views\n\t\tthis.clear();\n\n\t\tlet forceRight = false;\n\t\tif (this.layout.name === \"pre-paginated\" && this.layout.divisor === 2 && section.properties.includes(\"page-spread-right\")) {\n\t\t\tforceRight = true;\n\t\t}\n\n\t\tthis.add(section, forceRight)\n\t\t\t.then(function(view){\n\n\t\t\t\t// Move to correct place within the section, if needed\n\t\t\t\tif(target) {\n\t\t\t\t\tlet offset = view.locationOf(target);\n\t\t\t\t\tlet width = view.width();\n\t\t\t\t\tthis.moveTo(offset, width);\n\t\t\t\t}\n\n\t\t\t}.bind(this), (err) => {\n\t\t\t\tdisplaying.reject(err);\n\t\t\t})\n\t\t\t.then(function(){\n\t\t\t\treturn this.handleNextPrePaginated(forceRight, section, this.add);\n\t\t\t}.bind(this))\n\t\t\t.then(function(){\n\n\t\t\t\tthis.views.show();\n\n\t\t\t\tdisplaying.resolve();\n\n\t\t\t}.bind(this));\n\t\t// .then(function(){\n\t\t// \treturn this.hooks.display.trigger(view);\n\t\t// }.bind(this))\n\t\t// .then(function(){\n\t\t// \tthis.views.show();\n\t\t// }.bind(this));\n\t\treturn displayed;\n\t}\n\n\tafterDisplayed(view){\n\t\tthis.emit(EVENTS.MANAGERS.ADDED, view);\n\t}\n\n\tafterResized(view){\n\t\tthis.emit(EVENTS.MANAGERS.RESIZE, view.section);\n\t}\n\n\tmoveTo(offset, width){\n\t\tvar distX = 0,\n\t\t\t\tdistY = 0;\n\n\t\tif(!this.isPaginated) {\n\t\t\tdistY = offset.top;\n\t\t} else {\n\t\t\tdistX = Math.floor(offset.left / this.layout.delta) * this.layout.delta;\n\n\t\t\tif (distX + this.layout.delta > this.container.scrollWidth) {\n\t\t\t\tdistX = this.container.scrollWidth - this.layout.delta;\n\t\t\t}\n\n\t\t\tdistY = Math.floor(offset.top / this.layout.delta) * this.layout.delta;\n\n\t\t\tif (distY + this.layout.delta > this.container.scrollHeight) {\n\t\t\t\tdistY = this.container.scrollHeight - this.layout.delta;\n\t\t\t}\n\t\t}\n\t\tif(this.settings.direction === 'rtl'){\n\t\t\t/***\n\t\t\t\tthe `floor` function above (L343) is on positive values, so we should add one `layout.delta`\n\t\t\t\tto distX or use `Math.ceil` function, or multiply offset.left by -1\n\t\t\t\tbefore `Math.floor`\n\t\t\t*/\n\t\t\tdistX = distX + this.layout.delta\n\t\t\tdistX = distX - width\n\t\t}\n\t\tthis.scrollTo(distX, distY, true);\n\t}\n\n\tadd(section, forceRight){\n\t\tvar view = this.createView(section, forceRight);\n\n\t\tthis.views.append(view);\n\n\t\t// view.on(EVENTS.VIEWS.SHOWN, this.afterDisplayed.bind(this));\n\t\tview.onDisplayed = this.afterDisplayed.bind(this);\n\t\tview.onResize = this.afterResized.bind(this);\n\n\t\tview.on(EVENTS.VIEWS.AXIS, (axis) => {\n\t\t\tthis.updateAxis(axis);\n\t\t});\n\n\t\tview.on(EVENTS.VIEWS.WRITING_MODE, (mode) => {\n\t\t\tthis.updateWritingMode(mode);\n\t\t});\n\n\t\treturn view.display(this.request);\n\t}\n\n\tappend(section, forceRight){\n\t\tvar view = this.createView(section, forceRight);\n\t\tthis.views.append(view);\n\n\t\tview.onDisplayed = this.afterDisplayed.bind(this);\n\t\tview.onResize = this.afterResized.bind(this);\n\n\t\tview.on(EVENTS.VIEWS.AXIS, (axis) => {\n\t\t\tthis.updateAxis(axis);\n\t\t});\n\n\t\tview.on(EVENTS.VIEWS.WRITING_MODE, (mode) => {\n\t\t\tthis.updateWritingMode(mode);\n\t\t});\n\n\t\treturn view.display(this.request);\n\t}\n\n\tprepend(section, forceRight){\n\t\tvar view = this.createView(section, forceRight);\n\n\t\tview.on(EVENTS.VIEWS.RESIZED, (bounds) => {\n\t\t\tthis.counter(bounds);\n\t\t});\n\n\t\tthis.views.prepend(view);\n\n\t\tview.onDisplayed = this.afterDisplayed.bind(this);\n\t\tview.onResize = this.afterResized.bind(this);\n\n\t\tview.on(EVENTS.VIEWS.AXIS, (axis) => {\n\t\t\tthis.updateAxis(axis);\n\t\t});\n\n\t\tview.on(EVENTS.VIEWS.WRITING_MODE, (mode) => {\n\t\t\tthis.updateWritingMode(mode);\n\t\t});\n\n\t\treturn view.display(this.request);\n\t}\n\n\tcounter(bounds){\n\t\tif(this.settings.axis === \"vertical\") {\n\t\t\tthis.scrollBy(0, bounds.heightDelta, true);\n\t\t} else {\n\t\t\tthis.scrollBy(bounds.widthDelta, 0, true);\n\t\t}\n\n\t}\n\n\t// resizeView(view) {\n\t//\n\t// \tif(this.settings.globalLayoutProperties.layout === \"pre-paginated\") {\n\t// \t\tview.lock(\"both\", this.bounds.width, this.bounds.height);\n\t// \t} else {\n\t// \t\tview.lock(\"width\", this.bounds.width, this.bounds.height);\n\t// \t}\n\t//\n\t// };\n\n\tnext(){\n\t\tvar next;\n\t\tvar left;\n\n\t\tlet dir = this.settings.direction;\n\n\t\tif(!this.views.length) return;\n\n\t\tif(this.isPaginated && this.settings.axis === \"horizontal\" && (!dir || dir === \"ltr\")) {\n\n\t\t\tthis.scrollLeft = this.container.scrollLeft;\n\n\t\t\tleft = this.container.scrollLeft + this.container.offsetWidth + this.layout.delta;\n\n\t\t\tif(left <= this.container.scrollWidth) {\n\t\t\t\tthis.scrollBy(this.layout.delta, 0, true);\n\t\t\t} else {\n\t\t\t\tnext = this.views.last().section.next();\n\t\t\t}\n\t\t} else if (this.isPaginated && this.settings.axis === \"horizontal\" && dir === \"rtl\") {\n\n\t\t\tthis.scrollLeft = this.container.scrollLeft;\n\n\t\t\tif (this.settings.rtlScrollType === \"default\"){\n\t\t\t\tleft = this.container.scrollLeft;\n\n\t\t\t\tif (left > 0) {\n\t\t\t\t\tthis.scrollBy(this.layout.delta, 0, true);\n\t\t\t\t} else {\n\t\t\t\t\tnext = this.views.last().section.next();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tleft = this.container.scrollLeft + ( this.layout.delta * -1 );\n\n\t\t\t\tif (left > this.container.scrollWidth * -1){\n\t\t\t\t\tthis.scrollBy(this.layout.delta, 0, true);\n\t\t\t\t} else {\n\t\t\t\t\tnext = this.views.last().section.next();\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else if (this.isPaginated && this.settings.axis === \"vertical\") {\n\n\t\t\tthis.scrollTop = this.container.scrollTop;\n\n\t\t\tlet top = this.container.scrollTop + this.container.offsetHeight;\n\n\t\t\tif(top < this.container.scrollHeight) {\n\t\t\t\tthis.scrollBy(0, this.layout.height, true);\n\t\t\t} else {\n\t\t\t\tnext = this.views.last().section.next();\n\t\t\t}\n\n\t\t} else {\n\t\t\tnext = this.views.last().section.next();\n\t\t}\n\n\t\tif(next) {\n\t\t\tthis.clear();\n\t\t\t// The new section may have a different writing-mode from the old section. Thus, we need to update layout.\n\t\t\tthis.updateLayout();\n\n\t\t\tlet forceRight = false;\n\t\t\tif (this.layout.name === \"pre-paginated\" && this.layout.divisor === 2 && next.properties.includes(\"page-spread-right\")) {\n\t\t\t\tforceRight = true;\n\t\t\t}\n\n\t\t\treturn this.append(next, forceRight)\n\t\t\t\t.then(function(){\n\t\t\t\t\treturn this.handleNextPrePaginated(forceRight, next, this.append);\n\t\t\t\t}.bind(this), (err) => {\n\t\t\t\t\treturn err;\n\t\t\t\t})\n\t\t\t\t.then(function(){\n\n\t\t\t\t\t// Reset position to start for scrolled-doc vertical-rl in default mode\n\t\t\t\t\tif (!this.isPaginated &&\n\t\t\t\t\t\tthis.settings.axis === \"horizontal\" &&\n\t\t\t\t\t\tthis.settings.direction === \"rtl\" &&\n\t\t\t\t\t\tthis.settings.rtlScrollType === \"default\") {\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.scrollTo(this.container.scrollWidth, 0, true);\n\t\t\t\t\t}\n\t\t\t\t\tthis.views.show();\n\t\t\t\t}.bind(this));\n\t\t}\n\n\n\t}\n\n\tprev(){\n\t\tvar prev;\n\t\tvar left;\n\t\tlet dir = this.settings.direction;\n\n\t\tif(!this.views.length) return;\n\n\t\tif(this.isPaginated && this.settings.axis === \"horizontal\" && (!dir || dir === \"ltr\")) {\n\n\t\t\tthis.scrollLeft = this.container.scrollLeft;\n\n\t\t\tleft = this.container.scrollLeft;\n\n\t\t\tif(left > 0) {\n\t\t\t\tthis.scrollBy(-this.layout.delta, 0, true);\n\t\t\t} else {\n\t\t\t\tprev = this.views.first().section.prev();\n\t\t\t}\n\n\t\t} else if (this.isPaginated && this.settings.axis === \"horizontal\" && dir === \"rtl\") {\n\n\t\t\tthis.scrollLeft = this.container.scrollLeft;\n\n\t\t\tif (this.settings.rtlScrollType === \"default\"){\n\t\t\t\tleft = this.container.scrollLeft + this.container.offsetWidth;\n\n\t\t\t\tif (left < this.container.scrollWidth) {\n\t\t\t\t\tthis.scrollBy(-this.layout.delta, 0, true);\n\t\t\t\t} else {\n\t\t\t\t\tprev = this.views.first().section.prev();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse{\n\t\t\t\tleft = this.container.scrollLeft;\n\n\t\t\t\tif (left < 0) {\n\t\t\t\t\tthis.scrollBy(-this.layout.delta, 0, true);\n\t\t\t\t} else {\n\t\t\t\t\tprev = this.views.first().section.prev();\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else if (this.isPaginated && this.settings.axis === \"vertical\") {\n\n\t\t\tthis.scrollTop = this.container.scrollTop;\n\n\t\t\tlet top = this.container.scrollTop;\n\n\t\t\tif(top > 0) {\n\t\t\t\tthis.scrollBy(0, -(this.layout.height), true);\n\t\t\t} else {\n\t\t\t\tprev = this.views.first().section.prev();\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tprev = this.views.first().section.prev();\n\n\t\t}\n\n\t\tif(prev) {\n\t\t\tthis.clear();\n\t\t\t// The new section may have a different writing-mode from the old section. Thus, we need to update layout.\n\t\t\tthis.updateLayout();\n\n\t\t\tlet forceRight = false;\n\t\t\tif (this.layout.name === \"pre-paginated\" && this.layout.divisor === 2 && typeof prev.prev() !== \"object\") {\n\t\t\t\tforceRight = true;\n\t\t\t}\n\n\t\t\treturn this.prepend(prev, forceRight)\n\t\t\t\t.then(function(){\n\t\t\t\t\tvar left;\n\t\t\t\t\tif (this.layout.name === \"pre-paginated\" && this.layout.divisor > 1) {\n\t\t\t\t\t\tleft = prev.prev();\n\t\t\t\t\t\tif (left) {\n\t\t\t\t\t\t\treturn this.prepend(left);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}.bind(this), (err) => {\n\t\t\t\t\treturn err;\n\t\t\t\t})\n\t\t\t\t.then(function(){\n\t\t\t\t\tif(this.isPaginated && this.settings.axis === \"horizontal\") {\n\t\t\t\t\t\tif (this.settings.direction === \"rtl\") {\n\t\t\t\t\t\t\tif (this.settings.rtlScrollType === \"default\"){\n\t\t\t\t\t\t\t\tthis.scrollTo(0, 0, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse{\n\t\t\t\t\t\t\t\tthis.scrollTo((this.container.scrollWidth * -1) + this.layout.delta, 0, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.scrollTo(this.container.scrollWidth - this.layout.delta, 0, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.views.show();\n\t\t\t\t}.bind(this));\n\t\t}\n\t}\n\n\tcurrent(){\n\t\tvar visible = this.visible();\n\t\tif(visible.length){\n\t\t\t// Current is the last visible view\n\t\t\treturn visible[visible.length-1];\n\t\t}\n\t\treturn null;\n\t}\n\n\tclear () {\n\n\t\t// this.q.clear();\n\n\t\tif (this.views) {\n\t\t\tthis.views.hide();\n\t\t\tthis.scrollTo(0,0, true);\n\t\t\tthis.views.clear();\n\t\t}\n\t}\n\n\tcurrentLocation(){\n\t\tthis.updateLayout();\n\t\tif (this.isPaginated && this.settings.axis === \"horizontal\") {\n\t\t\tthis.location = this.paginatedLocation();\n\t\t} else {\n\t\t\tthis.location = this.scrolledLocation();\n\t\t}\n\t\treturn this.location;\n\t}\n\n\tscrolledLocation() {\n\t\tlet visible = this.visible();\n\t\tlet container = this.container.getBoundingClientRect();\n\t\tlet pageHeight = (container.height < window.innerHeight) ? container.height : window.innerHeight;\n\t\tlet pageWidth = (container.width < window.innerWidth) ? container.width : window.innerWidth;\n\t\tlet vertical = (this.settings.axis === \"vertical\");\n\t\tlet rtl = (this.settings.direction === \"rtl\");\n\t\t\n\t\tlet offset = 0;\n\t\tlet used = 0;\n\n\t\tif(this.settings.fullsize) {\n\t\t\toffset = vertical ? window.scrollY : window.scrollX;\n\t\t}\n\n\t\tlet sections = visible.map((view) => {\n\t\t\tlet {index, href} = view.section;\n\t\t\tlet position = view.position();\n\t\t\tlet width = view.width();\n\t\t\tlet height = view.height();\n\n\t\t\tlet startPos;\n\t\t\tlet endPos;\n\t\t\tlet stopPos;\n\t\t\tlet totalPages;\n\n\t\t\tif (vertical) {\n\t\t\t\tstartPos = offset + container.top - position.top + used;\n\t\t\t\tendPos = startPos + pageHeight - used;\n\t\t\t\ttotalPages = this.layout.count(height, pageHeight).pages;\n\t\t\t\tstopPos = pageHeight;\n\t\t\t} else {\n\t\t\t\tstartPos = offset + container.left - position.left + used;\n\t\t\t\tendPos = startPos + pageWidth - used;\n\t\t\t\ttotalPages = this.layout.count(width, pageWidth).pages;\n\t\t\t\tstopPos = pageWidth;\n\t\t\t}\n\n\t\t\tlet currPage = Math.ceil(startPos / stopPos);\n\t\t\tlet pages = [];\n\t\t\tlet endPage = Math.ceil(endPos / stopPos);\n\n\t\t\t// Reverse page counts for horizontal rtl\n\t\t\tif (this.settings.direction === \"rtl\" && !vertical) {\n\t\t\t\tlet tempStartPage = currPage;\n\t\t\t\tcurrPage = totalPages - endPage;\n\t\t\t\tendPage = totalPages - tempStartPage;\n\t\t\t}\n\n\t\t\tpages = [];\n\t\t\tfor (var i = currPage; i <= endPage; i++) {\n\t\t\t\tlet pg = i + 1;\n\t\t\t\tpages.push(pg);\n\t\t\t}\n\n\t\t\tlet mapping = this.mapping.page(view.contents, view.section.cfiBase, startPos, endPos);\n\n\t\t\treturn {\n\t\t\t\tindex,\n\t\t\t\thref,\n\t\t\t\tpages,\n\t\t\t\ttotalPages,\n\t\t\t\tmapping\n\t\t\t};\n\t\t});\n\n\t\treturn sections;\n\t}\n\n\tpaginatedLocation(){\n\t\tlet visible = this.visible();\n\t\tlet container = this.container.getBoundingClientRect();\n\n\t\tlet left = 0;\n\t\tlet used = 0;\n\n\t\tif(this.settings.fullsize) {\n\t\t\tleft = window.scrollX;\n\t\t}\n\n\t\tlet sections = visible.map((view) => {\n\t\t\tlet {index, href} = view.section;\n\t\t\tlet offset;\n\t\t\tlet position = view.position();\n\t\t\tlet width = view.width();\n\n\t\t\t// Find mapping\n\t\t\tlet start;\n\t\t\tlet end;\n\t\t\tlet pageWidth;\n\n\t\t\tif (this.settings.direction === \"rtl\") {\n\t\t\t\toffset = container.right - left;\n\t\t\t\tpageWidth = Math.min(Math.abs(offset - position.left), this.layout.width) - used;\n\t\t\t\tend = position.width - (position.right - offset) - used;\n\t\t\t\tstart = end - pageWidth;\n\t\t\t} else {\n\t\t\t\toffset = container.left + left;\n\t\t\t\tpageWidth = Math.min(position.right - offset, this.layout.width) - used;\n\t\t\t\tstart = offset - position.left + used;\n\t\t\t\tend = start + pageWidth;\n\t\t\t}\n\n\t\t\tused += pageWidth;\n\n\t\t\tlet mapping = this.mapping.page(view.contents, view.section.cfiBase, start, end);\n\n\t\t\tlet totalPages = this.layout.count(width).pages;\n\t\t\tlet startPage = Math.floor(start / this.layout.pageWidth);\n\t\t\tlet pages = [];\n\t\t\tlet endPage = Math.floor(end / this.layout.pageWidth);\n\t\t\t\n\t\t\t// start page should not be negative\n\t\t\tif (startPage < 0) {\n\t\t\t\tstartPage = 0;\n\t\t\t\tendPage = endPage + 1;\n\t\t\t}\n\n\t\t\t// Reverse page counts for rtl\n\t\t\tif (this.settings.direction === \"rtl\") {\n\t\t\t\tlet tempStartPage = startPage;\n\t\t\t\tstartPage = totalPages - endPage;\n\t\t\t\tendPage = totalPages - tempStartPage;\n\t\t\t}\n\n\n\t\t\tfor (var i = startPage + 1; i <= endPage; i++) {\n\t\t\t\tlet pg = i;\n\t\t\t\tpages.push(pg);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tindex,\n\t\t\t\thref,\n\t\t\t\tpages,\n\t\t\t\ttotalPages,\n\t\t\t\tmapping\n\t\t\t};\n\t\t});\n\n\t\treturn sections;\n\t}\n\n\tisVisible(view, offsetPrev, offsetNext, _container){\n\t\tvar position = view.position();\n\t\tvar container = _container || this.bounds();\n\n\t\tif(this.settings.axis === \"horizontal\" &&\n\t\t\tposition.right > container.left - offsetPrev &&\n\t\t\tposition.left < container.right + offsetNext) {\n\n\t\t\treturn true;\n\n\t\t} else if(this.settings.axis === \"vertical\" &&\n\t\t\tposition.bottom > container.top - offsetPrev &&\n\t\t\tposition.top < container.bottom + offsetNext) {\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tvisible(){\n\t\tvar container = this.bounds();\n\t\tvar views = this.views.displayed();\n\t\tvar viewsLength = views.length;\n\t\tvar visible = [];\n\t\tvar isVisible;\n\t\tvar view;\n\n\t\tfor (var i = 0; i < viewsLength; i++) {\n\t\t\tview = views[i];\n\t\t\tisVisible = this.isVisible(view, 0, 0, container);\n\n\t\t\tif(isVisible === true) {\n\t\t\t\tvisible.push(view);\n\t\t\t}\n\n\t\t}\n\t\treturn visible;\n\t}\n\n\tscrollBy(x, y, silent){\n\t\tlet dir = this.settings.direction === \"rtl\" ? -1 : 1;\n\n\t\tif(silent) {\n\t\t\tthis.ignore = true;\n\t\t}\n\n\t\tif(!this.settings.fullsize) {\n\t\t\tif(x) this.container.scrollLeft += x * dir;\n\t\t\tif(y) this.container.scrollTop += y;\n\t\t} else {\n\t\t\twindow.scrollBy(x * dir, y * dir);\n\t\t}\n\t\tthis.scrolled = true;\n\t}\n\n\tscrollTo(x, y, silent){\n\t\tif(silent) {\n\t\t\tthis.ignore = true;\n\t\t}\n\n\t\tif(!this.settings.fullsize) {\n\t\t\tthis.container.scrollLeft = x;\n\t\t\tthis.container.scrollTop = y;\n\t\t} else {\n\t\t\twindow.scrollTo(x,y);\n\t\t}\n\t\tthis.scrolled = true;\n\t}\n\n\tonScroll(){\n\t\tlet scrollTop;\n\t\tlet scrollLeft;\n\n\t\tif(!this.settings.fullsize) {\n\t\t\tscrollTop = this.container.scrollTop;\n\t\t\tscrollLeft = this.container.scrollLeft;\n\t\t} else {\n\t\t\tscrollTop = window.scrollY;\n\t\t\tscrollLeft = window.scrollX;\n\t\t}\n\n\t\tthis.scrollTop = scrollTop;\n\t\tthis.scrollLeft = scrollLeft;\n\n\t\tif(!this.ignore) {\n\t\t\tthis.emit(EVENTS.MANAGERS.SCROLL, {\n\t\t\t\ttop: scrollTop,\n\t\t\t\tleft: scrollLeft\n\t\t\t});\n\n\t\t\tclearTimeout(this.afterScrolled);\n\t\t\tthis.afterScrolled = setTimeout(function () {\n\t\t\t\tthis.emit(EVENTS.MANAGERS.SCROLLED, {\n\t\t\t\t\ttop: this.scrollTop,\n\t\t\t\t\tleft: this.scrollLeft\n\t\t\t\t});\n\t\t\t}.bind(this), 20);\n\n\n\n\t\t} else {\n\t\t\tthis.ignore = false;\n\t\t}\n\n\t}\n\n\tbounds() {\n\t\tvar bounds;\n\n\t\tbounds = this.stage.bounds();\n\n\t\treturn bounds;\n\t}\n\n\tapplyLayout(layout) {\n\n\t\tthis.layout = layout;\n\t\tthis.updateLayout();\n\t\tif (this.views && this.views.length > 0 && this.layout.name === \"pre-paginated\") {\n\t\t\tthis.display(this.views.first().section);\n\t\t}\n\t\t // this.manager.layout(this.layout.format);\n\t}\n\n\tupdateLayout() {\n\n\t\tif (!this.stage) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._stageSize = this.stage.size();\n\n\t\tif(!this.isPaginated) {\n\t\t\tthis.layout.calculate(this._stageSize.width, this._stageSize.height);\n\t\t} else {\n\t\t\tthis.layout.calculate(\n\t\t\t\tthis._stageSize.width,\n\t\t\t\tthis._stageSize.height,\n\t\t\t\tthis.settings.gap\n\t\t\t);\n\n\t\t\t// Set the look ahead offset for what is visible\n\t\t\tthis.settings.offset = this.layout.delta / this.layout.divisor;\n\n\t\t\t// this.stage.addStyleRules(\"iframe\", [{\"margin-right\" : this.layout.gap + \"px\"}]);\n\n\t\t}\n\n\t\t// Set the dimensions for views\n\t\tthis.viewSettings.width = this.layout.width;\n\t\tthis.viewSettings.height = this.layout.height;\n\n\t\tthis.setLayout(this.layout);\n\t}\n\n\tsetLayout(layout){\n\n\t\tthis.viewSettings.layout = layout;\n\n\t\tthis.mapping = new Mapping(layout.props, this.settings.direction, this.settings.axis);\n\n\t\tif(this.views) {\n\n\t\t\tthis.views.forEach(function(view){\n\t\t\t\tif (view) {\n\t\t\t\t\tview.setLayout(layout);\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t}\n\n\tupdateWritingMode(mode) {\n\t\tthis.writingMode = mode;\n\t}\n\n\tupdateAxis(axis, forceUpdate){\n\n\t\tif (!forceUpdate && axis === this.settings.axis) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.settings.axis = axis;\n\n\t\tthis.stage && this.stage.axis(axis);\n\n\t\tthis.viewSettings.axis = axis;\n\n\t\tif (this.mapping) {\n\t\t\tthis.mapping = new Mapping(this.layout.props, this.settings.direction, this.settings.axis);\n\t\t}\n\n\t\tif (this.layout) {\n\t\t\tif (axis === \"vertical\") {\n\t\t\t\tthis.layout.spread(\"none\");\n\t\t\t} else {\n\t\t\t\tthis.layout.spread(this.layout.settings.spread);\n\t\t\t}\n\t\t}\n\t}\n\n\tupdateFlow(flow, defaultScrolledOverflow=\"auto\"){\n\t\tlet isPaginated = (flow === \"paginated\" || flow === \"auto\");\n\n\t\tthis.isPaginated = isPaginated;\n\n\t\tif (flow === \"scrolled-doc\" ||\n\t\t\t\tflow === \"scrolled-continuous\" ||\n\t\t\t\tflow === \"scrolled\") {\n\t\t\tthis.updateAxis(\"vertical\");\n\t\t} else {\n\t\t\tthis.updateAxis(\"horizontal\");\n\t\t}\n\n\t\tthis.viewSettings.flow = flow;\n\n\t\tif (!this.settings.overflow) {\n\t\t\tthis.overflow = isPaginated ? \"hidden\" : defaultScrolledOverflow;\n\t\t} else {\n\t\t\tthis.overflow = this.settings.overflow;\n\t\t}\n\n\t\tthis.stage && this.stage.overflow(this.overflow);\n\n\t\tthis.updateLayout();\n\n\t}\n\n\tgetContents(){\n\t\tvar contents = [];\n\t\tif (!this.views) {\n\t\t\treturn contents;\n\t\t}\n\t\tthis.views.forEach(function(view){\n\t\t\tconst viewContents = view && view.contents;\n\t\t\tif (viewContents) {\n\t\t\t\tcontents.push(viewContents);\n\t\t\t}\n\t\t});\n\t\treturn contents;\n\t}\n\n\tdirection(dir=\"ltr\") {\n\t\tthis.settings.direction = dir;\n\n\t\tthis.stage && this.stage.direction(dir);\n\n\t\tthis.viewSettings.direction = dir;\n\n\t\tthis.updateLayout();\n\t}\n\n\tisRendered() {\n\t\treturn this.rendered;\n\t}\n}\n\n//-- Enable binding events to Manager\nEventEmitter(DefaultViewManager.prototype);\n\nexport default DefaultViewManager;\n","\"use strict\";\n\n// eslint-disable-next-line no-empty-function\nmodule.exports = function () {};\n","\"use strict\";\n\nmodule.exports = function () {\n\ttry {\n\t\tObject.keys(\"primitive\");\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nvar forEach = Array.prototype.forEach, create = Object.create;\n\nvar process = function (src, obj) {\n\tvar key;\n\tfor (key in src) obj[key] = src[key];\n};\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function (opts1 /*, …options*/) {\n\tvar result = create(null);\n\tforEach.call(arguments, function (options) {\n\t\tif (!isValue(options)) return;\n\t\tprocess(Object(options), result);\n\t});\n\treturn result;\n};\n","\"use strict\";\n\nvar isValue = require(\"type/value/is\")\n , isPlainFunction = require(\"type/plain-function/is\")\n , assign = require(\"es5-ext/object/assign\")\n , normalizeOpts = require(\"es5-ext/object/normalize-options\")\n , contains = require(\"es5-ext/string/#/contains\");\n\nvar d = (module.exports = function (dscr, value/*, options*/) {\n\tvar c, e, w, options, desc;\n\tif (arguments.length < 2 || typeof dscr !== \"string\") {\n\t\toptions = value;\n\t\tvalue = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[2];\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t\tw = contains.call(dscr, \"w\");\n\t} else {\n\t\tc = w = true;\n\t\te = false;\n\t}\n\n\tdesc = { value: value, configurable: c, enumerable: e, writable: w };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n});\n\nd.gs = function (dscr, get, set/*, options*/) {\n\tvar c, e, options, desc;\n\tif (typeof dscr !== \"string\") {\n\t\toptions = set;\n\t\tset = get;\n\t\tget = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[3];\n\t}\n\tif (!isValue(get)) {\n\t\tget = undefined;\n\t} else if (!isPlainFunction(get)) {\n\t\toptions = get;\n\t\tget = set = undefined;\n\t} else if (!isValue(set)) {\n\t\tset = undefined;\n\t} else if (!isPlainFunction(set)) {\n\t\toptions = set;\n\t\tset = undefined;\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t} else {\n\t\tc = true;\n\t\te = false;\n\t}\n\n\tdesc = { get: get, set: set, configurable: c, enumerable: e };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n};\n","\"use strict\";\n\nvar keys = require(\"../keys\")\n , value = require(\"../valid-value\")\n , max = Math.max;\n\nmodule.exports = function (dest, src /*, …srcn*/) {\n\tvar error, i, length = max(arguments.length, 2), assign;\n\tdest = Object(value(dest));\n\tassign = function (key) {\n\t\ttry {\n\t\t\tdest[key] = src[key];\n\t\t} catch (e) {\n\t\t\tif (!error) error = e;\n\t\t}\n\t};\n\tfor (i = 1; i < length; ++i) {\n\t\tsrc = arguments[i];\n\t\tkeys(src).forEach(assign);\n\t}\n\tif (error !== undefined) throw error;\n\treturn dest;\n};\n","\"use strict\";\n\nvar indexOf = String.prototype.indexOf;\n\nmodule.exports = function (searchString /*, position*/) {\n\treturn indexOf.call(this, searchString, arguments[1]) > -1;\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? String.prototype.contains : require(\"./shim\");\n","'use strict';\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 baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n"],"sourceRoot":""}