xgplayer-mp4 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://Mp4Player/webpack/bootstrap","webpack://Mp4Player/./src/parse/box.js","webpack://Mp4Player/./src/parse/stream.js","webpack://Mp4Player/./src/error.js","webpack://Mp4Player/external \"Player\"","webpack://Mp4Player/./node_modules/event-emitter/index.js","webpack://Mp4Player/./node_modules/es5-ext/object/is-value.js","webpack://Mp4Player/./src/parse/date.js","webpack://Mp4Player/./src/parse/box/sps.js","webpack://Mp4Player/./src/constants.js","webpack://Mp4Player/./node_modules/type/value/is.js","webpack://Mp4Player/./node_modules/concat-typed-array/lib/index.js","webpack://Mp4Player/./src/parse/box/golomb.js","webpack://Mp4Player/./src/fmp4/buffer.js","webpack://Mp4Player/./src/media/task.js","webpack://Mp4Player/./src/index.js","webpack://Mp4Player/./src/mp4.js","webpack://Mp4Player/./node_modules/d/index.js","webpack://Mp4Player/./node_modules/type/plain-function/is.js","webpack://Mp4Player/./node_modules/type/function/is.js","webpack://Mp4Player/./node_modules/type/prototype/is.js","webpack://Mp4Player/./node_modules/type/object/is.js","webpack://Mp4Player/./node_modules/es5-ext/object/assign/index.js","webpack://Mp4Player/./node_modules/es5-ext/object/assign/is-implemented.js","webpack://Mp4Player/./node_modules/es5-ext/object/assign/shim.js","webpack://Mp4Player/./node_modules/es5-ext/object/keys/index.js","webpack://Mp4Player/./node_modules/es5-ext/object/keys/is-implemented.js","webpack://Mp4Player/./node_modules/es5-ext/object/keys/shim.js","webpack://Mp4Player/./node_modules/es5-ext/function/noop.js","webpack://Mp4Player/./node_modules/es5-ext/object/valid-value.js","webpack://Mp4Player/./node_modules/es5-ext/object/normalize-options.js","webpack://Mp4Player/./node_modules/es5-ext/string/#/contains/index.js","webpack://Mp4Player/./node_modules/es5-ext/string/#/contains/is-implemented.js","webpack://Mp4Player/./node_modules/es5-ext/string/#/contains/shim.js","webpack://Mp4Player/./node_modules/es5-ext/object/valid-callable.js","webpack://Mp4Player/./src/parse/index.js","webpack://Mp4Player/./node_modules/concat-typed-array/lib/concat.js","webpack://Mp4Player/./src/parse/box/vmhd.js","webpack://Mp4Player/./src/parse/box/url.js","webpack://Mp4Player/./src/parse/box/udta.js","webpack://Mp4Player/./src/parse/box/tkhd.js","webpack://Mp4Player/./src/parse/box/tfhd.js","webpack://Mp4Player/./src/parse/box/stts.js","webpack://Mp4Player/./src/parse/box/stsz.js","webpack://Mp4Player/./src/parse/box/stss.js","webpack://Mp4Player/./src/parse/box/stsd.js","webpack://Mp4Player/./src/parse/box/stsc.js","webpack://Mp4Player/./src/parse/box/stco.js","webpack://Mp4Player/./src/parse/box/smhd.js","webpack://Mp4Player/./src/parse/box/SLConfigDescriptor.js","webpack://Mp4Player/./src/parse/box/schm.js","webpack://Mp4Player/./src/parse/box/pasp.js","webpack://Mp4Player/./src/parse/box/mvhd.js","webpack://Mp4Player/./src/parse/box/MP4ESDescrTag.js","webpack://Mp4Player/./src/parse/box/MP4DecSpecificDescrTag.js","webpack://Mp4Player/./src/parse/box/MP4DecConfigDescrTag.js","webpack://Mp4Player/./src/parse/box/mp4a.js","webpack://Mp4Player/./src/parse/box/mdhd.js","webpack://Mp4Player/./src/parse/box/mdat.js","webpack://Mp4Player/./src/parse/box/iods.js","webpack://Mp4Player/./src/parse/box/hvcC.js","webpack://Mp4Player/./src/parse/box/hvc1.js","webpack://Mp4Player/./src/parse/box/hdlr.js","webpack://Mp4Player/./src/parse/box/ftyp.js","webpack://Mp4Player/./src/parse/box/frma.js","webpack://Mp4Player/./src/parse/box/esds.js","webpack://Mp4Player/./src/parse/box/elst.js","webpack://Mp4Player/./src/parse/box/dref.js","webpack://Mp4Player/./src/parse/box/ctts.js","webpack://Mp4Player/./src/parse/box/co64.js","webpack://Mp4Player/./src/parse/box/btrt.js","webpack://Mp4Player/./src/parse/box/avcC.js","webpack://Mp4Player/./src/parse/box/avc1.js","webpack://Mp4Player/./src/fmp4/mp4.js","webpack://Mp4Player/./src/util/getHeaders.js","webpack://Mp4Player/./src/util/index.js","webpack://Mp4Player/./src/media/mse.js","webpack://Mp4Player/./src/util/isSupport.js","webpack://Mp4Player/./src/util/proxyPromise.js","webpack://Mp4Player/./src/util/timer.js","webpack://Mp4Player/./src/gap_jump.js","webpack://Mp4Player/./src/util/intervalTimer.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","Box","this","headSize","size","type","subBox","start","stream","position","readUint32","String","fromCharCode","readUint8","readUint64","Errors","line","handle","msg","uuid","push","version","flags","end","parser","data","buffer","slice","byteLength","containerBox","find","item","containerParser","Function","readHeader","readBody","Stream","box","ArrayBuffer","dataview","DataView","count","loop","Math","floor","last","readByte","sign","res","getInt8","getUint8","getInt16","getUint16","getInt32","getUint32","_Errors","vid","errd","url","Player","window","require","callable","apply","defineProperties","descriptor","configurable","writable","on","listener","__ee__","once","self","off","arguments","__eeOnceListener__","listeners","candidate","length","splice","emit","args","Array","methods","descriptors","base","_undefined","val","UTC","time","Date","setFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setTime","getTime","toLocaleString","SPSParser","uint8array","src","srcLength","dst","Uint8Array","dstIdx","rbsp","_ebsp2rbsp","gb","Golomb","profileIdc","levelIdc","profile_string","readUEG","getProfileString","level_string","getLevelString","chroma_format_idc","chroma_format","bit_depth","readBits","readBool","scaling_list_count","_skipScalingList","pic_order_cnt_type","readSEG","num_ref_frames_in_pic_order_cnt_cycle","pic_width_in_mbs_minus1","pic_height_in_map_units_minus1","frame_mbs_only_flag","frame_crop_left_offset","frame_crop_right_offset","frame_crop_top_offset","frame_crop_bottom_offset","par_width","par_height","fps","fps_fixed","fps_num","fps_den","parScale","aspect_ratio_idc","num_units_in_tick","time_scale","crop_unit_x","crop_unit_y","codec_width","codec_height","present_width","ceil","destroy","chroma_format_string","getChromaFormatString","frame_rate","fixed","par_ratio","width","height","codec_size","present_size","last_scale","next_scale","toFixed","chroma","spsConfig","meta","fpsDen","codecWidth","codecHeight","presentWidth","presentHeight","profile","level","bitDepth","chromaFormat","parRatio","frameRate","fpsNum","refSampleDuration","timescale","CUSTOM_EVENTS","TASK_ERROR","TASK_ERROR_TYPES","ERROR","CODE_ERROR","CANCEL","_concat2","_interopRequireDefault","obj","default","TAG","_buffer","_bufferIndex","_totalBytes","_totalBits","_currentWord","_currentWordBitsLeft","bufferBytesLeft","bytesRead","min","word","set","subarray","bits","valu","Error","_fillCurrentWord","zeroCount","_skipLeadingZero","leadingZeros","Buffer","forEach","console","error","Task","range","xhrSetup","callback","ext","uniqueTag","playerId","queue","some","JSON","stringify","id","join","running","canceled","initialize","xhr","XMLHttpRequest","target","responseType","withCredentials","open","setRequestHeader","onreadystatechange","e","readyState","headers","status","onload","response","MEDIA_EXPIRED","_emitTaskError","remove","onerror","message","onabort","update","abort","code","filter","idx","Queue","sended","wait","max","limit","run","send","cancel","DESTROYED","sniffer","isEnded","player","mp4","endTime","currentTime","duration","mse","endOfStream","_stopProgress","Mp4Player","options","hasStartProgress","onlyInit","videoInit","autoplay","_pendingPromises","_allInitPromise","ProxyPromise","_maxBufferLength","maxBufferLength","_playerId","uniqueId","_onBufferedResetFunc","_onBufferedReset","_onSeekingFunc","_onSeeking","_onMp4InitFunc","_onMp4Init","_onWaitingFunc","_onWaiting","_onEndedFunc","_onEnded","_onDestroyFunc","_onDestroy","_replay","_onReplay","_onOnlineHandlerFunc","_onOnlineHandler","_onOfflineHandlerFunc","_onOfflineHandler","_tickInSeconds","tickInSeconds","_hasStartProgress","_hasStartProgressBack","video","addEventListener","BUFFERED_RESET","_bindNetworkStateChange","_initMp4Kernal","gapJumpInst","GapJump","config","util","onSegmentAppend","rule","pluginRule","MSE","isSupported","currentSrc","_init","then","result","proxyOnce","play","proxyOn","_startProgress","_onSuperStart","err","_errorHandle","initPromise","browser","hasClass","root","addClass","removeClass","buffered","_addPendingPromise","resolve","_hasInited","_removePendingPromise","mp5","MP4","preloadSize","timeRage","curTime","getBufferedRange","buffered2","removeBuffer","appendBuffer","packMeta","downloaded","removeEventListener","promise","_initMp4","isHvc","videoCodec","indexOf","encv","data_format","hasVideo","hasAudio","audioCodec","codec","mediaType","initSeg","_loadData","reject","_initMse","navigator","onLine","seek","updating","setTimeout","cacheMaxTime","canDownload","every","_onInnerWait","_unbindNetworkStateChange","clear","unloadVideo","cancelPendingPromises","errt","errorType","bufferCache","_currentTime","_start","switchURL","iplayer","_onCheckLoad","hasBuffered","len","mp4Init","pause","_requestTimer","stop","Timer","_onTimeUpdate","tickEvery","removeAttribute","load","reason","INIT_FAIL","PARSE_ERROR","isSupportedWithXgmse","isMediaSourceSupported","chunkSize","pow","CHUNK_SIZE","init","moovParse","Promise","task","hasDestroyed","onMediaExpired","params","videoDuration","audioDuration","vf","videoKeyFramesLength","moov","moovBox","mvhd","findBox","traks","videoTrak","audioTrak","videoTimeScale","audioTimeScale","sps","pps","vps","channelCount","sampleRate","decoderConfig","hvc1Data","hvcCData","pixelRatio","isArray","trak","codecBox","esds","mp4a","ESDescriptor","hdlr","mdhd","handleType","hvcC","avcC","tkhd","toHex","profileCompatibility","AVCLevelIndication","sequence","spsInfo","map","Number","hvc1","profileCompatibilityIndications","typeID","EScode","mdat","_boxes","seekTrakDuration","mdatStart","videoKeyFrames","timeScale","createTime","modifyTime","audioConfig","stss","_stssObj","getData","parsed","moovStart","boxes","Parser","nextBox","concat","catch","stsc","stsz","stts","stco","cttsObj","_cttsObj","stscObj","_stscVideoObj","_stscAudioObj","samples","undefined","entries","seekSampleTime","offset","seekSampleOffset","write","FMP4","ftyp","fragIndex","getFragmentIdx","getFragRange","audioFrames","timeStart","round","videoFrames","nowTime","nextTime","MAX_SAFE_INTEGER","audioKeyFrames","startTime","loadFragment","audioNextFrame","audioFrame","getSamplesByOrders","order","isNaN","dat","createFragment","buf","moof","mdatData","framesIndex","_samples","addFragment","firstFlags","sampleOffset","resBuffers","promises","getVideoBuffer","getAudioBuffer","all","buffers","bufferSize","k","_videoFrames","ctts","entry","j","sampleCount","chunk_count","samples_per_chunk","frames","_audioFrames","videoScale","audioScale","audioStts","audioIndex","seekOrderSampleByTime","isValue","isPlainFunction","assign","normalizeOpts","contains","dscr","w","desc","gs","isFunction","classRe","functionToString","toString","test","isPrototype","isObject","constructor","possibleTypes","foo","bar","trzy","keys","dest","TypeError","process","opts1","str","searchString","fn","bufferLength","ResultConstructor","totalLength","_len","arrays","_key","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","iterator","next","done","return","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","_arr","vmhd","flag","graphicsmode","readUint16","opcolor","location","udta","matrix","modify","trackID","reserverd","layer","readInt16","alternate_group","volume","tfhd","baseDataOffsetPresent","track_id","sampleDescriptionIndexPresent","defaultSampleDurationPresent","defaultSampleSizePresent","defaultSampleFlagsPresent","baseDataOffset","sampleDescriptionIndex","defaultSampleDuration","defaultSampleSize","defaultSampleFlags","sampleDuration","sampleSize","stsd","entryCount","first_chunk","sample_desc_index","preEntry","pre","first_sample","smhd","balance","readInt8","SLConfigDescriptor","extend","skip","SL","schm","scheme_version","scheme_type","scheme_uri","hdr_size","pasp","hSpacing","vSpacing","rate","nextTrackID","MP4ESDescrTag","esID","priority","MP4DecConfigDescrTag","MP4DecSpecificDescrTag","dataSize","padStart","streamUint","maximum","average","dataReferenceIndex","language","iods","content","configVersion","constraintIndicatorFlags","bitDepthLumaMinus8","bitDepthChromaMinus8","avgFrameRate","constantFrameRate","numOfArrays","vpsHeader","readUint24","vpsLength","spsHeader","spsLength","ppsHeader","ppsLength","dataviewLength","horizresolution","vertresolution","frameCount","depth","compatibleBrands","major_brand","minor_version","compatible_brands","frma","elst","entry_count","segment_duration","media_time","readInt32","media_rate_integer","media_rate_fraction","dref","read","co64","btrt","bufferSizeDB","maxBitrate","avgBitrate","sequenceLength","lengthSizeMinusOne","numOfSequenceParameterSets","SpsParser","parseSPS","ppsCount","avc1","UINT32_MAX","charCodeAt","writeUint32","mvex","trak1","trak2","bytes","mdia","mediaTime","minf","extension","dinf","stbl","configlen","avcc","stssObj","mehd","trex1","trex2","mfhd","traf","tfdt","sdtp","trun","upper","lower","sdtpLength","getResponseHeaders","headerMap","getAllResponseHeaders","trim","split","parts","header","shift","pad","charstr","maxlen","chars","substring","hex","rst","sample_order","chunk_offset_sample","chunk_offset","chunk_start","chunk_index","samples_offset","last_chunk","pop","chunkOffset","stscOffset","sum","itemDuration","arr","view","parseInt","substr","array","ret","subArray","bin","atob","replace","padding","base64","btoa","encoded","encodeURIComponent","utf8","unescape","toUpperCase","a","codecs","mediaSource","MediaSource","URL","createObjectURL","_hasDestroyed","_hasEndOfStream","_hasEndOfStreamSuccess","_onSourceOpen","_onMediaSourceClose","_onSourceBufferError","_onSourceBufferUpdateEnd","sourceBuffer","addSourceBuffer","_endOfStream","state","unshift","revokeObjectURL","isTypeSupported","isMSBrowser","ua","userAgent","msie","trident","WebKitMediaSource","resolvePromise","rejectPromise","publicPromise","onTick","onTick_","cancelPending_","delayInSeconds","alive","timeoutId","clearTimeout","seconds","tickAfter","mediaElem","timer","IntervalTimer","prevReadyState","didFireLargeGap","seekingEventReceived","segmentAppended","onWaitFunc","onPlayFunc","_onPlay","isSafari","platform","useGapJump","hasPlayed","onGapJump","repeat","HTMLMediaElement","HAVE_NOTHING","seeking","smallGapLimit","jumpTo","jumpSize","paused","gapDetectionThreshold","_getIndex","BROWSER_GAP_TOLERANCE","disableGapSetPosition","threshold","bufferedInfo","_getBuffered","b","timeID","func","ms","repeatInterval"],"mappings":"6BACE,IAAIA,EAAmB,GAGvB,SAASC,oBAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,qBAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,oBAAoBQ,EAAIF,EAGxBN,oBAAoBS,EAAIV,EAGxBC,oBAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,oBAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,oBAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,oBAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,oBAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,oBAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,oBAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,oBAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,SAASM,aAAe,OAAO3B,EAAgB,SAC/C,SAAS4B,mBAAqB,OAAO5B,GAEtC,OADAH,oBAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,oBAAoBa,EAAI,SAASmB,EAAQC,GAAY,OAAOnB,OAAOoB,UAAUC,eAAe5B,KAAKyB,EAAQC,IAGzGjC,oBAAoBoC,EAAI,GAIjBpC,oBAAoBA,oBAAoBqC,EAAI,I,+YClFrD,M,yBACA,M,wEACMC,E,WACJ,gB,4GAAe,WACbC,KAAKC,SAAW,EAChBD,KAAKE,KAAO,EACZF,KAAKG,KAAO,GACZH,KAAKI,OAAS,GACdJ,KAAKK,OAAS,E,0DAEJC,GAIV,GAHAN,KAAKK,MAAQC,EAAOC,SACpBP,KAAKE,KAAOI,EAAOE,aACnBR,KAAKG,KAAOM,OAAOC,aAAaJ,EAAOK,YAAaL,EAAOK,YAAaL,EAAOK,YAAaL,EAAOK,aACjF,IAAdX,KAAKE,KACPF,KAAKE,KAAOI,EAAOM,kBACd,GAAkB,IAAdZ,KAAKE,MACI,SAAdF,KAAKG,KACP,MAAM,IAAIU,UAAO,QAAS,GAAI,CAACC,KAAM,GAAIC,OAAQ,mBAAoBC,IAAK,8BAG9E,GAAkB,SAAdhB,KAAKG,KAEP,IADA,IAAIc,EAAO,GACFpD,EAAI,EAAGA,EAAI,GAAIA,IACtBoD,EAAKC,KAAKZ,EAAOK,aAGH,SAAdX,KAAKG,OACPH,KAAKmB,QAAUb,EAAOK,YACtBX,KAAKoB,MAAQd,EAAOK,e,wCAGdL,GACR,IAAIe,EAAMrB,KAAKE,KAAOI,EAAOC,SAAWP,KAAKK,MACzCF,EAAOH,KAAKG,KAGZmB,GAFJtB,KAAKuB,KAAOjB,EAAOkB,OAAOC,MAAMnB,EAAOC,SAAUD,EAAOC,SAAWc,GACnEf,EAAOC,UAAYP,KAAKuB,KAAKG,gBACzBJ,IAMAA,EALAvB,IAAI4B,aAAaC,KAAK,SAAAC,GAAA,OAAQA,IAAS1B,IAChCJ,IAAI+B,gBAEJ/B,IAAII,KAEDmB,aAAkBS,UAC9BT,EAAOtD,KAAKgC,Q,gCAGVM,GACJN,KAAKgC,WAAW1B,GAChBN,KAAKiC,SAAS3B,M,yDAOd,IAHA,IAAIA,EAAS,IAAI4B,UAAOlC,KAAKuB,MACzBrB,EAAOI,EAAOkB,OAAOE,WAElBpB,EAAOC,SAAWL,GAAM,CAC7B,IAAIiC,EAAM,IAAIpC,IACdoC,EAAIH,WAAW1B,GAHNN,KAIJI,OAAOc,KAAKiB,GACjBA,EAAIF,SAAS3B,UALJN,KAOCuB,S,OAKhBxB,EAAI4B,aAAe,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,Q,UAErG5B,E,odCrEf,MACMmC,E,WACJ,gBAAaV,GACX,I,4GADmB,gBACfA,aAAkBY,aAKpB,MAAM,IAAIvB,UAAO,QAAS,GAAI,CAACC,KAAM,EAAGC,OAAQ,uBAAwBC,IAAK,kBAJ7EhB,KAAKwB,OAASA,EACdxB,KAAKqC,SAAW,IAAIC,SAASd,GAC7BxB,KAAKqC,SAAS9B,SAAW,E,iDAcvBgC,GAGJ,IAFA,IAAIC,EAAOC,KAAKC,MAAMH,EAAQ,GAC1BI,EAAOJ,EAAQ,EACV1E,EAAI,EAAGA,EAAI2E,EAAM3E,IACxBqE,OAAOU,SAAS5C,KAAKqC,SAAU,GAEtB,EAAPM,GACFT,OAAOU,SAAS5C,KAAKqC,SAAUM,K,4CA2DjC,OAAOT,OAAOU,SAAS5C,KAAKqC,SAAU,K,8CAItC,OAAOH,OAAOU,SAAS5C,KAAKqC,SAAU,K,8CAItC,OAAOH,OAAOU,SAAS5C,KAAKqC,SAAU,K,8CAItC,OAAOH,OAAOU,SAAS5C,KAAKqC,SAAU,K,8CAItC,OAAOH,OAAOU,SAAS5C,KAAKqC,SAAU,K,0CAItC,OAAOH,OAAOU,SAAS5C,KAAKqC,SAAU,GAAG,K,4CAGzC,OAAOH,OAAOU,SAAS5C,KAAKqC,SAAU,GAAG,K,4CAGzC,OAAOH,OAAOU,SAAS5C,KAAKqC,SAAU,GAAG,K,iCApG7BvD,GACZkB,KAAKqC,SAAS9B,SAAWzB,G,mBAIzB,OAAOkB,KAAKqC,SAAS9B,Y,yCAoBNiB,EAAQtB,EAAM2C,GAC7B,IAAIC,SACJ,OAAQ5C,GACN,KAAK,EAED4C,EADED,EACIrB,EAAOuB,QAAQvB,EAAOjB,UAEtBiB,EAAOwB,SAASxB,EAAOjB,UAE/B,MACF,KAAK,EAEDuC,EADED,EACIrB,EAAOyB,SAASzB,EAAOjB,UAEvBiB,EAAO0B,UAAU1B,EAAOjB,UAEhC,MACF,KAAK,EACH,GAAIsC,EACF,KAAM,+BAENC,EAAMtB,EAAOwB,SAASxB,EAAOjB,WAAa,GAE1CuC,GADAA,GAAOtB,EAAOwB,SAASxB,EAAOjB,SAAW,IAAM,GACxCiB,EAAOwB,SAASxB,EAAOjB,SAAW,GAE3C,MACF,KAAK,EAEDuC,EADED,EACIrB,EAAO2B,SAAS3B,EAAOjB,UAEvBiB,EAAO4B,UAAU5B,EAAOjB,UAEhC,MACF,KAAK,EACH,GAAIsC,EACF,MAAM,IAAIhC,UAAO,QAAS,GAAI,CAACC,KAAM,GAAIC,OAAQ,oBAAqBC,IAAK,iCAE3E8B,EAAMtB,EAAO4B,UAAU5B,EAAOjB,WAAa,GAC3CuC,GAAOtB,EAAO4B,UAAU5B,EAAOjB,SAAW,GAE5C,MACF,QACEuC,EAAM,GAGV,OADAtB,EAAOjB,UAAYL,EACZ4C,M,oBAkCIZ,E,mGCpHf,I,2EAAA,MACA,QAEMmB,E,WACJ,iBAAalD,EAAMmD,GAA0B,IAArBC,EAAqB,uDAAd,GAAIC,EAAU,uDAAJ,GAAI,I,4GAAA,eAC3CD,EAAKpC,QAAUA,U,2LAD4B,oEAErChB,EAAMmD,EAAKC,KAF0B,OAG3C,EAAKC,IAAMA,EAHgC,E,mVADzBC,UAAO5C,Q,qBAQdwC,E,mCCXDzF,EAAOD,QAAU+F,OAAe,Q,6OCE1CvF,EAAWwF,EAAQ,IACnBC,EAAWD,EAAQ,IAEnBE,EAAQ9B,SAASpC,UAAUkE,MAAO7F,EAAO+D,SAASpC,UAAU3B,KAC5DmB,EAASZ,OAAOY,OAAQX,EAAiBD,OAAOC,eAChDsF,EAAmBvF,OAAOuF,iBAC1BlE,EAAiBrB,OAAOoB,UAAUC,eAClCmE,EAAa,CAAEC,cAAc,EAAMvF,YAAY,EAAOwF,UAAU,GAIpEC,EAAK,SAAS,GAAC/D,EAAMgE,GACpB,IAAI5C,EAeJ,OAbAqC,EAASO,GAEJvE,EAAe5B,KAAKgC,KAAM,UAK9BuB,EAAOvB,KAAKoE,QAJZ7C,EAAOwC,EAAWjF,MAAQK,EAAO,MACjCX,EAAewB,KAAM,SAAU+D,GAC/BA,EAAWjF,MAAQ,MAIfyC,EAAKpB,GACqB,WAAtB,EAAOoB,EAAKpB,IAAoBoB,EAAKpB,GAAMe,KAAKiD,GACpD5C,EAAKpB,GAAQ,CAACoB,EAAKpB,GAAOgE,GAFd5C,EAAKpB,GAAQgE,EAIvBnE,MAGRqE,EAAO,SAAS,KAAClE,EAAMgE,GACtB,IAAIE,EAAMC,EAUV,OARAV,EAASO,GACTG,EAAOtE,KACPkE,EAAGlG,KAAKgC,KAAMG,EAAMkE,EAAO,SAAS,OACnCE,EAAIvG,KAAKsG,EAAMnE,EAAMkE,GACrBR,EAAM7F,KAAKmG,EAAUnE,KAAMwE,aAG5BH,EAAKI,mBAAqBN,EACnBnE,MAGRuE,EAAM,SAAS,IAACpE,EAAMgE,GACrB,IAAI5C,EAAMmD,EAAWC,EAAW9G,EAIhC,GAFA+F,EAASO,IAEJvE,EAAe5B,KAAKgC,KAAM,UAAW,OAAOA,KAEjD,KADAuB,EAAOvB,KAAKoE,QACFjE,GAAO,OAAOH,KAGxB,GAAyB,iBAArB,KAFJ0E,EAAYnD,EAAKpB,IAEb,cAAOuE,IACV,IAAK7G,EAAI,EAAI8G,EAAYD,EAAU7G,KAAOA,EACpC8G,IAAcR,GAChBQ,EAAUF,qBAAuBN,IACV,IAArBO,EAAUE,OAAcrD,EAAKpB,GAAQuE,EAAU7G,EAAI,EAAI,GACtD6G,EAAUG,OAAOhH,EAAG,SAItB6G,IAAcP,GAChBO,EAAUD,qBAAuBN,UAC5B5C,EAAKpB,GAId,OAAOH,MAGR8E,EAAO,SAAS,KAAC3E,GAChB,IAAItC,EAAGC,EAAGqG,EAAUO,EAAWK,EAE/B,GAAKnF,EAAe5B,KAAKgC,KAAM,YAC/B0E,EAAY1E,KAAKoE,OAAOjE,IAGxB,GAAyB,iBAArB,IAAOuE,EAAP,cAAOA,IAAwB,CAGlC,IAFA5G,EAAI0G,UAAUI,OACdG,EAAO,IAAIC,MAAMlH,EAAI,GAChBD,EAAI,EAAGA,EAAIC,IAAKD,EAAGkH,EAAKlH,EAAI,GAAK2G,UAAU3G,GAGhD,IADA6G,EAAYA,EAAUjD,QACjB5D,EAAI,EAAIsG,EAAWO,EAAU7G,KAAOA,EACxCgG,EAAM7F,KAAKmG,EAAUnE,KAAM+E,QAG5B,OAAQP,UAAUI,QAClB,KAAK,EACJ5G,EAAKA,KAAK0G,EAAW1E,MACrB,MACD,KAAK,EACJhC,EAAKA,KAAK0G,EAAW1E,KAAMwE,UAAU,IACrC,MACD,KAAK,EACJxG,EAAKA,KAAK0G,EAAW1E,KAAMwE,UAAU,GAAIA,UAAU,IACnD,MACD,QAGC,IAFA1G,EAAI0G,UAAUI,OACdG,EAAO,IAAIC,MAAMlH,EAAI,GAChBD,EAAI,EAAGA,EAAIC,IAAKD,EACpBkH,EAAKlH,EAAI,GAAK2G,UAAU3G,GAEzBgG,EAAM7F,KAAK0G,EAAW1E,KAAM+E,KAK/BE,EAAU,CACTf,GAAIA,EACJG,KAAMA,EACNE,IAAKA,EACLO,KAAMA,GAGPI,EAAc,CACbhB,GAAI/F,EAAE+F,GACNG,KAAMlG,EAAEkG,GACRE,IAAKpG,EAAEoG,GACPO,KAAM3G,EAAE2G,IAGTK,EAAOrB,EAAiB,GAAIoB,GAE5BtH,EAAOD,QAAUA,EAAU,SAAS,QAACW,GACpC,OAAa,MAALA,EAAaa,EAAOgG,GAAQrB,EAAiBvF,OAAOD,GAAI4G,IAEjEvH,EAAQsH,QAAUA,G,6BCjIlB,IAAIG,EAAazB,EAAQ,GAARA,GAEjB/F,EAAOD,QAAU,SAAU0H,GAAO,OAAOA,IAAQD,GAAsB,OAARC,I,wXCJzDC,E,WACJ,gB,4GAAe,WACb,IAAIC,EAAO,IAAIC,KACfD,EAAKE,YAAY,MACjBF,EAAKG,SAAS,GACdH,EAAKI,QAAQ,GACbJ,EAAKK,SAAS,GACdL,EAAKM,WAAW,GAChBN,EAAKO,WAAW,GAChB9F,KAAKuF,KAAOA,E,oDAELzG,GAEP,OADAkB,KAAKuF,KAAKQ,QAAQ/F,KAAKuF,KAAKS,YAAYlH,GACjCkB,KAAKuF,KAAKU,qB,iBAINX,E,odCff,OAEMY,E,mOACeC,GAMjB,IALA,IAAIC,EAAMD,EACNE,EAAYD,EAAI1E,WAChB4E,EAAM,IAAIC,WAAWF,GACrBG,EAAS,EAEJ3I,EAAI,EAAGA,EAAIwI,EAAWxI,IACpB,GAALA,GACa,IAAXuI,EAAIvI,IAA8B,IAAfuI,EAAIvI,EAAI,IAA8B,IAAfuI,EAAIvI,EAAI,KAIxDyI,EAAIE,GAAUJ,EAAIvI,GAClB2I,KAGF,OAAO,IAAID,WAAWD,EAAI9E,OAAQ,EAAGgF,K,wCAGtBL,GACf,IAAIM,EAAOP,UAAUQ,WAAWP,GAC5BQ,EAAK,IAAIC,UAAOH,GAGhBI,GADJF,EAAG/D,WACc+D,EAAG/D,YAEhBkE,GADJH,EAAG/D,WACY+D,EAAG/D,YAGdmE,GAFJJ,EAAGK,UAEkBd,UAAUe,iBAAiBJ,IAC5CK,EAAehB,UAAUiB,eAAeL,GACxCM,EAAoB,EACpBC,EAAgB,IAEhBC,EAAY,EAEhB,IAAmB,MAAfT,GAAqC,MAAfA,GAAqC,MAAfA,GAC/B,MAAfA,GAAqC,KAAfA,GAAoC,KAAfA,GAC5B,KAAfA,GAAoC,MAAfA,GAAqC,MAAfA,GAC5B,MAAfA,GAAqC,MAAfA,KAEI,KAD1BO,EAAoBT,EAAGK,YAErBL,EAAGY,SAAS,GAEVH,GAAqB,IACvBC,EAZsB,CAAC,EAAG,IAAK,IAAK,KAYAD,IAGtCE,EAAYX,EAAGK,UAAY,EAC3BL,EAAGK,UACHL,EAAGY,SAAS,GACRZ,EAAGa,YAEL,IADA,IAAIC,EAA4C,IAAtBL,EAA2B,EAAI,GAChDvJ,EAAI,EAAGA,EAAI4J,EAAoB5J,IAClC8I,EAAGa,YAEHtB,UAAUwB,iBAAiBf,EADzB9I,EAAI,EACyB,GAEA,IAMzC8I,EAAGK,UACCW,EAAqBhB,EAAGK,UAC5B,GAA2B,IAAvBW,EACFhB,EAAGK,eACE,GAA2B,IAAvBW,EAA0B,CACnChB,EAAGY,SAAS,GACZZ,EAAGiB,UACHjB,EAAGiB,UAEH,IADA,IAAIC,EAAwClB,EAAGK,UACtCnJ,EAAI,EAAGA,EAAIgK,EAAuChK,IACzD8I,EAAGiB,UAGPjB,EAAGK,UACHL,EAAGY,SAAS,GAEZ,IAAIO,EAA0BnB,EAAGK,UAC7Be,EAAiCpB,EAAGK,UAEpCgB,EAAsBrB,EAAGY,SAAS,GAMlCU,GALwB,IAAxBD,GACFrB,EAAGY,SAAS,GAEdZ,EAAGY,SAAS,GAEiB,GACzBW,EAA0B,EAC1BC,EAAwB,EACxBC,EAA2B,EAU3BC,GARsB1B,EAAGa,aAE3BS,EAAyBtB,EAAGK,UAC5BkB,EAA0BvB,EAAGK,UAC7BmB,EAAwBxB,EAAGK,UAC3BoB,EAA2BzB,EAAGK,WAGhB,GAAGsB,EAAa,EAC5BC,EAAM,EAAGC,GAAY,EAAMC,EAAU,EAAGC,EAAU,EA0ClDC,GAxC8BhC,EAAGa,aAE/Bb,EAAGa,aAKkB,GAJnBoB,EAAmBjC,EAAG/D,aAIEgG,EAAmB,IAC7CP,EAJgB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,EAAG,GAInDO,EAAmB,GAC3CN,EAJgB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAIjDM,EAAmB,IACd,MAArBA,IACTP,EAAY1B,EAAG/D,YAAc,EAAI+D,EAAG/D,WACpC0F,EAAa3B,EAAG/D,YAAc,EAAI+D,EAAG/D,aAIrC+D,EAAGa,YACLb,EAAGa,WAEDb,EAAGa,aACLb,EAAGY,SAAS,GACRZ,EAAGa,YACLb,EAAGY,SAAS,KAGZZ,EAAGa,aACLb,EAAGK,UACHL,EAAGK,WAEDL,EAAGa,aACDqB,EAAoBlC,EAAGY,SAAS,IAChCuB,EAAanC,EAAGY,SAAS,IAC7BiB,EAAY7B,EAAGa,WAIfe,GAAME,EAFIK,IAEMJ,EADc,EAApBG,KAKC,GAKXE,GAJc,IAAdV,GAAkC,IAAfC,IACrBK,EAAWN,EAAYC,GAGP,GAAGU,EAAc,EAW/BC,GARFD,EAFwB,IAAtB5B,GACF2B,EAAc,EACA,EAAIf,IAIlBe,EAFoC,IAAtB3B,EAA2B,EAAI,GACT,IAAtBA,EAA2B,EAAI,IAErB,EAAIY,IAGoB,IAA/BF,EAA0B,IACzCoB,EAAmF,IAAtCnB,EAAiC,IAA9D,EAAIC,GAKpBmB,GAHJF,IAAgBhB,EAAyBC,GAA2Ba,EACpEG,IAAiBf,EAAwBC,GAA4BY,EAEjDvG,KAAK2G,KAAKH,EAAcN,IAK5C,OAHAhC,EAAG0C,UACH1C,EAAK,KAEE,CACLI,eAAgBA,EAChBG,aAAcA,EACdI,UAAWA,EACXD,cAAeA,EACfiC,qBAAsBpD,UAAUqD,sBAAsBlC,GAEtDmC,WAAY,CACVC,MAAOjB,EACPD,IAAKA,EACLG,QAASA,EACTD,QAASA,GAGXiB,UAAW,CACTC,MAAOtB,EACPuB,OAAQtB,GAGVuB,WAAY,CACVF,MAAOV,EACPW,OAAQV,GAGVY,aAAc,CACZH,MAAOR,EACPS,OAAQV,M,wDAKWvC,EAAIpE,GAG3B,IAFA,IAAIwH,EAAa,EAAGC,EAAa,EAExBnM,EAAI,EAAGA,EAAI0E,EAAO1E,IAKzBkM,EAA6B,KAF3BC,EAFiB,IAAfA,GAEYD,EADApD,EAAGiB,UACwB,KAAO,IAEpCoC,GAAoBD,EAAaC,I,wDAI1BnD,GACvB,OAAQA,GACN,KAAK,GACH,MAAO,WACT,KAAK,GACH,MAAO,OACT,KAAK,GACH,MAAO,WACT,KAAK,IACH,MAAO,OACT,KAAK,IACH,MAAO,SACT,KAAK,IACH,MAAO,UACT,KAAK,IACH,MAAO,UACT,QACE,MAAO,a,oDAIUC,GACrB,OAAQA,EAAW,IAAImD,QAAQ,K,kEAGHC,GAC5B,OAAQA,GACN,KAAK,IACH,MAAO,QACT,KAAK,IACH,MAAO,QACT,KAAK,IACH,MAAO,QACT,QACE,MAAO,a,8CAIOC,GAClB,IAAIC,EAAO,GAoBPC,GAnBAF,GAAaA,EAAUN,aACzBO,EAAKE,WAAaH,EAAUN,WAAWF,MACvCS,EAAKG,YAAcJ,EAAUN,WAAWD,OACxCQ,EAAKI,aAAeL,EAAUL,aAAaH,MAC3CS,EAAKK,cAAgBN,EAAUL,aAAaF,QAG9CQ,EAAKM,QAAUP,EAAUpD,eACzBqD,EAAKO,MAAQR,EAAUjD,aACvBkD,EAAKQ,SAAWT,EAAU7C,UAC1B8C,EAAKS,aAAeV,EAAU9C,cAE9B+C,EAAKU,SAAW,CACdnB,MAAOQ,EAAUT,UAAUC,MAC3BC,OAAQO,EAAUT,UAAUE,QAG9BQ,EAAKW,UAAYZ,EAAUX,WAEdY,EAAKW,UAAUrC,SACxBsC,EAASZ,EAAKW,UAAUtC,QAC5B2B,EAAKa,kBAAoBxI,KAAKC,MAAM0H,EAAKc,WAAab,EAASW,Q,uBAIpD9E,E,mGC7RciF,EAAhBA,cAAgB,CACzB,cAAgB,gBAChB,UAAY,YACZ,YAAc,cACd,eAAkB,kBAGIC,EAAbA,WAAa,aAEMC,EAAnBA,iBAAmB,CAC5BC,MAAM,QACNC,WAAW,aACXC,OAAO,W,6BCPX5N,EAAOD,QAAU,SAAUmB,GAAS,OAAOA,U,6BCDvC2M,EAEJ,SAASC,uBAAuBC,GAAO,OAAOA,GAAOA,EAAI1M,WAAa0M,EAAM,CAAEC,QAASD,GAFxED,CAFD/H,EAAQ,KAMtB/F,EAAOD,QAAU8N,EAASG,S,wXCRpBhF,E,WACJ,gBAAaT,I,4GAAY,cACvBnG,KAAK6L,IAAM,SACX7L,KAAK8L,QAAU3F,EACfnG,KAAK+L,aAAe,EACpB/L,KAAKgM,YAAc7F,EAAWzE,WAC9B1B,KAAKiM,WAAqC,EAAxB9F,EAAWzE,WAC7B1B,KAAKkM,aAAe,EACpBlM,KAAKmM,qBAAuB,E,yDAI5BnM,KAAK8L,QAAU,O,0DAIf,IAAIM,EAAkBpM,KAAKgM,YAAchM,KAAK+L,aAK1CM,EAAY5J,KAAK6J,IAAI,EAAGF,GACxBG,EAAO,IAAIhG,WAAW,GAC1BgG,EAAKC,IAAIxM,KAAK8L,QAAQW,SAASzM,KAAK+L,aAAc/L,KAAK+L,aAAeM,IACtErM,KAAKkM,aAAe,IAAI5J,SAASiK,EAAK/K,QAAQ4B,UAAU,GAExDpD,KAAK+L,cAAgBM,EACrBrM,KAAKmM,qBAAmC,EAAZE,I,wCAGpBnM,GACR,IAAIwM,EAAOjK,KAAK6J,IAAItM,KAAKmM,qBAAsBjM,GAC3CyM,EAAO3M,KAAKkM,eAAkB,GAAKQ,EACvC,GAAW,GAAPxM,EACF,MAAM,IAAI0M,MAAM,2CAUlB,OARA5M,KAAKmM,sBAAwBO,EACG,EAA5B1M,KAAKmM,qBACPnM,KAAKkM,eAAiBQ,EAC0B,EAAvC1M,KAAKgM,YAAchM,KAAK+L,cACjC/L,KAAK6M,mBAII,GADXH,EAAOxM,EAAOwM,IACE1M,KAAKmM,qBACZQ,GAAQD,EAAO1M,KAAKuH,SAASmF,GAE7BC,I,0CAKT,OAA4B,IAArB3M,KAAKuH,SAAS,K,0CAIrB,OAAOvH,KAAKuH,SAAS,K,0DAKrB,IADA,IAAIuF,SACCA,EAAY,EAAGA,EAAY9M,KAAKmM,qBAAsBW,IACzD,GAAyD,IAApD9M,KAAKkM,aAAgB,aAAeY,GAGvC,OAFA9M,KAAKkM,eAAiBY,EACtB9M,KAAKmM,sBAAwBW,EACtBA,EAIX,OADA9M,KAAK6M,mBACEC,EAAY9M,KAAK+M,qB,wCAIxB,IAAIC,EAAehN,KAAK+M,mBACxB,OAAO/M,KAAKuH,SAASyF,EAAe,GAAK,I,wCAIzC,IAAIlO,EAAQkB,KAAKgH,UACjB,OAAY,EAARlI,EACMA,EAAQ,IAAO,GAEf,GAAKA,IAAU,O,oBAKd8H,E,odCvFf,OAEMqG,E,WACJ,mB,4GAAe,cACbjN,KAAKwB,OAAS,IAAI+E,WAAW,G,qDAEb,IAChB,IAAIjC,EAAOtE,KADK,mBAARwB,EAAQ,qBAARA,EAAQ,gBAEhBA,EAAO0L,QAAQ,SAAArL,GACTA,EACFyC,EAAK9C,QAAS,aAAO+E,WAAYjC,EAAK9C,OAAQK,GAE9C6B,OAAOyJ,QAAQC,MAAMvL,Q,+CAIP/C,GAClB,OAAO,IAAIyH,WAAW,CACnBzH,GAAS,EAAK,IACP,IAARA,M,8CAGgBA,GAClB,OAAO,IAAIyH,WAAW,CACpBzH,GAAS,GACRA,GAAS,GAAM,IACfA,GAAS,EAAK,IACP,IAARA,Q,oBAKSmO,E,kaChCf,M,yBACA,MACA,O,yBACA,O,wEAEMI,E,WACJ,cAAa7J,EAAK8J,EAAOC,EAAUC,GAAoB,IAAVC,EAAU,uDAAJ,I,4GAAI,aACrD,aAAazN,MACb0D,OAAO2J,KAAOA,KACdrN,KAAKwD,IAAMA,EACXxD,KAAKsN,MAAQA,EACbG,EAAIpN,MAAQiN,EAAM,GAClBG,EAAIpM,IAAMiM,EAAM,GAChBtN,KAAK0N,UAAe1N,KAAKwD,IAAzB,UAAsC8J,EAAM,GAA5C,IAAkDA,EAAM,GACxDtN,KAAK2N,SAAWF,EAAIE,SAEhBN,KAAKO,MAAMC,KAAK,SAAAhM,GAAA,OAAQA,EAAK2B,MAAQA,GAAOsK,KAAKC,UAAUlM,EAAKyL,SAAWQ,KAAKC,UAAUT,IAAWzL,EAAK8L,WAAaF,EAAIE,aAI/H3N,KAAKuN,SAAWA,EAChBvN,KAAKgO,GAAKhO,KAAK2N,SAAWL,EAAMW,KAAK,KACrCjO,KAAKkO,SAAU,EACflO,KAAKmO,UAAW,EAChBnO,KAAKoO,WAAW5K,EAAK8J,EAAOE,I,2DAEnBhK,EAAK8J,EAAOE,GACrB,IAAIa,EAAM,IAAI3K,OAAO4K,eASjBhK,GARJ+J,EAAIE,OAASvO,KACbqO,EAAIG,aAAe,cACnBH,EAAII,gBAAkBzO,KAAKyO,kBAAmB,EAC9CJ,EAAIK,KAAK,MAAOlL,GACY,mBAAlBxD,KAAKuN,UACbvN,KAAKuN,SAASc,EAAK7K,GAErB6K,EAAIM,iBAAiB,QAArB,SAAuCrB,EAAM,GAA7C,IAAmDA,EAAM,IAC9CtN,MACXqO,EAAIO,mBAAqB,SAAUC,GAEV,IAAnBR,EAAIS,aACJxK,EAAKyK,SAAU,aAAmBV,GAElC/J,EAAK0K,OAASX,EAAIW,QAIlBX,EAAIS,YAIVT,EAAIY,OAAS,WACQ,MAAfZ,EAAIW,QAAiC,MAAfX,EAAIW,OACxBxB,GAAYA,aAAoBzL,UAClCyL,EAASa,EAAIa,UAGG,MAAfb,EAAIW,OACL1K,EAAKQ,KAAKqG,gBAAcgE,eAExB7K,EAAK8K,eAAe/D,mBAAiBE,YAGzC8C,EAAIE,OAAOc,UAEbhB,EAAIiB,QAAU,SAAUT,GACtBR,EAAIE,OAAOzJ,KAAK,QAAS,IAAIjE,UAAO,UAAW,GAAI,CAACC,KAAM,GAAIC,OAAQ,qBAAsBC,IAAK6N,EAAEU,QAAS/L,SAC5G6K,EAAIE,OAAOc,UAEbhB,EAAImB,QAAU,WACZnB,EAAIE,OAAOc,UAER/K,EAAK6J,WACR7J,EAAK+J,IAAMA,EACXhB,KAAKO,MAAM1M,KAAKoD,IAElBA,EAAKmL,W,sCAGLzP,KAAKqO,IAAIqB,QACT1P,KAAKoP,eAAe/D,mBAAiBG,QACrCxL,KAAKmO,UAAW,I,oDAGHwB,GACb3P,KAAK8E,KAAKsG,aAAY,CAACuE,OAAOnM,IAAKxD,KAAK0N,UAAWoB,WAAY9O,KAAKqO,IAAIS,WAAYE,OAAQhP,KAAKqO,IAAIW,W,sCAG7F,WACR3B,KAAKO,MAAMgC,OAAO,SAAC/N,EAAMgO,GACvB,OAAIhO,EAAK2B,MAAQ,EAAKA,KAAO3B,EAAKmM,KAAO,EAAKA,KAC5CX,KAAKO,MAAM/I,OAAOgL,EAAK,IAChB,KAKX7P,KAAKyP,W,sCAIL,IAAIK,EAAQzC,KAAKO,MACbmC,EAASD,EAAMF,OAAO,SAAC/N,GAAD,OAAUA,EAAKqM,UACrC8B,EAAOF,EAAMF,OAAO,SAAA/N,GAAA,OAASA,EAAKqM,UAClC+B,EAAM5C,KAAK6C,MAAQH,EAAOnL,OAC9BoL,EAAK9C,QAAQ,SAACrL,EAAMgO,GACdA,EAAMI,GACRpO,EAAKsO,U,gCAMmB,IAAxBnQ,KAAKqO,IAAIS,YACX9O,KAAKkO,SAAU,EACflO,KAAKqO,IAAI+B,QAETpQ,KAAKqP,Y,mCAOK1B,GAEZ,IADA,IAAIC,EAAQP,KAAKO,MACT/P,EAAI+P,EAAMhJ,OAAS,GAAQ,EAAL/G,EAAQA,IAAI,CACxC,IAAIgE,EAAO+L,EAAM/P,GACdgE,EAAKqM,SAAWrM,EAAK8L,WAAaA,GACnC9L,EAAKwO,SAEPzC,EAAM/I,OAAOhH,EAAG,Q,QAKtBwP,EAAKO,MAAQ,GACbP,EAAK6C,MAAQ,E,UAEE7C,E,m4BC1If,M,yBACA,O,yBACA,O,yBACA,OACA,Q,yBACA,O,yBACA,OACA,O,yBACA,O,wEAEA,IAAMiD,EAAY,YAEZC,EAAU9M,UAAO8M,QAEnBC,EAAU,SAAVA,QAAWC,EAAQC,GACjBA,EAAItG,KAAKuG,QAAUF,EAAOG,YAAc,IAExBH,EAAOI,SAAWJ,EAAOG,YAC1B,KACfH,EAAOK,IAAIC,cACXN,EAAOO,kBAKPC,E,WACJ,mBAAaC,I,4GAAS,iBACpB,IAAIC,GAAmB,EADH,IAEjBD,EAAQE,UAAYF,EAAQG,aAC7BH,EAAQE,UAAW,EACnBF,EAAQI,UAAW,EAEnBH,EADAD,EAAQG,WAAY,G,2LALF,wEAQdH,KARc,OAUpB,EAAKK,iBAAmB,GACxB,EAAKC,gBAAkB,IAAIC,UAC3B,EAAKC,iBAAmBR,EAAQS,iBAAmB,EACnD,EAAKC,UAAYX,UAAUY,WAC3B,EAAKC,qBAAuB,EAAKC,iBAAiB1S,KAAtB,GAC5B,EAAK2S,eAAiB,EAAKC,WAAW5S,KAAhB,GACtB,EAAK6S,eAAiB,EAAKC,WAAW9S,KAAhB,GACtB,EAAK+S,eAAiB,EAAKC,WAAWhT,KAAhB,GACtB,EAAKiT,aAAe,EAAKC,SAASlT,KAAd,GACpB,EAAKmT,eAAiB,EAAKC,WAAWpT,KAAhB,GACtB,EAAKqT,QAAU,EAAKC,UAAUtT,KAAf,GACf,EAAKuT,qBAAuB,EAAKC,iBAAiBxT,KAAtB,GAC5B,EAAKyT,sBAAwB,EAAKC,kBAAkB1T,KAAvB,GAC7B,EAAK2T,eAAiB9B,EAAQ+B,eAAiB,GAC/C,EAAKC,kBAAoB/B,EACzB,EAAKgC,sBAAwBhC,EAC7B,EAAKiC,MAAMC,iBAAiBlI,gBAAcmI,eAAgB,EAAKxB,sBAC/D,EAAKyB,0BACL,EAAKC,iBAEL,EAAKnP,KAAK,QAAS,WACjB,EAAKoP,YAAc,IAAIC,UAAJ,EAAkB,EAAKC,QAC1ClQ,UAAOmQ,KAAK1P,GAAZ,EAAqB,oBAAqB,WACxC,EAAKuP,YAAYI,sBAjCD,E,qVADApQ,W,mEAwCpB,IAAIgN,EAASzQ,KACT8T,EAAOrD,EAAOkD,OAAOI,YAAc,WAAc,OAAO,GAC5D,GAAIC,UAAIC,YAAY,8CAA+C,CACjE,IAAKH,EAAK9V,KAAKyS,GACb,OAAO,EAETlS,OAAOC,eAAeiS,EAAQ,MAAO,CACnC/R,IADmC,eAEjC,OAAO+R,EAAOyD,YAEhB1H,IAJmC,aAI9BhJ,GACHiN,EAAOK,IAAIC,cACXN,EAAOgC,aACPhC,EAAOkD,OAAOrC,SAAWb,EAAOa,UAAW,EAC3Cb,EAAOkD,OAAOnQ,IAAMA,EAEpBiN,EAAO0D,MAAM3Q,GAAK4Q,KAAK,SAACC,GACtB,IAAI3D,EAAM2D,EAAO,GACbvD,EAAMuD,EAAO,GACjB5D,EAAO6D,UAAU,UAAW,WAC1B7D,EAAO8D,OACP9D,EAAO+D,QAAQ,UAAW/D,EAAO2B,kBAEnC3B,EAAOgE,iBACPhE,EAAOiE,cAAc5D,EAAItN,KACzBiN,EAAOC,IAAMA,EACbD,EAAOK,IAAMA,GAEZ,SAAA6D,GACDlE,EAAOmE,aAAaD,MAGxB3Q,cAAc,IAGhByM,EAAO+D,QAAQ,QAAS/D,EAAO6B,cAE/B7B,EAAO6D,UAAU,UAAW7D,EAAO+B,iBAE/B/B,EAAOkD,OAAOtC,WAAaZ,EAAOkD,OAAOvC,WAC3CX,EAAOpQ,MAAMoQ,EAAOkD,OAAOnQ,Q,kCAK3BA,GACJ,IAAIiN,EAASzQ,KA0BT6U,GAzBJrR,EAAMA,GAAYiN,EAAOkD,OAAOnQ,IAC5BiN,EAAOkD,OAAOrC,UAAsC,UAA1B7N,UAAO8M,QAAQuE,UAAwBrR,UAAOmQ,KAAKmB,SAAStE,EAAOuE,KAAM,sBACrGvR,UAAOmQ,KAAKqB,SAASxE,EAAOuE,KAAM,qBAEpCvE,EAAO6D,UAAU,QAAS,WACpB7Q,UAAOmQ,KAAKmB,SAAStE,EAAOuE,KAAM,sBACpCvR,UAAOmQ,KAAKsB,YAAYzE,EAAOuE,KAAM,uBAGzCvE,EAAO+D,QAAQ,aAAc,WACvB/Q,UAAOmQ,KAAKmB,SAAStE,EAAOuE,KAAM,uBACpCvR,UAAOmQ,KAAKsB,YAAYzE,EAAOuE,KAAM,wBAGzCvE,EAAO6D,UAAU,UAAW,WAK1B,IACMjU,EALFoD,UAAOmQ,KAAKmB,SAAStE,EAAOuE,KAAM,sBACpCvR,UAAOmQ,KAAKsB,YAAYzE,EAAOuE,KAAM,qBAGf,WAApBzE,EAAQuE,SAAwBrE,EAAO0E,UAAY1E,EAAOkD,OAAOrC,WAC/DjR,EAAQoQ,EAAO0E,SAAS9U,MAAM,GAClCoQ,EAAOG,YAAcvQ,EAAQ,MAIfoQ,EAAO0D,MAAM3Q,IAC/BqR,EAAY7G,GAAK,OACjByC,EAAO2E,mBAAmBP,GAC1BA,EAAYT,KAAK,SAAAC,GAEf5D,EAAOe,gBAAgB6D,UACvB5E,EAAO6E,YAAa,EACpB7E,EAAO8E,sBAAsBV,GAC7B,IAAInE,EAAM2D,EAAO,GAAQvD,EAAMuD,EAAO,GACnC5D,EAAOkD,OAAOrC,UACfb,EAAO6D,UAAU,UAAW,WAC1B7D,EAAO8D,SAGX9D,EAAOiE,cAAc5D,EAAItN,KACzBiN,EAAOC,IAAMA,EACbD,EAAOK,IAAMA,EACbrN,UAAOmQ,KAAK1P,GAAGwM,EAAK,QAAS,SAAAiE,GAC3BlE,EAAOmE,aAAaD,KAEtBlE,EAAO+D,QAAQ,UAAW/D,EAAOuB,gBACjCvB,EAAO6D,UAAU,UAAW7D,EAAOyB,gBACnCzB,EAAO+D,QAAQ,UAAW/D,EAAO2B,gBAEjC3B,EAAOgE,kBAEN,SAAAE,GACEA,IAAQrE,IACTG,EAAOiE,cAAclR,GACrBiN,EAAOmE,aAAaD,Q,0CAKhBnR,GACR,IAAIiN,EAASzQ,KACTwV,EAAM,IAAIC,UAAIjS,EAAKiN,EAAOkD,OAAOpG,SAAUkD,EAAQA,EAAOkD,OAAO+B,YAAa,CAChF/H,SAAU8C,EAAOmB,YAEflB,EAAMD,EAAOC,IACjBjN,UAAOmQ,KAAK1P,GAAGsR,EAAK,YAAa,WACf9E,EAAIiF,SAApB,IACIC,EAAUnF,EAAOG,YAEjBvQ,EADQqQ,EAAIiF,SACM/T,KAAK,SAAAC,GAAA,OAA4B,EAApBA,EAAK,GAAK+T,IAAa,GACtDvU,EAAMoP,EAAOoF,iBAAiBpF,EAAOqF,WAAW,GAClC,EAAdzU,EAAMhB,GAAiC,WAApBkQ,EAAQuE,SAC7BrE,EAAOK,IAAIiF,aAAa1V,EAAOgB,GAE5BoC,UAAOmQ,KAAKmB,SAAStE,EAAOuE,KAAM,mBACrCvE,EAAO3L,KAAK,aAEd2L,EAAOC,IAAM8E,EACb/E,EAAOK,IAAIkF,aAAaR,EAAIS,SAASvF,EAAItG,SAE3C3G,UAAOmQ,KAAK1P,GAAGsR,EAAK,QAAS,SAAAb,GAC3BlE,EAAOmE,aAAaD,O,0DAKnB3U,KAAK0Q,KAAO1Q,KAAK0Q,IAAIiF,UACtB3V,KAAK0Q,IAAIiF,SAASzI,QAAQ,SAAArL,GAExBA,EAAKqU,YAAa,M,0DAMlBlW,KAAKsV,YAGJtV,KAAKmT,uBACNnT,KAAKyU,iBAEPzU,KAAKmT,uBAAwB,GAL7BnT,KAAKoG,IAAMpG,KAAK2T,OAAOnQ,M,4DAUtBxD,KAAKkT,oBACNlT,KAAKgR,gBACLhR,KAAKmT,uBAAwB,K,wEAK/BzP,OAAO2P,iBAAiB,SAAUrT,KAAK4S,sBACvClP,OAAO2P,iBAAiB,UAAWrT,KAAK8S,yB,4EAIxCpP,OAAOyS,oBAAoB,SAAUnW,KAAK4S,sBAC1ClP,OAAOyS,oBAAoB,UAAWnW,KAAK8S,yB,kDAG/BtP,GACZ,oGAAYA,K,kCAGRA,GACJ,IACI4S,EAAU,IAAI3E,UAGlB,OAJazR,KAGNqW,SAAS7S,EAAK4S,GACdA,I,wCAGA1F,EAAKtG,EAAMgM,GAClB,IAAI3F,EAASzQ,KACPsW,GAA2C,EAAnClM,EAAKmM,WAAWC,QAAQ,SAAiBpM,EAAKqM,OAAiD,EAAzCrM,EAAKqM,KAAKC,YAAYF,QAAQ,QAE9FG,IAAavM,EAAKmM,WAClBK,IAAaxM,EAAKyM,WAClBC,SAEFA,EADCH,GAAYC,EACLN,EAAQ,iDAAiD,6CAC1DK,EACCL,EAAQ,sCAAsC,kCAE9C,gCAGNxF,EAAM,IAAIkD,UAAI8C,EAAOrG,EAAOkD,OAAOoD,WACvCtT,UAAOmQ,KAAK1P,GAAG4M,EAAK,aAAc,WAChC,IAAMkG,EAAUtG,EAAIuF,SAASvF,EAAItG,MACjC0G,EAAIkF,aAAagB,GACjBvT,UAAOmQ,KAAKvP,KAAKyM,EAAK,YAAa,WACjCL,EAAOwG,gBAGXxT,UAAOmQ,KAAK1P,GAAG4M,EAAK,QAAS,SAAUjC,GACrCuH,EAAQc,OAAOrI,KAEjBuH,EAAQf,QAAQ,CAAC3E,EAAKI,M,wCAGftN,EAAK4S,GAAQ,WAEhB1F,EAAM,IAAI+E,UAAIjS,EADLxD,KACiB2T,OAAOpG,SADxBvN,UACiD2T,OAAO+B,YAAa,CAChF/H,SAFW3N,KAEM4R,YAGnBnO,UAAOmQ,KAAKvP,KAAKqM,EAAK,YAAa,SAAAtG,GACjC,EAAK+M,SAASzG,EAAKtG,EAAMgM,KAG3B3S,UAAOmQ,KAAK1P,GAAGwM,EAAK,QAAS,SAAC7B,GAC5BuH,EAAQc,OAAOrI,O,4CAIU,IAIvB4B,EAJI5S,EAAmB,uDAAf,EAAG0H,EAAY,uDAAL,MAClB6R,UAAUC,SAGV5G,EAASzQ,MACF0Q,MAGXnL,EAAOA,GAAckL,EAAOG,YAC5BH,EAAOC,IAAI4G,KAAK/R,EAAW,GAAJ1H,GAASuW,KAAK,SAAA5S,GACnC,IACMsP,EADFtP,GAAUiP,EAAOK,OACfA,EAAML,EAAOK,KACbyG,UAAW,EACf9T,UAAOmQ,KAAKvP,KAAKyM,EAAK,YAAa,WAIjCA,EAAIyG,UAAW,EACf9G,EAAO3L,KAAK,uBAEdgM,EAAIkF,aAAaxU,KAElB,WACG3D,EAAI,IACN2Z,WAAW,WACT/G,EAAOwG,UAAUpZ,EAAI,IACpB,U,oDAMP,IAKMyP,EACAmK,EANFhH,EAASzQ,KACT8Q,EAAML,EAAOK,IACbJ,EAAMD,EAAOC,IACbI,IAAQA,EAAIyG,UAAY7G,GAAOA,EAAIgH,cACjC/B,EAAWjF,EAAIiF,SACfrI,EAAQmD,EAAOoF,iBAAiBpF,EAAOqF,WACvC2B,EAAehH,EAAOG,YAAcH,EAAOiB,iBACjB,EAA1BpE,EAAM,GAAKmK,IAGf9B,EAASgC,MAAM,SAAC9V,EAAMgO,GACpB,QAAGhO,EAAKqU,aAEgB,IAAb5I,EAAM,KACZzL,EAAK,IAAM4O,EAAOG,cAAgBH,EAAOG,YAAc/O,EAAK,IAAM4O,EAAOI,SAAWhP,EAAK,GAAK,OAC/F4O,EAAOwG,UAAU,EAAGpV,EAAK,KAClB,KAKLA,EAAK,IAAMyL,EAAM,IAAMzL,EAAK,GAAK,GAAKyL,EAAM,IAAOA,EAAM,IAAMzL,EAAK,IAAMyL,EAAM,IAAMzL,EAAK,GAAK,KAClG4O,EAAOwG,UAAU,EAAGpV,EAAK,KAClB,MAMb2O,EAAQC,EAAQC,O,8CAMlB,IAAID,EAASzQ,KACT4V,EAAUnF,EAAOG,YACrBH,EAAOmH,aAAahC,GACjBA,EAAU,EAAInF,EAAOI,UAAUJ,EAAOmH,aAAahC,EAAU,GAC/C,EAAdA,EAAU,GAAOnF,EAAOmH,aAAahC,EAAU,K,0CAIlD5V,KAAKuE,IAAI,UAAWvE,KAAKoS,gBACzBpS,KAAKgR,kB,4CAIL,IAAIP,EAASzQ,KACbyQ,EAAOgC,aACPhC,EAAO0D,MAAM1D,EAAOkD,OAAOnQ,KAAK4Q,KAAK,SAACC,GACpC,IAAI3D,EAAM2D,EAAO,GACbvD,EAAMuD,EAAO,GACjB5D,EAAOgE,iBACPhE,EAAOiE,cAAc5D,EAAItN,KACzBiN,EAAOC,IAAMA,EACbD,EAAOK,IAAMA,EAEbL,EAAO6D,UAAU,UAAW,WAC1B7D,EAAO8D,OACP9D,EAAO+D,QAAQ,UAAW/D,EAAO2B,mBAElC,SAAAuC,GACDlE,EAAOmE,aAAaD,O,8CAKtB,IAAIlE,EAASzQ,KACbyQ,EAAO6E,YAAa,EACpB7E,EAAOoH,4BACPxK,UAAKyK,MAAMrH,EAAOmB,WACdnB,EAAOC,MACTD,EAAOC,IAAIrH,UACXoH,EAAOC,IAAM,MAEZD,EAAOK,KACRL,EAAOK,IAAIzH,UAEboH,EAAOsH,cACPtH,EAAOO,gBACPP,EAAOuH,0B,gDAGIrD,GACX,IAOIlE,EAPY,YAAbkE,EAAIsD,MAAwC,YAAlBtD,EAAIuD,WAGjB,UAAbvD,EAAIsD,MAAuC,UAAlBtD,EAAIuD,YAKhCvD,EAAInR,KADAiN,EAASzQ,MACIoG,IACbuO,EAAIpR,MAA4B,WAApB,EAAOoR,EAAIpR,OACrBkN,EAAOC,MACTiE,EAAIpR,KAAKC,IAAMiN,EAAOC,IAAIlN,IAC1BmR,EAAInR,IAAMiN,EAAOC,IAAIlN,IACrBiN,EAAOC,IAAIgH,aAAc,GAG7BjH,EAAO3L,KAAK,cAAe6P,GAC3BtH,UAAKyK,MAAMrH,EAAOmB,WACdnB,EAAOC,KAAOD,EAAOC,IAAIyH,aAC3B1H,EAAOC,IAAIyH,YAAYL,QAErBrH,EAAOG,cACTH,EAAO2H,aAAe3H,EAAOG,aAE3BH,EAAO4H,SACT5H,EAAOpQ,MAAQoQ,EAAO4H,OACtB5H,EAAO4H,OAAS,MAElB5H,EAAO6H,UAAY,KACnB7H,EAAOiC,QAAU,KAEjBjC,EAAOlM,IAAI,UAAWkM,EAAOuB,gBAC7BvB,EAAOlM,IAAI,UAAWkM,EAAOyB,gBAC7BzB,EAAOlM,IAAI,UAAWkM,EAAO2B,gBAC7B3B,EAAOlM,IAAI,QAASkM,EAAO6B,cAC3B7B,EAAOlM,IAAI,UAAWkM,EAAO+B,gBAE7B+F,QAAQzT,KAAK,QAAS6P,GACtBlE,EAAOrK,IAAMqK,EAAOkD,OAAOnQ,IAC3BiN,EAAO6D,UAAU,UAAW,WACtB7D,EAAO2H,eACT3H,EAAOG,YAAcH,EAAO2H,cAE9B3H,EAAO8D,Y,8CAMT,IAAIqB,EAAU5V,KAAK4Q,YACnB5Q,KAAKwY,aAAa5C,GAClBpF,EAAQxQ,KAAMA,KAAK0Q,O,gDAGRkF,GACZ5V,KAAKwY,aAAa5C,K,gDAGNA,GACX,IAAInF,EAASzQ,KACTmV,EAAW1E,EAAOqF,WAAarF,EAAO0E,SACtCsD,GAAc,EACd9C,EAAWlF,EAAOC,IAAIiF,SAC1B,GAAIR,EAASvQ,OAAQ,CACnB,IAAK,IAAI/G,EAAI,EAAG6a,EAAMvD,EAASvQ,OAAQ/G,EAAI6a,EAAK7a,IAC9C,GAAI+X,GAAWT,EAAS9U,MAAMxC,IAAM+X,GAAWT,EAAS9T,IAAIxD,GAAI,CAC9D4a,GAAc,EACd,MAGCA,GACH9C,EAASgC,MAAM,SAAC9V,EAAMgO,GACpB,QAAIhO,EAAK,IAAM+T,IAAY/T,EAAK,GAAK+T,GAAWnF,EAAOI,SAAWhP,EAAK,GAAK,OAC1E4O,EAAOwG,UAAU,EAAGpV,EAAK,KAClB,UAOb8T,EAASgC,MAAM,SAAC9V,EAAMgO,GACpB,QAAIhO,EAAK,IAAM+T,GAAW/T,EAAK,GAAK+T,KAClCnF,EAAOwG,UAAU,EAAGpV,EAAK,KAClB,O,8CASA7B,KACH2T,OAAOgF,SADJ3Y,KAEJ4Y,U,oDAST5Y,KAAKkT,mBAAoB,EADZlT,KAEH6Y,gBAFG7Y,KAGJ6Y,cAAcC,OAHV9Y,KAIJ6Y,cAAgB,Q,sDAKzB,IAAIpI,EAASzQ,KACbyQ,EAAOO,gBACPP,EAAOoI,cAAgB,IAAIE,UAAM,WAC5BtI,EAAOoI,eACRpI,EAAOuI,kBAGXvI,EAAOoI,cAAcI,UAAUxI,EAAOuC,gBACtChT,KAAKkT,mBAAoB,I,gDAKzB,IADalT,KAEAoT,OAFApT,KAEgBoT,MAAMhN,MAFtBpG,KAGAoT,MAAM8F,gBAAgB,OAHtBlZ,KAIAoT,MAAM+F,QAEjB,MAAO/L,O,4DAKQvN,GACjBG,KAAKuR,iBAAiBrQ,KAAKrB,K,kEAGPA,GAChBgQ,EAAO7P,KAAKuR,iBAAiBiF,QAAQ3W,IAC/B,EAAPgQ,GACD7P,KAAKuR,iBAAiB1M,OAAOgL,EAAK,K,sDAKpC7P,KAAKgR,gBACLhR,KAAK8E,KAAKqG,gBAAcgE,iB,oEAIU,EAA/BnP,KAAKuR,iBAAiB3M,QACvB5E,KAAKuR,iBAAiBrE,QAAQ,SAAAkJ,GAC5BA,EAAQc,OAAO5G,KAGnBtQ,KAAKuR,iBAAmB,K,wDAGTlR,GAAM,WAClBA,EACGL,KAAKwR,iBAGTxR,KAAKwR,gBAAgB4C,KAAK,WACxB,EAAKK,mBAGPzU,KAAKgR,kB,wCAKJhR,KAAK0Q,KACN1Q,KAAK0Q,IAAIrH,UAERrJ,KAAK8Q,KACN9Q,KAAK8Q,IAAIzH,UAERrJ,KAAKoT,OACNpT,KAAKoT,MAAM+C,oBAAoBhL,gBAAcmI,eAAgBtT,KAAK8R,sBAEpE,yG,gDAGWsH,GACXpZ,KAAK8E,KAAKqG,gBAAckO,UAAWD,K,sDAInCpZ,KAAK8E,KAAKqG,gBAAcmO,e,gCAOxB,OAAOtZ,KAAKwR,oB,aAGhBP,EAAUY,SAAW,EACrBZ,EAAUgD,YAAcA,cACxBhD,EAAUsI,qBAAuBA,uBACjCtI,EAAUuI,uBAAyBA,yBACnCvI,EAAU9F,cAAgBA,gB,UAEX8F,E,kaCtmBf,M,yBACA,O,yBACA,O,yBACA,O,yBACA,O,yBACA,O,yBACA,MACA,O,yBACA,M,wEAEMwE,E,WAMJ,aAAajS,EAAK+J,EAAUkD,GAA+C,IAAvCgJ,EAAuC,uDAA3BhX,KAAKiX,IAAI,GAAI,GAAIjM,EAAU,uDAAJ,I,4GAAI,YACzE,aAAazN,MACbA,KAAKwD,IAAMA,EACXxD,KAAKuN,SAAWA,EAChBvN,KAAK2Z,WAAaF,EAClBzZ,KAAKyQ,OAASA,EACdzQ,KAAKyN,IAAMA,EACXzN,KAAK2V,SAAW,GAChB3V,KAAK0X,aAAc,EACnB1X,KAAK4Z,OACLnW,UAAOmQ,KAAKvP,KAAKrE,KAAM,YAAaA,KAAK6Z,UAAUxa,KAAKW,O,sDAQH,WAA9CK,EAA8C,uDAAtC,EAAGgB,EAAmC,uDAA7BhB,EAAQL,KAAK2Z,WAAa,EAC9CrV,EAAOtE,KACX,OAAO,IAAI8Z,QAAQ,SAACzE,EAAS6B,GAC3B,IAAI6C,EAAO,IAAI1M,UAAK,EAAK7J,IAAK,CAC5BnD,EAAOgB,GACN,EAAKkM,SAAU,SAAChM,GACd+C,EAAK0V,cAGR3E,EAAQ9T,IACP+C,EAAKmJ,KAKRhK,UAAOmQ,KAAKvP,KAAK0V,EAAM5O,gBAAcgE,cAAe,WAClD7K,EAAKmM,QAAUnM,EAAKmM,OAAOwJ,mBAG7BxW,UAAOmQ,KAAKvP,KAAK0V,EAAM3O,aAAY,SAAA8O,GAEjChD,EAAO,CAACvH,KAAMuK,EAAOvK,KAAMX,OAAQkL,EAAOlL,e,4CASnC,IA0GPmL,EACAC,EAEAC,EACAC,EA9GO,OACPhW,EAAOtE,KACPua,EAAOva,KAAKwa,QACZC,EAAO7G,UAAK8G,QAAQH,EAAM,QAC1BI,EAAQ/G,UAAK8G,QAAQH,EAAM,QAC3BK,SACFC,SACEtE,SACFM,SACEiE,SACFC,SACEC,SACFC,SACAC,SACAxQ,SACAf,SACAC,SACEuR,SACFC,SACAC,SACEC,SAAUC,SACVC,EAAa,CAAC,EAAG,IAEnBb,EADG3V,MAAMyW,QAAQd,GAGnBA,EAFU,CAACA,IAELzN,QAAQ,SAAAwO,GACZ,IAOIC,EAiDEC,EACAC,EACAC,EA1DFC,EAAOnI,UAAK8G,QAAQgB,EAAM,QAC1BM,EAAOpI,UAAK8G,QAAQgB,EAAM,QACzBK,GAASC,GAKVL,EADO/H,UAAK8G,QAAQgB,EAAM,QACVtb,OAAO,GACH,SAApB2b,EAAKE,aAEHC,UADAC,EAAOvI,UAAK8G,QAAQgB,EAAM,WAG5BQ,EAAOtI,UAAK8G,QAAQgB,EAAM,SAGxBU,EAAOxI,UAAK8G,QAAQgB,EAAM,QAC9Bd,EAAYc,EACZZ,EAAiBkB,EAAK9Q,UAClBiR,GACF5F,EAAgBoF,EAASxb,KAAZ,IAAsByT,UAAKyI,MAAMF,EAAKzR,QAASyR,EAAKG,qBAAsBH,EAAKI,oBAAoBtO,KAAK,IACrH+M,EAAMmB,EAAKK,SACXhB,EAAa,CAACW,EAAKM,QAAQ/S,UAAUC,MAAOwS,EAAKM,QAAQ/S,UAAUE,QAC/DuS,EAAKM,QAAQ5S,aACfF,EAAQwS,EAAKM,QAAQ5S,WAAWF,MAChCC,EAASuS,EAAKM,QAAQ5S,WAAWD,QAEnCqR,EAAMkB,EAAKlB,KAAOkB,EAAKlB,IAAIyB,IAAI,SAAC7a,GAAD,OAAU8a,OAAOA,KAAK9a,KACrD6I,EAAUyR,EAAKzR,SACPwR,GACRX,EAAWW,EAAK3a,MACZqb,EAAOhJ,UAAK8G,QAAQgB,EAAM,WAE5BJ,EAAWsB,EAAKrb,KAChBoI,EAAQiT,EAAKjT,MACbC,EAASgT,EAAKhT,QAEhB2M,EAAgBoF,EAASxb,KAAZ,IAAsByT,UAAKyI,MAAMH,EAAKxR,QAASwR,EAAKI,qBAAsBJ,EAAKW,iCAAiC5O,KAAK,IAClIiN,EAAMgB,EAAKhB,KAAOgB,EAAKhB,IAAIwB,IAAI,SAAC7a,GAAD,OAAU8a,OAAOA,KAAK9a,KACrDmZ,EAAMkB,EAAKM,SAMXvB,EAAMiB,EAAKjB,KAAOiB,EAAKjB,IAAIyB,IAAI,SAAC7a,GAAD,OAAU8a,OAAOA,KAAK9a,KACrD6I,EAAUwR,EAAKxR,SAEf6L,KAAgBoF,EAASxb,KAEvBic,IAASzS,IACXA,EAAQyS,EAAKzS,MACbC,EAASwS,EAAKxS,SAGM,SAApBmS,EAAKE,aACPpB,EAAYa,EACRE,EAAOhI,UAAK8G,QAAQgB,EAAM,QAC1BG,EAAOjI,UAAK8G,QAAQgB,EAAM,QAC1BI,EAAelI,UAAK8G,QAAQgB,EAAM,GACtCX,EAAiBiB,EAAK9Q,UAEpB2L,EADE+E,EACcD,EAASxb,KAAZ,IAAsByT,UAAKyI,MAAMT,EAAKxb,OAAO,GAAGA,OAAO,GAAG0c,QAA1D,IAAwElB,EAAKxb,OAAO,GAAGA,OAAO,GAAGA,OAAO,GAAGD,KAExH0W,GAAgB8E,EAASxb,KAEvB2b,GAAgBA,EAAaiB,SAC/B1B,EAAgBS,EAAaiB,OAAOL,IAAI,SAAC7a,GAAD,OAAU8a,OAAOA,KAAK9a,MAE5Dga,IACFV,EAAeU,EAAKV,aACpBC,EAAaS,EAAKT,cAnEpB9W,EAAKQ,KAAK,QAAS,IAAIjE,UAAO,QAAS,GAAI,CAACC,KAAM,IAAKC,OAAQ,kBAAmByC,IAAKc,EAAKd,SAuE3FwX,IAGLhb,KAAK4a,UAAYA,EACjB5a,KAAK6a,UAAYA,GAAwB,KACrCmC,EAAOhd,KAAKid,OAAOrb,KAAK,SAAAC,GAAA,MAAsB,SAAdA,EAAK1B,OACrCga,EAAgBvG,UAAKsJ,iBAAiBtC,EAAWE,GACjDV,EAAgBS,EAAYjH,UAAKsJ,iBAAiBrC,EAAWE,GAAkBZ,EACnFna,KAAKmd,UAAYH,EAAK3c,MAClBga,EAAKra,KAAKod,eACV9C,EAAuBD,EAAGzV,OAAS,EACvCyV,EAAGnN,QAAQ,SAACrL,EAAMgO,GACZA,EAAMyK,EACR,EAAK3E,SAASzU,KAAK,CACjBW,EAAK0D,KAAKA,KAAOuV,EACjBT,EAAGxK,EAAM,GAAGtK,KAAKA,KAAOuV,IAG1B,EAAKnF,SAASzU,KAAK,CACjBW,EAAK0D,KAAKA,KAAOuV,EACjBL,EAAK5J,SAAW4J,EAAK4C,cAI3Brd,KAAKoK,KAAO,CACVmM,aACAM,aACAyG,WAAY7C,EAAK6C,WACjBC,WAAY9C,EAAK8C,WACjB1M,SAAU4J,EAAK5J,SAAW4J,EAAK4C,UAC/BA,UAAW5C,EAAK4C,UAChBlD,gBACAW,iBACAV,gBACAW,iBACApK,QAASlO,KAAK6J,IAAI6N,EAAeC,GACjCc,MACAF,MACAC,MACAtR,QACAC,SACAc,UACA8Q,aACAL,eACAC,aACAoC,YAAanC,EACbC,WACAC,WACA9N,IAAK,CACHmN,UAAW5a,KAAK4a,UAChBC,UAAW7a,KAAK6a,UAChBsC,UAAWnd,KAAKmd,UAChBxH,SAAU3V,KAAK2V,UAEjB8H,KAAMzd,KAAK0d,UAEb1d,KAAK8E,KAAK,YAAa9E,KAAKoK,S,kCAO5B,IAAI9F,EAAOtE,KACXsE,EAAKqZ,UAAUvJ,KAAK,SAAAtR,GAClB,IAAI8a,SACAC,EAAY,EACZtD,SACAuD,SACJ,IACEF,EAAS,IAAIG,UAAOjb,GACpB,MAAO+L,GAEP,OADAvK,EAAKQ,KAAK,QAAS+J,EAAE1O,KAAO0O,EAAI,IAAIhO,UAAO,QAAS,GAAI,CAACC,KAAM,IAAKC,OAAQ,aAAcC,IAAK6N,EAAEU,YAC1F,EAETjL,EAAK2Y,OAASa,EAAQF,EAAOE,MAC7BA,EAAMnG,MAAM,SAAA9V,GAEV,OADAgc,GAAahc,EAAK3B,KACA,SAAd2B,EAAK1B,OACPoa,EAAO1Y,EACPyC,EAAKkW,QAAUD,EACfjW,EAAKQ,KAAK,YAAayV,IAChB,KAKNA,KACCyD,EAAUJ,EAAOI,SAEE,SAAjBA,EAAQ7d,KACVmE,EAAKqZ,QAAQE,EAAWA,EAAYG,EAAQ9d,KAAO,IAAIkU,KAAK,SAAAtR,GAC1D,IAAI8a,SAEFA,EAAS,IAAIG,UAAOjb,GAKtBwB,EAAK2Y,OAAS3Y,EAAK2Y,OAAOgB,OAAOL,EAAOE,QACxCvD,EAAOqD,EAAOE,MAAMlO,OAAO,SAAAzN,GAAA,MAAoB,SAAbA,EAAIhC,QAC7ByE,QACPN,EAAKkW,QAAUD,EAAK,GACpBjW,EAAKQ,KAAK,YAAayV,IAEvBjW,EAAKQ,KAAK,QAAS,IAAIjE,UAAO,QAAS,GAAI,CAACC,KAAM,IAAKC,OAAQ,aAAcC,IAAK,yBAItFsD,EAAKQ,KAAK,QAAS,IAAIjE,UAAO,QAAS,GAAI,CAACC,KAAM,IAAKC,OAAQ,aAAcC,IAAK,uBAGpFsD,EAAKqZ,QAAQE,EAAW,IAAIzJ,KAAK,SAAAtR,GAC3B8a,EAAS,IAAIG,UAAOjb,GACpB8a,GACFtZ,EAAK2Y,OAAS3Y,EAAK2Y,OAAOgB,OAAOL,EAAOE,OACxCF,EAAOE,MAAMnG,MAAM,SAAA9V,GACjB,MAAkB,SAAdA,EAAK1B,OACPoa,EAAO1Y,EACPyC,EAAKkW,QAAUD,EACfjW,EAAKQ,KAAK,YAAayV,IAChB,MAMXjW,EAAKQ,KAAK,QAAS,IAAIjE,UAAO,QAAS,GAAI,CAACC,KAAM,IAAKC,OAAQ,aAAcC,IAAK,4BAKzFkd,MAAM,WACP5Z,EAAKQ,KAAK,QAAS,IAAIjE,UAAO,UAAW,GAAI,CAACC,KAAM,IAAKC,OAAQ,gBAAiBC,IAAK,wB,8DAI3C,IAA5Bb,EAA4B,uDAArB,QAASE,EAAY,aAALgB,EAAK,aAC1Cqa,EAAgB,UAATvb,EACPH,KAAK4a,UACL5a,KAAK6a,UACLsD,EAAOvK,UAAK8G,QAAQgB,EAAM,QAC1B0C,EAAOxK,UAAK8G,QAAQgB,EAAM,QAC1B2C,EAAOzK,UAAK8G,QAAQgB,EAAM,QAC1B4C,EAAO1K,UAAK8G,QAAQgB,EAAM,QAC1B6C,EAAmB,UAATpe,EAAmBH,KAAKwe,SAAW,KAC7CC,EAAmB,UAATte,EAAmBH,KAAK0e,cAAgB1e,KAAK2e,cACvDxB,EAAYnd,KAAKmd,UACjByB,EAAU,GACdvd,OAAcwd,IAARxd,EACFA,EACA+c,EAAKU,QAAQla,OACjB,GAAIvE,aAAiB2E,MACnB3E,EAAM6M,QAAQ,SAACrL,EAAMgO,GACnB+O,EAAQ1d,KAAK,CACX2O,IAAKhO,EACL3B,KAAMke,EAAKU,QAAQjd,GACnB0D,KAAMqO,UAAKmL,eAAeV,EAAME,EAAS1c,GACzCmd,OAAQpL,UAAKqL,iBAAiBd,EAAMG,EAAMF,EAAMvc,EAAMsb,EAAWsB,YAGhE,GAAY,IAARpd,EACT,IAAK,IAAIxD,EAAIwC,EAAOxC,EAAIwD,EAAKxD,IAC3B+gB,EAAQ1d,KAAK,CACX2O,IAAKhS,EACLqC,KAAMke,EAAKU,QAAQjhB,GACnB0H,KAAMqO,UAAKmL,eAAeV,EAAME,EAAS1gB,GACzCmhB,OAAQpL,UAAKqL,iBAAiBd,EAAMG,EAAMF,EAAMvgB,EAAGsf,EAAWsB,UAI9DO,EAASpL,UAAKqL,iBAAiBd,EAAMG,EAAMF,EAAM/d,EAAO8c,EAAWsB,GACvEG,EAAU,CACR/O,IAAKxP,EACLH,KAAMke,EAAKU,QAAQze,GACnBkF,KAAMqO,UAAKmL,eAAeV,EAAME,EAASle,GACzC2e,OAAQA,GAGZ,OAAOJ,I,0CAmEP,IAGIpd,EAHJ,GAAKxB,KAAKoK,KAOV,OAJI5I,EAAS,IAAIyL,UACjBzL,EAAO0d,MAAMC,UAAKC,QAClB5d,EAAO0d,MAAMC,UAAK5E,KAAKva,KAAKoK,OAErB5I,EAAOA,S,wDAGC+D,GACf,IAAI8Z,EAAYrf,KAAKsf,eAAe/Z,GAChC+H,EAAQtN,KAAKuf,aAAaF,GAC9B,OAAG/R,IAAU,CAAC,EAAG,GAAW,KACrB,CACLA,QACA+R,e,oDAIW9Z,GACb,IAgBMia,EAhBFC,EAAYhd,KAAKid,MAAMna,EAAOvF,KAAKoK,KAAK0Q,gBACxCuE,SACAM,EAAc3f,KAAKod,eA4BvB,OA3BAuC,EAAYhI,MAAM,SAAC9V,EAAMgO,GACvB,IAAI+P,EAAU/d,EAAK0D,KAAKA,KACpBsa,EAAWF,EAAY9P,EAAM,GAC7B8P,EAAY9P,EAAM,GAAGtK,KAAKA,KAC1BoX,OAAOmD,iBACX,QAAIF,GAAWH,GAAaA,EAAYI,KACtCR,EAAYxP,GACL,KAKP7P,KAAK6a,YACH2E,EAAcxf,KAAK+f,gBACXpI,MAAM,SAAC9V,EAAMgO,GACvB,IAAI+P,EAAU/d,EAAKme,UACfH,EAAWL,EAAY3P,EAAM,GAC7B2P,EAAY3P,EAAM,GAAGmQ,UACrBrD,OAAOmD,iBACX,QAAIF,GAAWH,GAAaA,EAAYI,KACtCR,EAAY5c,KAAK6J,IAAIuD,EAAKwP,IACnB,KAMNA,I,gCAGH9Z,GACA8Z,EAAYrf,KAAKsf,eAAe/Z,GAEpC,OADAvF,KAAK2V,SAAS0J,GAAWnJ,YAAa,EAC/BlW,KAAKigB,aAAaZ,K,gDAGbA,GACZ,IAWQa,EAVJ7f,EADaL,KAAKod,eAAeiC,GACdL,OACnB3d,SAaJ,OAZIrB,KAAK6a,YACHsF,EAAangB,KAAKogB,mBAAmB,QAASpgB,KAAK+f,eAAeV,GAAWgB,MAAO,GACxFhgB,EAAQoC,KAAK6J,IAAIjM,EAAO8f,EAAWnB,SAEjCK,EAAYrf,KAAKod,eAAexY,OAAS,IAE3CvD,EADqBrB,KAAKod,eAAeiC,EAAY,GAChCL,OACjBhf,KAAK6a,YACHqF,EAAiBlgB,KAAKogB,mBAAmB,QAASpgB,KAAK+f,eAAeV,EAAY,GAAGgB,MAAO,GAChGhf,EAAMoB,KAAKwN,IAAI5O,EAAK6e,EAAelB,QAAU,KAG7Ctb,OAAO4c,MAAMjgB,SAAmBwe,IAARxd,GAAqBqC,OAAO4c,MAAMjf,IAC5DrB,KAAK8E,KAAK,QAAS,IAAIjE,UAAO,QAAS,GAAI,CAAEC,KAAM,IAAKC,OAAQ,qBAAsByC,IAAKxD,KAAKwD,OACzF,CAAC,EAAG,IAEN,CAACnD,EAAQL,KAAKmd,UAAW9b,EAAMrB,KAAKmd,UAAY9b,EAAM,M,gDAEjDge,GAAW,WACnB/a,EAAOtE,KACPsN,EAAQtN,KAAKuf,aAAaF,GAC9B,OAAG/R,IAAU,CAAC,EAAG,IAIVtN,KAAK2d,QAAQrQ,EAAM,GAAIA,EAAM,IAAI8G,KAAK,SAACmM,GAC5C,OAAOjc,EAAKkc,eAAe,IAAIja,WAAWga,GAAMjT,EAAM,GAAK,EAAK6P,UAAWkC,KAE5EjL,KAAK,SAAAqM,GACJ,OAAOA,M,8CAGElf,GACX,IAAIC,EAAS,IAAIyL,UACjB,OAAO,IAAI6M,QAAQ,SAAAzE,GACjB7T,EAAO0d,MAAMC,UAAKuB,KAAKnf,IACvBC,EAAO0d,MAAMC,UAAKnC,KAAKzb,IAEvB8T,EAAQ7T,EAAOA,Y,oDAGJmf,EAAUtgB,EAAOgf,GAC9B,IAEIuB,EAFO5gB,KAEYod,eAAeV,IAAI,SAAC7a,GAAD,OAAUA,EAAKgO,MACrDgR,EAHO7gB,KAGSogB,mBAAmB,QAASQ,EAAYvB,GAAYuB,EAAYvB,EAAY,IAC5FT,EAAUiC,EAASnE,IAAI,SAAC7a,EAAMgO,GAChC,MAAO,CACL3P,KAAM2B,EAAK3B,KACX2Q,SAAUhP,EAAK0D,KAAKsL,SACpBmO,OAAQnd,EAAK0D,KAAKyZ,OAClBxd,OAAQ,IAAI+E,WAAWoa,EAASlf,MAAMI,EAAKmd,OAAS3e,EAAOwB,EAAKmd,OAAS3e,EAAQwB,EAAK3B,OACtFd,IAAa,IAARyQ,EACLA,IAAKhO,EAAKgO,OAGd,OAAO7P,KAAK8gB,YAAY,CACtB9S,GAAI,EACJzI,KAAMsb,EAAS,GAAGtb,KAAKA,KACvBwb,WAAY,SACZ3f,MAjBe,KAkBfwd,UACAoC,aAAcH,EAAS,GAAGhR,IAC1BwP,gB,oDAGWsB,EAAUtgB,EAAOgf,GAE9B,IAGIwB,EAAW7gB,KAAKogB,mBAClB,QAASpgB,KAAK+f,eAAeV,GAAWgB,MAAOrgB,KAAK+f,eAAeV,EAAY,GAC3Erf,KAAK+f,eAAeV,EAAY,GAAGgB,WACnCxB,GACFD,EAAUiC,EAASnE,IAAI,SAAC7a,EAAMgO,GAChC,MAAO,CACL3P,KAAM2B,EAAK3B,KACX2Q,SAAUhP,EAAK0D,KAAKsL,SACpBmO,OAAQnd,EAAK0D,KAAKyZ,OAClBxd,OAAQ,IAAI+E,WAAWoa,EAASlf,MAAMI,EAAKmd,OAAS3e,EAAOwB,EAAKmd,OAAS3e,EAAQwB,EAAK3B,OACtFd,IAAa,IAARyQ,KAGT,OAAO7P,KAAK8gB,YAAY,CACtB9S,GAAI,EACJzI,KAAMsb,EAAS,GAAGtb,KAAKA,KACvBwb,WAAY,EACZ3f,MAnBe,KAoBfwd,UACAoC,aAAcH,EAAS,GAAGhR,IAC1BwP,gB,oDAGYsB,EAAUtgB,EAAOgf,GAC/B,IAEI4B,EAAa,GACbC,EAAW,CAHJlhB,KAIJmhB,eAAeR,EAAUtgB,EAAOgf,IAKvC,OAHIrf,KAAK6a,WACPqG,EAAShgB,KAPAlB,KAOUohB,eAAeT,EAAUtgB,EAAOgf,IAE9CvF,QAAQuH,IAAIH,GAClB9M,KAAK,SAAAkN,GACJL,EAAW/f,KAAKogB,EAAQ,IACpBA,GAAWA,EAAQ,IACrBL,EAAW/f,KAAKogB,EAAQ,IAE1B,IAAIC,EAAa,EAKb/f,GAJJyf,EAAWtJ,MAAM,SAAA9V,GAEf,OADA0f,GAAc1f,EAAKH,YACZ,IAEI,IAAI6E,WAAWgb,IACxBvC,EAAS,EAMb,OALAiC,EAAWtJ,MAAM,SAAA9V,GAGf,OAFAL,EAAOgL,IAAI3K,EAAMmd,GACjBA,GAAUnd,EAAKH,YACR,IAEFF,M,oCAIJgC,GACLxD,KAAKwD,IAAMA,I,wCAIX,IAAGxD,KAAKga,aAAR,CAGA,IAAK,IAAIwH,KAAKxhB,YACLA,KAAKwhB,GAEdxhB,KAAKga,cAAe,K,yCAxQpB,GAAIha,KAAKyhB,aACP,OAAOzhB,KAAKyhB,aAEd,IAAI7G,EAAY5a,KAAK4a,UACjB6C,EAAO7J,UAAK8G,QAAQE,EAAW,QAC/BuD,EAAOvK,UAAK8G,QAAQE,EAAW,QAC/B8G,EAAO9N,UAAK8G,QAAQE,EAAW,QAEnC,GADA5a,KAAKwe,SAAW,KACbkD,EAAK,CACN1hB,KAAKwe,SAAW,GAEhB,IADA,IAAIjc,EAAQ,EACJ1E,EAAI,EAAGA,EAAI6jB,EAAKC,MAAM/c,OAAQ/G,IAEpC,IADA,IAAI8jB,EAAQD,EAAKC,MAAM9jB,GACf+jB,EAAI,EAAGA,EAAID,EAAMpf,MAAOqf,IAC9B5hB,KAAKwe,SAASjc,GAASof,EAAM3C,OAC7Bzc,GAAS,EAKfvC,KAAK0e,cAAgB,GAErB,IADA,IAAImD,EAAc,EACVhkB,EAAI,EAAGA,EAAIsgB,EAAK5b,MAAQ,EAAG1E,IAEjC,IADA,IAAI8jB,EAAQxD,EAAKW,QAAQjhB,GACjB+jB,EAAI,EAAGA,EAAID,EAAMG,YAAeH,EAAMI,kBAAmBH,IAE7D5hB,KAAK0e,gBADLmD,GACkCF,EAIpCK,EAAShiB,KAAKogB,mBAAmB,QAAS3C,EAAKqB,QAAQpC,IAAI,SAAA7a,GAAA,OAAQA,EAAO,KAG9E,OAFA7B,KAAK0d,SAAWD,EAChBzd,KAAKyhB,aAAeO,I,yCAKpB,GAAIhiB,KAAKiiB,aACP,OAAOjiB,KAAKiiB,aAQd,IANA,IAAIC,EAAatO,UAAK8G,QAAQ1a,KAAK4a,UAAW,QAAQ1P,UAClDiX,EAAavO,UAAK8G,QAAQ1a,KAAK6a,UAAW,QAAQ3P,UAClDkX,EAAYxO,UAAK8G,QAAQ1a,KAAK6a,UAAW,QAAQ8G,MACjDxD,EAAOvK,UAAK8G,QAAQ1a,KAAK6a,UAAW,QAEpCgH,GADJ7hB,KAAK2e,cAAgB,GACH,GACV9gB,EAAI,EAAGA,EAAIsgB,EAAK5b,MAAQ,EAAG1E,IAEjC,IADA,IAAI8jB,EAAQxD,EAAKW,QAAQjhB,GACjB+jB,EAAI,EAAGA,EAAID,EAAMG,YAAeH,EAAMI,kBAAmBH,IAE7D5hB,KAAK2e,gBADLkD,GACkCF,EAGxC,IAEAU,EAFkBriB,KAAKod,eAEEV,IAAI,SAAA7a,GAC3B,OAAO+R,UAAK0O,sBAAsBF,EAAWD,EAAYtgB,EAAK0D,KAAKA,KAAO2c,KAG5E,OADAliB,KAAKiiB,aAAeI,EACbriB,KAAKiiB,iB,iBAiNDxM,E,kDCrmBf,IAAI8M,EAAkB5e,EAAQ,GAC1B6e,EAAkB7e,EAAQ,IAC1B8e,EAAkB9e,EAAQ,IAC1B+e,EAAkB/e,EAAQ,IAC1Bgf,EAAkBhf,EAAQ,KAErB/F,EAAOD,QAAU,SAAUilB,EAAM9jB,GACzC,IAAIZ,EAAG2Q,EAAGgU,EAAG3R,EAkBb,OAjBI1M,UAAUI,OAAS,GAAqB,iBAATge,GAClC1R,EAAUpS,EACVA,EAAQ8jB,EACRA,EAAO,MAEP1R,EAAU1M,UAAU,GAEjB+d,EAAQK,IACX1kB,EAAIykB,EAAS3kB,KAAK4kB,EAAM,KACxB/T,EAAI8T,EAAS3kB,KAAK4kB,EAAM,KACxBC,EAAIF,EAAS3kB,KAAK4kB,EAAM,MAGxB/T,IADA3Q,EAAI2kB,GAAI,GAITC,EAAO,CAAEhkB,MAAOA,EAAOkF,aAAc9F,EAAGO,WAAYoQ,EAAG5K,SAAU4e,GACzD3R,EAAiBuR,EAAOC,EAAcxR,GAAU4R,GAAtCA,IAGjBC,GAAK,SAAUH,EAAMlkB,EAAK8N,GAC3B,IAAItO,EAAMgT,EA6BV,MA5BoB,iBAAT0R,GACV1R,EAAU1E,EACVA,EAAM9N,EACNA,EAAMkkB,EACNA,EAAO,MAEP1R,EAAU1M,UAAU,GAEhB+d,EAAQ7jB,GAED8jB,EAAgB9jB,GAGhB6jB,EAAQ/V,GAERgW,EAAgBhW,KAC3B0E,EAAU1E,EACVA,OAAMqS,GAHNrS,OAAMqS,GAHN3N,EAAUxS,EACVA,EAAM8N,OAAMqS,GAHZngB,OAAMmgB,EAYNhQ,EAFG0T,EAAQK,IACX1kB,EAAIykB,EAAS3kB,KAAK4kB,EAAM,KACpBD,EAAS3kB,KAAK4kB,EAAM,QAExB1kB,GAAI,GAIL4kB,EAAO,CAAEpkB,IAAKA,EAAK8N,IAAKA,EAAKxI,aAAc9F,EAAGO,WAAYoQ,GAClDqC,EAAiBuR,EAAOC,EAAcxR,GAAU4R,GAAtCA,I,6BC1DnB,IAAIE,EAAarf,EAAQ,IAErBsf,EAAU,mBAAoBC,EAAmBnhB,SAASpC,UAAUwjB,SAExEvlB,EAAOD,QAAU,SAAUmB,GAC1B,QAAKkkB,EAAWlkB,KACZmkB,EAAQG,KAAKF,EAAiBllB,KAAKc,M,6BCNxC,IAAIukB,EAAc1f,EAAQ,IAE1B/F,EAAOD,QAAU,SAAUmB,GAC1B,GAAqB,mBAAVA,EAAsB,OAAO,EAExC,IAAKc,eAAe5B,KAAKc,EAAO,UAAW,OAAO,EAElD,IACC,GAA4B,iBAAjBA,EAAM8F,OAAqB,OAAO,EAC7C,GAA0B,mBAAf9F,EAAMd,KAAqB,OAAO,EAC7C,GAA2B,mBAAhBc,EAAM+E,MAAsB,OAAO,EAC7C,MAAOuJ,GACR,OAAO,EAGR,OAAQiW,EAAYvkB,K,6BCfrB,IAAIwkB,EAAW3f,EAAQ,IAEvB/F,EAAOD,QAAU,SAAUmB,GAC1B,IAAKwkB,EAASxkB,GAAQ,OAAO,EAC7B,IACC,OAAKA,EAAMykB,YACJzkB,EAAMykB,YAAY5jB,YAAcb,GADR,EAE9B,MAAOsO,GACR,OAAO,K,6OCRLmV,EAAU5e,EAAQ,GAGlB6f,EAAgB,CAAE,QAAU,EAAM,UAAY,EAAM,WAAa,GAErE5lB,EAAOD,QAAU,SAAUmB,GAC1B,QAAKyjB,EAAQzjB,IACNc,eAAe5B,KAAKwlB,OAApB,IAA0C1kB,EAA1C,cAA0CA,M,6BCPlDlB,EAAOD,QAAUgG,EAAQ,GAARA,GAAgCpF,OAAOkkB,OAAS9e,EAAQ,K,6BCAzE/F,EAAOD,QAAU,WAChB,IAAI8kB,EAASlkB,OAAOkkB,OACpB,MAAsB,mBAAXA,IAEXA,EADA9W,EAAM,CAAE8X,IAAK,OACD,CAAEC,IAAK,OAAS,CAAEC,KAAM,SAC7BhY,EAAI8X,IAAM9X,EAAI+X,IAAM/X,EAAIgY,OAAS,gB,6BCLzC,IAAIC,EAAQjgB,EAAQ,IAChB7E,EAAQ6E,EAAQ,IAChBsM,EAAQxN,KAAKwN,IAEjBrS,EAAOD,QAAU,SAAUkmB,EAAMzd,GAChC,IAAIgH,EAAOvP,EAAsC4kB,EAAnC7d,EAASqL,EAAIzL,UAAUI,OAAQ,GAS7C,IARAif,EAAOtlB,OAAOO,EAAM+kB,IACpBpB,EAAS,SAAS,OAACrjB,GAClB,IACCykB,EAAKzkB,GAAOgH,EAAIhH,GACf,MAAOyP,GACIzB,EAAPA,GAAeyB,IAGjBhR,EAAI,EAAGA,EAAI+G,IAAU/G,EAEzB+lB,EADAxd,EAAM5B,UAAU3G,IACNqP,QAAQuV,GAEnB,QAAc5D,IAAVzR,EAAqB,MAAMA,EAC/B,OAAOyW,I,6BCnBRjmB,EAAOD,QAAUgG,EAAQ,GAARA,GAAgCpF,OAAOqlB,KAAOjgB,EAAQ,K,6BCAvE/F,EAAOD,QAAU,WAChB,IAEC,OADAY,OAAOqlB,KAAK,cACL,EACN,MAAO/U,GACR,OAAO,K,6BCLT,IAAI0T,EAAU5e,EAAQ,GAElBigB,EAAOrlB,OAAOqlB,KAElBhmB,EAAOD,QAAU,SAAU8B,GAAU,OAAOmkB,EAAKrB,EAAQ9iB,GAAUlB,OAAOkB,GAAUA,K,6BCHpF7B,EAAOD,QAAU,c,6BCDjB,IAAI4kB,EAAU5e,EAAQ,GAEtB/F,EAAOD,QAAU,SAAUmB,GAC1B,GAAKyjB,EAAQzjB,GACb,OAAOA,EADc,MAAM,IAAIglB,UAAU,kC,6BCH1C,IAAIvB,EAAU5e,EAAQ,GAElBuJ,EAAUlI,MAAMrF,UAAUuN,QAAS/N,EAASZ,OAAOY,OAEnD4kB,EAAU,SAAVA,QAAoB3d,EAAKuF,GAE5B,IADA,IAAIvM,KACQgH,EAAKuF,EAAIvM,GAAOgH,EAAIhH,IAIjCxB,EAAOD,QAAU,SAAUqmB,GAC1B,IAAI3P,EAASlV,EAAO,MAKpB,OAJA+N,EAAQlP,KAAKwG,UAAW,SAAU0M,GAC5BqR,EAAQrR,IACb6S,EAAQxlB,OAAO2S,GAAUmD,KAEnBA,I,6BChBRzW,EAAOD,QAAUgG,EAAQ,GAARA,GAAgClD,OAAOd,UAAUgjB,SAAWhf,EAAQ,K,6BCArF,IAAIsgB,EAAM,aAEVrmB,EAAOD,QAAU,WAChB,MAA4B,mBAAjBsmB,EAAItB,YACgB,IAAxBsB,EAAItB,SAAS,SAA2C,IAAxBsB,EAAItB,SAAS,U,6BCJrD,IAAInM,EAAU/V,OAAOd,UAAU6W,QAE/B5Y,EAAOD,QAAU,SAAUumB,GAC1B,OAAyD,EAAlD1N,EAAQxY,KAAKgC,KAAMkkB,EAAc1f,UAAU,M,6BCHnD5G,EAAOD,QAAU,SAAUwmB,GAC1B,GAAkB,mBAAPA,EAAmB,MAAM,IAAIL,UAAUK,EAAK,sBACvD,OAAOA,I,8ECJR,I,yBAAA,M,yBACA,O,yBACA,M,s/GAIE,eAAa3iB,I,4GAAQ,aACnBxB,KAAKwB,OAAS,KACdxB,KAAK8d,MAAQ,GACb9d,KAAKge,QAAU,KACfhe,KAAKK,MAAQ,EAUb,IATA,IAAIiE,EAAOtE,KAMPokB,GALA9f,EAAK9C,QACP,aAAO+E,WAAYjC,EAAK9C,OAAQA,GAEhC8C,EAAK9C,OAASA,EAEGA,EAAOE,YAEtBpB,GADJkB,EAAOjB,SAAW,EACL,IAAI2B,UAAOV,IACiB,GAAlC4iB,EAAe9jB,EAAOC,UAAe,CAC1C,IAAI4B,EAAM,IAAIpC,UAEd,GADAoC,EAAIH,WAAW1B,GACX6B,EAAIjC,KAAO,GAAMkkB,EAAe9jB,EAAOC,SACzC4B,EAAIF,SAAS3B,GACbgE,EAAKwZ,MAAM5c,KAAKiB,OACX,CACL,GAAiB,SAAbA,EAAIhC,KAGD,CACLmE,EAAK0Z,QAAU7b,EACf7B,EAAOC,UAAY,EACnB,MALA4B,EAAIF,SAAS3B,GACbgE,EAAKwZ,MAAM5c,KAAKiB,IAQtBmC,EAAK9C,OAAS,IAAI+E,WAAWjC,EAAK9C,OAAOC,MAAMnB,EAAOC,Y,2GCnC1DhC,OAAOC,eAAeb,EAAS,aAAc,CAC3CmB,OAAO,IAGTnB,EAAQiO,QAAU,SAAUyY,GAG1B,IAFA,IAAIC,EAAc,EAETC,EAAO/f,UAAUI,OAAQ4f,EAASxf,MAAa,EAAPuf,EAAWA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IAChGD,EAAOC,EAAO,GAAKjgB,UAAUigB,GAG/B,IAAIC,GAA4B,EAC5BC,GAAoB,EACpBC,OAAiB/F,EAErB,IACE,IAAK,IAA2CgG,EAAvCC,EAAYN,EAAO5lB,OAAOmmB,cAAsBL,GAA6BG,EAAQC,EAAUE,QAAQC,MAAOP,GAA4B,EAGjJJ,GAFUO,EAAM/lB,MAEG8F,OAErB,MAAO+P,GACPgQ,GAAoB,EACpBC,EAAiBjQ,EARnB,QAUE,KACO+P,GAA6BI,EAAUI,QAC1CJ,EAAUI,SAFd,QAKE,GAAIP,EACF,MAAMC,GAKZ,IAAIvQ,EAAS,IAAIgQ,EAAkBC,GAC/BtF,EAAS,EACTmG,GAA6B,EAC7BC,GAAqB,EACrBC,OAAkBxG,EAEtB,IACE,IAAK,IAA4CyG,EAAxCC,EAAaf,EAAO5lB,OAAOmmB,cAAuBI,GAA8BG,EAASC,EAAWP,QAAQC,MAAOE,GAA6B,EAAM,CAC7J,IAAIK,EAAOF,EAAOxmB,MAElBuV,EAAO7H,IAAIgZ,EAAMxG,GACjBA,GAAUwG,EAAK5gB,QAEjB,MAAO+P,GACPyQ,GAAqB,EACrBC,EAAkB1Q,EATpB,QAWE,KACOwQ,GAA8BI,EAAWL,QAC5CK,EAAWL,SAFf,QAKE,GAAIE,EACF,MAAMC,GAKZ,OAAOhR,I,6BClET,I,yBAAA,M,yBACA,M,wEAEAtU,UAAI0lB,KAAO,WACT,IAAInlB,EAAS,IAAI4B,UAAOlC,KAAKuB,MAC7BvB,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAO,CAACplB,EAAOK,YAAaL,EAAOK,YAAaL,EAAOK,aAC5DX,KAAK2lB,aAAerlB,EAAOslB,aAC3B5lB,KAAK6lB,QAAU,CAACvlB,EAAOslB,aAActlB,EAAOslB,aAActlB,EAAOslB,qBAC1D5lB,KAAKI,cACLJ,KAAKuB,O,6BCVd,I,yBAAA,M,yBACA,M,wEACAxB,UAAI,QAAU,WAKZ,IAJA,IAAIO,EAAS,IAAI4B,UAAOlC,KAAKuB,MAGzBukB,GAFJ9lB,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAO,CAACplB,EAAOK,YAAaL,EAAOK,YAAaL,EAAOK,aAC7C,IAAQiE,EAAStE,EAAOkB,OAAOE,WACvCpB,EAAOC,SAAWqE,GACvBkhB,EAAS5kB,KAAKZ,EAAOK,aAEvBX,KAAK8lB,SAAWA,SACT9lB,KAAKI,cACLJ,KAAKuB,O,wGCZd,MACAxB,QAAIgmB,KAAO,kBACF/lB,KAAKI,S,iECFd,I,yBAAA,M,yBACA,M,yBACA,M,wEAEAL,UAAIqc,KAAO,WA4BT,IA3BA,IAAI9b,EAAS,IAAI4B,UAAOlC,KAAKuB,MA0BzBykB,GAzBJhmB,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,EAAG,GAC3B,IAAjBrC,KAAKmB,SACPnB,KAAKb,OAASmB,EAAOM,aACrBZ,KAAKimB,OAAS3lB,EAAOM,aACrBZ,KAAKsd,YAAa,IAAIhY,WAAMS,QAAsB,IAAd/F,KAAKb,QACzCa,KAAKud,YAAa,IAAIjY,WAAMS,QAAsB,IAAd/F,KAAKimB,QACzCjmB,KAAKkmB,QAAU5lB,EAAOE,aACtBR,KAAKmmB,UAAY7lB,EAAOE,aACxBR,KAAK6Q,SAAWvQ,EAAOM,eAEvBZ,KAAKb,OAASmB,EAAOE,aACrBR,KAAKimB,OAAS3lB,EAAOE,aACrBR,KAAKsd,YAAa,IAAIhY,WAAMS,QAAsB,IAAd/F,KAAKb,QACzCa,KAAKud,YAAa,IAAIjY,WAAMS,QAAsB,IAAd/F,KAAKimB,QACzCjmB,KAAKkmB,QAAU5lB,EAAOE,aACtBR,KAAKmmB,UAAY7lB,EAAOE,aACxBR,KAAK6Q,SAAWvQ,EAAOE,cAEzBF,EAAOM,aACPZ,KAAKomB,MAAQ9lB,EAAO+lB,YACpBrmB,KAAKsmB,gBAAkBhmB,EAAO+lB,YAC9BrmB,KAAKumB,OAASjmB,EAAO+lB,aAAe,EACpC/lB,EAAOslB,aAEM,IACJ/nB,EAAI,EAAGA,EAAI,EAAGA,IACrBmoB,EAAO9kB,KAAKZ,EAAOslB,aAAe,IAAMtlB,EAAOslB,cAEjD5lB,KAAKgmB,OAASA,EACdhmB,KAAK2J,MAAQrJ,EAAOslB,aAAe,IAAMtlB,EAAOslB,aAChD5lB,KAAK4J,OAAStJ,EAAOslB,aAAe,IAAMtlB,EAAOslB,oBAC1C5lB,KAAKuB,YACLvB,KAAKI,S,6BCvCd,I,yBAAA,M,yBACA,M,wEAEAL,UAAIymB,KAAO,WACP,IAAIlmB,EAAS,IAAI4B,UAAOlC,KAAKuB,MAOzBklB,GANJzmB,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAG7CrC,KAAK0mB,SAAWpmB,EAAOE,aAEkB,EAAZR,KAAK0lB,MAC9BiB,EAA6C,EAAZ3mB,KAAK0lB,KACtCkB,EAA4C,EAAZ5mB,KAAK0lB,KACrCmB,EAAwC,GAAZ7mB,KAAK0lB,KACjCoB,EAAyC,GAAZ9mB,KAAK0lB,KAGlCe,IAEAzmB,KAAK+mB,eAAiBzmB,EAAOE,cAG7BmmB,IACA3mB,KAAKgnB,uBAAyB1mB,EAAOE,cAGrComB,IACA5mB,KAAKinB,sBAAwB3mB,EAAOE,cAGpCqmB,IACA7mB,KAAKknB,kBAAoB5mB,EAAOE,cAGhCsmB,IACA9mB,KAAKmnB,mBAAqB7mB,EAAOE,qBAG9BR,KAAKI,cACLJ,KAAKuB,O,+CCxChB,I,yBAAA,M,yBACA,M,wEAEAxB,UAAIse,KAAO,WAMT,IALA,IAAI/d,EAAS,IAAI4B,UAAOlC,KAAKuB,MAIzBogB,GAHJ3hB,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAC7CrC,KAAKuC,MAAQjC,EAAOE,aACR,IACH3C,EAAI,EAAG0E,EAAQvC,KAAKuC,MAAO1E,EAAI0E,EAAO1E,IAC7C8jB,EAAMzgB,KAAK,CACT2gB,YAAavhB,EAAOE,aACpB4mB,eAAgB9mB,EAAOE,eAG3BR,KAAK2hB,MAAQA,SACN3hB,KAAKI,cACLJ,KAAKuB,O,6BCjBd,I,yBAAA,M,yBACA,M,wEAEAxB,UAAIqe,KAAO,WACT,IAAI9d,EAAS,IAAI4B,UAAOlC,KAAKuB,MAKzBud,GAJJ9e,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAC7CrC,KAAKqnB,WAAa/mB,EAAOE,aACzBR,KAAKuC,MAAQjC,EAAOE,aACN,IACdR,KAAK8e,QAAUA,EACf,IAAK,IAAIjhB,EAAI,EAAG0E,EAAQvC,KAAKuC,MAAO1E,EAAI0E,EAAO1E,IACzCmC,KAAKqnB,WACPvI,EAAQ5d,KAAKlB,KAAKqnB,YAGlBvI,EAAQ5d,KAAKZ,EAAOE,qBAGjBR,KAAKI,cACLJ,KAAKuB,O,6BCpBd,I,yBAAA,M,yBACA,M,wEAEAxB,UAAI0d,KAAO,WACT,IAAInd,EAAS,IAAI4B,UAAOlC,KAAKuB,MAIzBud,GAHJ9e,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAC7CrC,KAAKuC,MAAQjC,EAAOE,aACN,IACdR,KAAK8e,QAAUA,EACf,IAAK,IAAIjhB,EAAI,EAAG0E,EAAQvC,KAAKuC,MAAO1E,EAAI0E,EAAO1E,IAC7CihB,EAAQ5d,KAAKZ,EAAOE,qBAEfR,KAAKI,cACLJ,KAAKuB,O,+CCdd,I,yBAAA,M,yBACA,M,wEACAxB,UAAIunB,KAAO,WACT,IAAIhnB,EAAS,IAAI4B,UAAOlC,KAAKuB,MAIzBY,GAHJnC,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAC7CrC,KAAKunB,WAAajnB,EAAOE,aACf,IAAIT,WACdoC,EAAIH,WAAW1B,GACfN,KAAKI,OAAOc,KAAKiB,GACjBA,EAAIF,SAAS3B,UACNN,KAAKuB,O,6BCXd,I,yBAAA,M,yBACA,M,wEAEAxB,UAAIoe,KAAO,WACT,IAAI7d,EAAS,IAAI4B,UAAOlC,KAAKuB,MAIzBud,GAHJ9e,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAC7CrC,KAAKuC,MAAQjC,EAAOE,aACN,IACdR,KAAK8e,QAAUA,EACf,IAAK,IAAIjhB,EAAI,EAAG0E,EAAQvC,KAAKuC,MAAO1E,EAAI0E,EAAO1E,IAC7CihB,EAAQ5d,KAAK,CACXsmB,YAAalnB,EAAOE,aACpBuhB,kBAAmBzhB,EAAOE,aAC1BinB,kBAAmBnnB,EAAOE,eAG9B,IAAK,IAA+BmhB,EAAO+F,EAWrC/kB,EAAoCglB,EAXjC9pB,EAAI,EAAG0E,EAAQvC,KAAKuC,MAAwB1E,EAAI0E,EAAQ,EAAG1E,IAClE8jB,EAAQ7C,EAAQjhB,GAChB6pB,EAAW5I,EAAQjhB,EAAI,GACvB8jB,EAAMG,YAAchD,EAAQjhB,EAAI,GAAG2pB,YAAc7F,EAAM6F,YACvD7F,EAAMiG,aAAqB,IAAN/pB,EAAU,EAAI6pB,EAASE,aAAeF,EAAS5F,YAAc4F,EAAS3F,kBAE1E,IAAf/hB,KAAKuC,QACHof,EAAQ7C,EAAQ,IACd8I,aAAe,EACrBjG,EAAMG,YAAc,GACE,EAAb9hB,KAAKuC,QACVI,EAAOmc,EAAQ9e,KAAKuC,MAAQ,GAAQolB,EAAM7I,EAAQ9e,KAAKuC,MAAQ,GACnEI,EAAKilB,aAAeD,EAAIC,aAAeD,EAAI7F,YAAc6F,EAAI5F,kBAC7Dpf,EAAKmf,YAAc,UAEd9hB,KAAKI,cACLJ,KAAKuB,O,6BCjCd,I,yBAAA,M,yBACA,M,wEAEAxB,UAAIue,KAAO,WACT,IAAIhe,EAAS,IAAI4B,UAAOlC,KAAKuB,MAIzBud,GAHJ9e,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAC7CrC,KAAKuC,MAAQjC,EAAOE,aACN,IACdR,KAAK8e,QAAUA,EACf,IAAK,IAAIjhB,EAAI,EAAG0E,EAAQvC,KAAKuC,MAAO1E,EAAI0E,EAAO1E,IAC7CihB,EAAQ5d,KAAKZ,EAAOE,qBAEfR,KAAKI,cACLJ,KAAKuB,O,6BCdd,I,yBAAA,M,yBACA,M,wEAEAxB,UAAI8nB,KAAO,WACT,IAAIvnB,EAAS,IAAI4B,UAAOlC,KAAKuB,MAC7BvB,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAC7CrC,KAAK8nB,QAAUxnB,EAAOynB,WAAa,IAAMznB,EAAOynB,kBACzC/nB,KAAKI,cACLJ,KAAKuB,O,6BCTd,I,2EAAA,MAEAxB,UAAIioB,mBAAqB,SAAU1nB,GACjC,IAAI6B,EAAM,IAAIpC,UACVG,SAaJ,OAZAiC,EAAIhC,KAAOG,EAAOK,YAEL,OADbT,EAAOI,EAAOK,cAEZwB,EAAI8lB,QAAS,EACb3nB,EAAO4nB,KAAK,GACZhoB,EAAOI,EAAOK,YAAc,GAE5BT,GAAQ,EAEViC,EAAIjC,KAAOA,EACXiC,EAAIgmB,GAAK7nB,EAAOK,mBACTwB,EAAI/B,OACJ+B,I,+CCjBT,I,yBAAA,M,yBACA,M,wEAGApC,UAAIqoB,KAAO,WACT,IAAI9nB,EAAS,IAAI4B,UAAOlC,KAAKuB,MAC9BvB,KAAKqoB,eAAiB/nB,EAAOE,aAC5BR,KAAKsoB,YAAc,GACnB,IAAK,IAAIzqB,EAAI,EAAGA,EAAI,EAAGA,IACrBmC,KAAKsoB,aAAe7nB,OAAOC,aAAaJ,EAAOK,aAElD,GAAiB,EAAbX,KAAKoB,MAAkB,CACxBpB,KAAKuoB,WAAa,GAClB,IAAS1qB,EAAI,EAAGA,EAAImC,KAAKE,KAAOF,KAAKwoB,SAAW,EAAG3qB,IACjDmC,KAAKuoB,YAAc9nB,OAAOC,aAAaJ,EAAOK,gB,+CCdpD,I,yBAAA,M,yBACA,M,wEACAZ,UAAI0oB,KAAO,WACT,IAAInoB,EAAS,IAAI4B,UAAOlC,KAAKuB,MAC9BvB,KAAK0oB,SAAWpoB,EAAOE,aACvBR,KAAK2oB,SAAWroB,EAAOE,e,+CCLxB,I,yBAAA,M,yBACA,M,yBACA,M,wEAEAT,UAAI0a,KAAO,WAkBT,IAjBA,IAAIna,EAAS,IAAI4B,UAAOlC,KAAKuB,MAgBzBykB,GAdJhmB,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAC7CrC,KAAKb,OAASmB,EAAOE,aACrBR,KAAKimB,OAAS3lB,EAAOE,aACrBR,KAAKsd,YAAa,IAAIhY,WAAMS,QAAsB,IAAd/F,KAAKb,QACzCa,KAAKud,YAAa,IAAIjY,WAAMS,QAAsB,IAAd/F,KAAKimB,QACzCjmB,KAAKqd,UAAY/c,EAAOE,aACxBR,KAAK6Q,SAAWvQ,EAAOE,aACvBR,KAAK4oB,KAAOtoB,EAAOslB,aAAe,IAAMtlB,EAAOslB,aAC/C5lB,KAAKumB,OAASjmB,EAAOK,YAAc,IAAML,EAAOK,YAEhDuB,UAAOU,SAAStC,EAAO+B,SAAU,GACjCH,UAAOU,SAAStC,EAAO+B,SAAU,GAEpB,IACJxE,EAAI,EAAGA,EAAI,EAAGA,IACrBmoB,EAAO9kB,KAAKZ,EAAOslB,aAAe,IAAMtlB,EAAOslB,cAEjD5lB,KAAKgmB,OAASA,EACd9jB,UAAOU,SAAStC,EAAO+B,SAAU,IACjCrC,KAAK6oB,YAAcvoB,EAAOE,oBACnBR,KAAKI,cACLJ,KAAKuB,O,6BC7Bd,I,2EAAA,MAEAxB,UAAI+oB,cAAgB,SAAUxoB,GAC5B,IAAI6B,EAAM,IAAIpC,UACVG,SAeJ,OAdAiC,EAAIhC,KAAOG,EAAOK,YAEL,OADbT,EAAOI,EAAOK,cAEZwB,EAAI8lB,QAAS,EACb3nB,EAAO4nB,KAAK,GACZhoB,EAAOI,EAAOK,YAAc,GAE5BT,GAAQ,EAEViC,EAAIjC,KAAOA,EACXiC,EAAI4mB,KAAOzoB,EAAOslB,aAClBzjB,EAAI6mB,SAAW1oB,EAAOK,YACtBwB,EAAI/B,OAAOc,KAAKnB,UAAIkpB,qBAAqB3oB,IACzC6B,EAAI/B,OAAOc,KAAKnB,UAAIioB,mBAAmB1nB,IAChC6B,I,6BCnBT,I,2EAAA,MAEApC,UAAImpB,uBAAyB,SAAU5oB,GACrC,IAAI6B,EAAM,IAAIpC,UACVG,SAAMipB,SAEV,GADAhnB,EAAIhC,KAAOG,EAAOK,YACD,IAAbwB,EAAIhC,KAEN,OADAG,EAAOC,SAAWD,EAAOC,SAAW,EAC7B4B,EAGI,OADbjC,EAAOI,EAAOK,cAEZwB,EAAI8lB,QAAS,EACb3nB,EAAO4nB,KAAK,GAEZiB,GADAjpB,EAAOI,EAAOK,YAAc,GACV,IAElBwoB,EAAWjpB,EACXA,GAAQ,GAEViC,EAAIjC,KAAOA,EAEX,IADA,IAAI6c,EAAS,GACJlf,EAAI,EAAGA,EAAIsrB,EAAUtrB,IAC5Bkf,EAAO7b,KAAKyb,OAAOrc,EAAOK,aAAawiB,SAAS,IAAIiG,SAAS,EAAG,MAIlE,OAFAjnB,EAAI4a,OAASA,SACN5a,EAAI/B,OACJ+B,I,6BC3BT,I,yBAAA,M,yBACA,M,wEAEApC,UAAIkpB,qBAAuB,SAAU3oB,GACnC,IAAI6B,EAAM,IAAIpC,UACVG,SAEJ,OADAiC,EAAIhC,KAAOG,EAAOK,YACD,IAAbwB,EAAIhC,OAIK,OADbD,EAAOI,EAAOK,cAEZwB,EAAI8lB,QAAS,EACb3nB,EAAO4nB,KAAK,GACZhoB,EAAOI,EAAOK,YAAc,GAE5BT,GAAQ,EAEViC,EAAIjC,KAAOA,EACXiC,EAAI2a,OAASxc,EAAOK,YAEpBwB,EAAIknB,WAAa/oB,EAAOK,YACxBwB,EAAIof,WAAarf,UAAOU,SAAStC,EAAO+B,SAAU,GAClDF,EAAImnB,QAAUhpB,EAAOE,aACrB2B,EAAIonB,QAAUjpB,EAAOE,aACrB2B,EAAI/B,OAAOc,KAAKnB,UAAImpB,uBAAuB5oB,KAjBlC6B,I,6BCRX,I,yBAAA,M,yBACA,M,wEAEApC,UAAI8b,KAAO,WACT,IAAIvb,EAAS,IAAI4B,UAAOlC,KAAKuB,MAQzBY,GAPJ7B,EAAO4nB,KAAK,GACZloB,KAAKwpB,mBAAqBlpB,EAAOslB,aACjCtlB,EAAO4nB,KAAK,GACZloB,KAAKmb,aAAe7a,EAAOslB,aAC3B5lB,KAAKqnB,WAAa/mB,EAAOslB,aACzBtlB,EAAO4nB,KAAK,GACZloB,KAAKob,WAAa9a,EAAOE,cAAgB,GAC/B,IAAIT,WACdoC,EAAIH,WAAW1B,GACfN,KAAKI,OAAOc,KAAKiB,GACjBA,EAAIF,SAAS3B,UACNN,KAAKuB,O,+CChBd,I,yBAAA,M,yBACA,M,yBACA,M,wEAEAxB,UAAIic,KAAO,WACT,IAAI1b,EAAS,IAAI4B,UAAOlC,KAAKuB,MAC7BvB,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GACxB,IAAjBrC,KAAKmB,SACPnB,KAAKb,OAASmB,EAAOM,aACrBZ,KAAKimB,OAAS3lB,EAAOM,aACrBZ,KAAKsd,YAAa,IAAIhY,WAAMS,QAAsB,IAAd/F,KAAKb,QACzCa,KAAKud,YAAa,IAAIjY,WAAMS,QAAsB,IAAd/F,KAAKimB,QACzCjmB,KAAKkL,UAAY5K,EAAOE,aACxBR,KAAK6Q,SAAWvQ,EAAOM,eAEvBZ,KAAKb,OAASmB,EAAOE,aACrBR,KAAKimB,OAAS3lB,EAAOE,aACrBR,KAAKsd,YAAa,IAAIhY,WAAMS,QAAsB,IAAd/F,KAAKb,QACzCa,KAAKud,YAAa,IAAIjY,WAAMS,QAAsB,IAAd/F,KAAKimB,QACzCjmB,KAAKkL,UAAY5K,EAAOE,aACxBR,KAAK6Q,SAAWvQ,EAAOE,cAEzBR,KAAKypB,SAAWnpB,EAAOslB,aACvBtlB,EAAOslB,oBACA5lB,KAAKI,cACLJ,KAAKuB,O,wGC1Bd,MAEAxB,QAAIid,KAAO,kBACFhd,KAAKI,S,6BCHd,I,yBAAA,M,yBACA,M,wEACAL,UAAI2pB,KAAO,WAMT,IALA,IAAIppB,EAAS,IAAI4B,UAAOlC,KAAKuB,MAGzBooB,GAFJ3pB,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAC/B,IACVuC,EAAStE,EAAOkB,OAAOE,WACpBpB,EAAOC,SAAWqE,GACvB+kB,EAAQzoB,KAAKZ,EAAOK,aAEtBX,KAAK2pB,QAAUA,SACR3pB,KAAKI,cACLJ,KAAKuB,O,6BCbd,I,yBAAA,M,yBACA,M,uBACA,M,wEAEAxB,UAAImc,KAAO,WACT,IAAI5b,EAAS,IAAI4B,UAAOlC,KAAKuB,MAC7BvB,KAAK4pB,cAAgBtpB,EAAOK,YAC5BX,KAAK0K,QAAUpK,EAAOK,YACtBX,KAAKsc,qBAAuBhc,EAAOE,aACnCR,KAAK6pB,yBAA2B,GAChC,IAAK,IAAIhsB,EAAI,EAAGA,EAAI,EAAGA,IACrBmC,KAAK6pB,yBAAyB3oB,KAAKyb,OAAOrc,EAAOK,aAAawiB,SAAS,KAEzEnjB,KAAK8G,SAAWxG,EAAOK,YACvBX,KAAK6c,gCAAkCvc,EAAOE,aAC9CR,KAAK8pB,mBAAqBxpB,EAAOK,YACjCX,KAAK+pB,qBAAuBzpB,EAAOK,YACnCX,KAAKgqB,aAAe1pB,EAAOslB,aAC3B5lB,KAAKiqB,kBAAoB3pB,EAAOK,YAChCX,KAAKkqB,YAAc5pB,EAAOK,YAE1BX,KAAKmqB,UAAY7pB,EAAO8pB,aACxBpqB,KAAKqqB,UAAY/pB,EAAOslB,aAExB,IADA,IAAI1K,EAAM,GACDrd,EAAI,EAAGA,EAAImC,KAAKqqB,UAAWxsB,IAClCqd,EAAIha,KAAKyb,OAAOrc,EAAOK,aAAawiB,SAAS,KAE/CnjB,KAAKkb,IAAMA,EAEXlb,KAAKsqB,UAAYhqB,EAAO8pB,aACxBpqB,KAAKuqB,UAAYjqB,EAAOslB,aAExB,IADA,IAAI5K,EAAM,GACDnd,EAAI,EAAGA,EAAImC,KAAKuqB,UAAW1sB,IAClCmd,EAAI9Z,KAAKyb,OAAOrc,EAAOK,aAAawiB,SAAS,KAG/CnjB,KAAKwc,SAAWxB,EAEhBhb,KAAKwqB,UAAYlqB,EAAO8pB,aACxBpqB,KAAKyqB,UAAYnqB,EAAOslB,aAExB,IADA,IAAI3K,EAAM,GACDpd,EAAI,EAAGA,EAAImC,KAAKyqB,UAAW5sB,IAClCod,EAAI/Z,KAAKyb,OAAOrc,EAAOK,aAAawiB,SAAS,KAE/CnjB,KAAKib,IAAMA,EAGX,IADA,IAAItY,EAAO,GAAQ+nB,EAAiBpqB,EAAO+B,SAASX,WAC7CpB,EAAOC,SAAWmqB,GACvB/nB,EAAKzB,KAAKZ,EAAOK,aAEnBX,KAAK2C,KAAOA,SACL3C,KAAKI,S,6BCnDd,I,yBAAA,M,yBACA,M,wEAEAL,UAAI6c,KAAO,WACT,IAAItc,EAAS,IAAI4B,UAAOlC,KAAKuB,MAE7BjB,EAAO4nB,KAAK,GACZloB,KAAKwpB,mBAAqBlpB,EAAOslB,aACjCtlB,EAAO4nB,KAAK,IACZloB,KAAK2J,MAAQrJ,EAAOslB,aACpB5lB,KAAK4J,OAAStJ,EAAOslB,aACrB5lB,KAAK2qB,gBAAkBrqB,EAAOE,aAC9BR,KAAK4qB,eAAiBtqB,EAAOE,aAC7BF,EAAO4nB,KAAK,GACZloB,KAAK6qB,WAAavqB,EAAOslB,aACzBtlB,EAAO4nB,KAAK,GACZ,IAAK,IAAIrqB,EAAI,EAAGA,EAAI,GAAIA,IACtB4C,OAAOC,aAAaJ,EAAOK,aAI7B,IAFAX,KAAK8qB,MAAQxqB,EAAOslB,aACpBtlB,EAAO4nB,KAAK,GACL5nB,EAAOC,SAAWD,EAAOkB,OAAOE,YAAY,CACjD,IAAIS,EAAM,IAAIpC,UACdoC,EAAIH,WAAW1B,GAlBNN,KAmBJI,OAAOc,KAAKiB,GACjBA,EAAIF,SAAS3B,M,+CCzBjB,I,yBAAA,M,yBACA,M,wEAEAP,UAAIgc,KAAO,WAQT,IAPA,IAAIzb,EAAS,IAAI4B,UAAOlC,KAAKuB,MAMzBnD,GALJ4B,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAC7C/B,EAAO4nB,KAAK,GACZloB,KAAKic,WAAL,GAAqBxb,OAAOC,aAAaJ,EAAOK,aAAeF,OAAOC,aAAaJ,EAAOK,aAAeF,OAAOC,aAAaJ,EAAOK,aAAeF,OAAOC,aAAaJ,EAAOK,aAC9KL,EAAO4nB,KAAK,IACD,IACJ5nB,EAAOC,SAAWP,KAAKE,KAAO,GACnC9B,EAAK8C,KAAKT,OAAOC,aAAaJ,EAAOK,cAEvCX,KAAK5B,KAAOA,EAAK6P,KAAK,WACfjO,KAAKI,cACLJ,KAAKuB,O,6BChBd,I,yBAAA,M,yBACA,M,wEAEAxB,UAAIqf,KAAO,WAKT,IAJA,IAAI9e,EAAS,IAAI4B,UAAOlC,KAAKuB,MAGzBwpB,GAFJ/qB,KAAKgrB,YAAcvqB,OAAOC,aAAaJ,EAAOK,YAAaL,EAAOK,YAAaL,EAAOK,YAAaL,EAAOK,aAC1GX,KAAKirB,cAAgB3qB,EAAOE,aACL,IACd3C,EAAI,EAAG6a,EAAMjW,KAAKC,OAAOpC,EAAOkB,OAAOE,WAAa,GAAK,GAAI7D,EAAI6a,EAAK7a,IAC7EktB,EAAiB7pB,KAAKT,OAAOC,aAAaJ,EAAOK,YAAaL,EAAOK,YAAaL,EAAOK,YAAaL,EAAOK,cAE/GX,KAAKkrB,kBAAoBH,EACzBzqB,EAAS,YACFN,KAAKI,cACLJ,KAAKuB,O,6BCdd,I,yBAAA,M,yBACA,M,wEAEAxB,UAAIorB,KAAO,WACT,IAAI7qB,EAAS,IAAI4B,UAAOlC,KAAKuB,MAC7BvB,KAAK0W,YAAc,GACnB,IAAK,IAAI7Y,EAAI,EAAGA,EAAI,EAAGA,IACrBmC,KAAK0W,aAAejW,OAAOC,aAAaJ,EAAOK,e,6BCPnD,I,yBAAA,M,yBACA,M,wEAEAZ,UAAI6b,KAAO,WACT,IAAItb,EAAS,IAAI4B,UAAOlC,KAAKuB,MAC7BvB,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAC7C,IACE,IAAIF,EAAMpC,UAAI+oB,cAAcxoB,GAC5BN,KAAKI,OAAOc,KAAKiB,UACVnC,KAAKuB,KACZjB,EAAS,KACV,MAAMuO,GACL1B,QAAQC,MAAMyB,M,6BCblB,I,yBAAA,M,yBACA,M,wEAEA9O,UAAIqrB,KAAO,WACT,IAAI9qB,EAAS,IAAI4B,UAAOlC,KAAKuB,MAGzBud,GAFJ9e,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAC/B,IACVgpB,EAAc/qB,EAAOE,aACzBR,KAAK8e,QAAUA,EACf,IAAK,IAAIjhB,EAAI,EAAGA,EAAIwtB,EAAaxtB,IAAK,CACpC,IAAI8jB,EAAQ,GACZ7C,EAAQ5d,KAAKygB,GACQ,IAAjB3hB,KAAKmB,SACPwgB,EAAM2J,iBAAmBhrB,EAAOM,aAChC+gB,EAAM4J,WAAajrB,EAAOM,eAE1B+gB,EAAM2J,iBAAmBhrB,EAAOE,aAChCmhB,EAAM4J,WAAajrB,EAAOkrB,aAE5B7J,EAAM8J,mBAAqBnrB,EAAO+lB,YAClC1E,EAAM+J,oBAAsBprB,EAAO+lB,mBAE9BrmB,KAAKI,cACLJ,KAAKuB,O,6BCxBd,I,yBAAA,M,yBACA,M,wEAEAxB,UAAI4rB,KAAO,WAQT,IAPA,IAAIrrB,EAAS,IAAI4B,UAAOlC,KAAKuB,MAGzBgmB,GAFJvnB,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAC5B/B,EAAOE,cAIf3C,GAHTmC,KAAKunB,WAAaA,EAGL,GAAG1pB,EAAI0pB,EAAY1pB,IAAK,CACnC,IAAIsE,EAAM,IAAIpC,UAHLC,KAIJI,OAAOc,KAAKiB,GACjBA,EAAIypB,KAAKtrB,UAEJN,KAAKuB,O,6BChBd,I,yBAAA,M,yBACA,M,wEAEAxB,UAAI2hB,KAAO,WACT,IAAIphB,EAAS,IAAI4B,UAAOlC,KAAKuB,MAKzBogB,GAJJ3hB,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAE7CrC,KAAKunB,WAAajnB,EAAOE,aACb,IACZR,KAAK2hB,MAAQA,EACb,IAAK,IAAI9jB,EAAI,EAAG0E,EAAQvC,KAAKunB,WAAY1pB,EAAI0E,EAAO1E,IAClD8jB,EAAMzgB,KAAK,CACTqB,MAAOjC,EAAOE,aACdwe,OAAQ1e,EAAOE,sBAGZR,KAAKI,cACLJ,KAAKuB,O,6BClBd,I,yBAAA,M,yBACA,M,wEAEAxB,UAAI8rB,KAAO,WACT,IAAIvrB,EAAS,IAAI4B,UAAOlC,KAAKuB,MAIzBud,GAHJ9e,KAAKmB,QAAUb,EAAOK,YACtBX,KAAK0lB,KAAOxjB,UAAOU,SAAStC,EAAO+B,SAAU,GAC7CrC,KAAKuC,MAAQjC,EAAOE,aACN,IACdR,KAAK8e,QAAUA,EACf,IAAK,IAAIjhB,EAAI,EAAG0E,EAAQvC,KAAKuC,MAAO1E,EAAI0E,EAAO1E,IAC7CihB,EAAQ5d,KAAKZ,EAAOM,qBAEfZ,KAAKI,cACLJ,KAAKuB,O,6BCdd,I,yBAAA,M,yBACA,M,wEACAxB,UAAI+rB,KAAO,WACT,IAAIxrB,EAAS,IAAI4B,UAAOlC,KAAKuB,MAC7BvB,KAAK+rB,aAAezrB,EAAOE,aAC3BR,KAAKgsB,WAAa1rB,EAAOE,aACzBR,KAAKisB,WAAa3rB,EAAOE,oBAClBR,KAAKI,cACLJ,KAAKuB,O,6BCRd,I,yBAAA,M,yBACA,M,yBACA,M,wEAEAxB,UAAIoc,KAAO,WAWT,IAVA,IAAI7b,EAAS,IAAI4B,UAAOlC,KAAKuB,MAOzB2qB,GANJlsB,KAAK4pB,cAAgBtpB,EAAOK,YAC5BX,KAAK0K,QAAUpK,EAAOK,YACtBX,KAAKsc,qBAAuBhc,EAAOK,YACnCX,KAAKuc,mBAAqBjc,EAAOK,YACjCX,KAAKmsB,mBAAgD,GAAL,EAArB7rB,EAAOK,aAClCX,KAAKosB,2BAAkD,GAArB9rB,EAAOK,YACpBL,EAAOslB,cAExBpJ,GADJxc,KAAKksB,eAAiBA,EACP,IACNruB,EAAI,EAAGA,EAAIquB,EAAgBruB,IAClC2e,EAAStb,KAAKZ,EAAOK,aAEvBX,KAAKyc,QAAU4P,UAAUC,SAAS,IAAI/lB,WAAWiW,IACjDxc,KAAKusB,SAAWjsB,EAAOK,YAIvB,IAHA,IAAI8pB,EAAYnqB,EAAOslB,aAEnB3K,GADJjb,KAAKyqB,UAAYA,EACP,IACD5sB,EAAI,EAAGA,EAAI4sB,EAAW5sB,IAC7Bod,EAAI/Z,KAAKyb,OAAOrc,EAAOK,aAAawiB,SAAS,KAE/CnjB,KAAKib,IAAMA,EACXjb,KAAKwc,SAAWA,EAEhB,IADA,IAAI7Z,EAAO,GAAQ+nB,EAAiBpqB,EAAO+B,SAASX,WAC7CpB,EAAOC,SAAWmqB,GACvB/nB,EAAKzB,KAAKZ,EAAOK,aAEnBX,KAAK2C,KAAOA,SACL3C,KAAKI,cACLJ,KAAKuB,O,6BClCd,I,yBAAA,M,yBACA,M,wEAEAxB,UAAIysB,KAAO,WACT,IAAIlsB,EAAS,IAAI4B,UAAOlC,KAAKuB,MAE7BjB,EAAO4nB,KAAK,GACZloB,KAAKwpB,mBAAqBlpB,EAAOslB,aACjCtlB,EAAO4nB,KAAK,IACZloB,KAAK2J,MAAQrJ,EAAOslB,aACpB5lB,KAAK4J,OAAStJ,EAAOslB,aACrB5lB,KAAK2qB,gBAAkBrqB,EAAOE,aAC9BR,KAAK4qB,eAAiBtqB,EAAOE,aAC7BF,EAAO4nB,KAAK,GACZloB,KAAK6qB,WAAavqB,EAAOslB,aACzBtlB,EAAO4nB,KAAK,GACZ,IAAK,IAAIrqB,EAAI,EAAGA,EAAI,GAAIA,IACtB4C,OAAOC,aAAaJ,EAAOK,aAI7B,IAFAX,KAAK8qB,MAAQxqB,EAAOslB,aACpBtlB,EAAO4nB,KAAK,GACL5nB,EAAOC,SAAWD,EAAOkB,OAAOE,YAAY,CACjD,IAAIS,EAAM,IAAIpC,UACdoC,EAAIH,WAAW1B,GAlBNN,KAmBJI,OAAOc,KAAKiB,GACjBA,EAAIF,SAAS3B,UAERN,KAAKuB,O,+bC3Bd,OACA,IAAMkrB,EAAahqB,KAAKiX,IAAI,EAAG,IAAM,EAE/ByF,E,wMACS/gB,GACX,OAAO,IAAImI,WAAW,CAACnI,EAAKsuB,WAAW,GAAItuB,EAAKsuB,WAAW,GAAItuB,EAAKsuB,WAAW,GAAItuB,EAAKsuB,WAAW,O,gCAExF5tB,GACX,OAAOmO,UAAO0f,YAAY7tB,K,0CAEVqC,EAASukB,GACzB,OAAO,IAAInf,WAAW,CACpBpF,EACCukB,GAAQ,GAAM,IACdA,GAAQ,EAAK,IACP,IAAPA,M,kCAIF,IAAIlkB,EAAS,IAAIyL,UAOjB,OANAzL,EAAO0d,MAAMC,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAAS,IAAIoG,WAAW,CAC5D,IAAM,IAAM,IAAM,GAClB,EAAK,EAAK,EAAM,EAChB,IAAM,IAAM,IAAM,GAClB,IAAM,GAAM,IAAM,OAEb/E,EAAOA,S,gCAEHD,GACX,IAAIC,EAAS,IAAIyL,UAAc/M,EAAO,EAClCua,EAAO0E,KAAK1E,KAAKlZ,EAAKsP,SAAUtP,EAAK8b,WACrCuP,EAAOzN,KAAKyN,KAAKrrB,EAAKsP,SAAUtP,EAAK8b,WACrCwP,EAAQ1N,KAAKvE,UAAUrZ,GACvBurB,EAAQ,IAAIvmB,WAAW,IAQ3B,MAJA,CAACkU,EAAMmS,EAAMC,EAFXC,EADEvrB,EAAK4Z,aACCgE,KAAKtE,UAAUtZ,GAELurB,GAAO5f,QAAQ,SAAArL,GACjC3B,GAAQ2B,EAAKH,aAEfF,EAAO0d,MAAMC,KAAKjf,KAAKA,GAAOif,KAAKhf,KAAK,QAASsa,EAAMmS,EAAMC,EAAOC,GAC7DtrB,EAAOA,S,gCAEHqP,EAAU3F,GACrB,IAAI1J,EAAS,IAAIyL,UAIb8f,GAHJlc,GAAY3F,EAGA,IAAI3E,WAAW,CACzB,EACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EACjB2E,GAAa,GAAM,IACnBA,GAAa,GAAM,IACnBA,GAAa,EAAK,IACP,IAAZA,EACC2F,GAAY,GAAM,IAClBA,GAAY,GAAM,IAClBA,GAAY,EAAK,IACP,IAAXA,EACA,EAAM,EAAM,EAAM,EAClB,EAAM,EACN,EAAM,EACN,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,GAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,KAGpB,OADArP,EAAO0d,MAAMC,KAAKjf,KAAK,EAAI6sB,EAAMnoB,QAASua,KAAKhf,KAAK,QAAS,IAAIoG,WAAWwmB,IACrEvrB,EAAOA,S,0CAEED,GAChB,IAAIC,EAAS,IAAIyL,UAAc/M,EAAO,EAClCkc,EAAO+C,KAAK/C,KAAK,CACnBpO,GAAI,EACJ6C,SAAUtP,EAAK4Y,cACfjP,UAAW3J,EAAKuZ,eAChBnR,MAAOpI,EAAKoI,MACZC,OAAQrI,EAAKqI,OACbzJ,KAAM,UAEJ6sB,EAAO7N,KAAK6N,KAAK,CACnB7sB,KAAM,QACN+K,UAAW3J,EAAKuZ,eAChBjK,SAAUtP,EAAK4Y,cACfe,IAAK3Z,EAAK2Z,IACVF,IAAKzZ,EAAKyZ,IACVC,IAAK1Z,EAAK0Z,IACVO,WAAYja,EAAKia,WACjB7R,MAAOpI,EAAKoI,MACZC,OAAQrI,EAAKqI,OACb2M,WAAYhV,EAAKgV,WACjB+E,SAAU/Z,EAAK+Z,SACfC,SAAUha,EAAKga,SACfkC,KAAMlc,EAAKkc,OAMb,MAJA,CAACrB,EAAM4Q,GAAM9f,QAAQ,SAAArL,GACnB3B,GAAQ2B,EAAKH,aAEfF,EAAO0d,MAAMC,KAAKjf,KAAKA,GAAOif,KAAKhf,KAAK,QAASic,EAAM4Q,GAChDxrB,EAAOA,S,0CAEED,GAChB,IAAIC,EAAS,IAAIyL,UAAc/M,EAAO,EAClCkc,EAAO+C,KAAK/C,KAAK,CACnBpO,GAAI,EACJ6C,SAAUtP,EAAK6Y,cACflP,UAAW3J,EAAKwZ,eAChBpR,MAAO,EACPC,OAAQ,EACRzJ,KAAM,UAEJgb,EAAe5Z,EAAK4Z,aACpBC,EAAa7Z,EAAK6Z,WAClB4R,EAAO7N,KAAK6N,KAAK,CACnB7sB,KAAM,QACN+K,UAAW3J,EAAKwZ,eAChBlK,SAAUtP,EAAK6Y,cACfe,eACAC,aACAoC,YAAajc,EAAKic,cAMpB,MAJA,CAACpB,EAAM4Q,GAAM9f,QAAQ,SAAArL,GACnB3B,GAAQ2B,EAAKH,aAEfF,EAAO0d,MAAMC,KAAKjf,KAAKA,GAAOif,KAAKhf,KAAK,QAASic,EAAM4Q,GAChDxrB,EAAOA,S,gCAEHD,GACX,IAAIC,EAAS,IAAIyL,UACbe,EAAKzM,EAAKyM,GAEV6C,EAAWtP,EAAKsP,SAAWtP,EAAK8b,UAEhC1T,EAAQpI,EAAKoI,MAEbC,EAASrI,EAAKqI,OAEdzJ,EAAOoB,EAAKpB,KAKZwpB,EAAU,IAAIpjB,WAAW,CAC3B,EACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,EAClB,IAAM,IAAM,IAAM,GACjByH,GAAM,GAAM,IACZA,GAAM,GAAM,IACZA,GAAM,EAAK,IACP,IAALA,EACA,EAAM,EAAM,EAAM,EACjB6C,GAAY,GAAM,IAClBA,GAAY,GAAM,IAClBA,GAAY,EAAK,IACP,IAAXA,EACA,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EACN,EAAe,UAAT1Q,EAAmB,EAAO,EACvB,UAATA,EAAmB,EAAO,EAAM,EAChC,EAAM,EACN,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,GAAM,EAAM,EAAM,EACjBwJ,GAAS,EAAK,IACP,IAARA,EACA,EAAM,EACLC,GAAU,EAAK,IACP,IAATA,EACA,EAAM,IAGR,OADApI,EAAO0d,MAAMC,KAAKjf,KAAK,EAAIypB,EAAQjoB,YAAayd,KAAKhf,KAAK,QAASwpB,GAC5DnoB,EAAOA,S,gCAEHD,GACX,IAAIC,EAAS,IAAIyL,UAAc4D,EAAWtP,EAAKsP,SAAcoc,EAAY1rB,EAAK0rB,UAU9E,OATAzrB,EAAO0d,MAAMC,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,SAEtCqB,EAAO0d,MAAMC,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,SACtCqB,EAAO0d,MAAM,IAAI3Y,WAAW,CAC1B,EAAM,EAAM,EAAM,EACjBsK,GAAY,GAAM,IAAOA,GAAY,GAAM,IAAOA,GAAY,EAAK,IAAiB,IAAXA,EACzEoc,GAAa,GAAM,IAAOA,GAAa,GAAM,IAAOA,GAAa,EAAK,IAAkB,IAAZA,EAC7E,EAAM,EAAM,EAAM,KAEbzrB,EAAOA,S,gCAEHD,GACX,IAAIC,EAAS,IAAIyL,UAAc/M,EAAO,EAClC8b,EAAOmD,KAAKnD,KAAKza,EAAK2J,WACtB6Q,EAAOoD,KAAKpD,KAAKxa,EAAKpB,MACtB+sB,EAAO/N,KAAK+N,KAAK3rB,GAKrB,MAJA,CAACya,EAAMD,EAAMmR,GAAMhgB,QAAQ,SAAArL,GACzB3B,GAAQ2B,EAAKH,aAEfF,EAAO0d,MAAMC,KAAKjf,KAAKA,GAAOif,KAAKhf,KAAK,QAAS6b,EAAMD,EAAMmR,GACtD1rB,EAAOA,S,gCAEH0J,GAAyB,IAAd2F,EAAc,uDAAH,EAC7BrP,EAAS,IAAIyL,UAIb0c,GAHJ9Y,GAAY3F,EACczI,KAAKC,MAAMmO,GAAyB,EAAb4b,IACvBhqB,KAAKC,MAAMmO,GAAyB,EAAb4b,IACnC,IAAIlmB,WAAW,CAC3B,EAAM,EAAM,EAAM,EAClB,IAAM,GAAM,GAAM,GACjB2E,GAAa,GAAM,IAAOA,GAAa,GAAM,IAAOA,GAAa,EAAK,IAAkB,IAAZA,EAC7E,EAAM,EAAM,EAAM,EAClB,GAAM,IACN,EAAM,KAGR,OADA1J,EAAO0d,MAAMC,KAAKjf,KAAK,GAAKypB,EAAQjoB,YAAayd,KAAKhf,KAAK,QAASgf,KAAKgO,UAAU,EAAG,GAAIxD,GACnFnoB,EAAOA,S,gCAEHrB,GACX,IAAIqB,EAAS,IAAIyL,UACbnO,EAAQ,CAAC,EACX,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,EAClB,IAAM,IAAM,IAAM,IAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,GAAM,IAAM,IAAM,IAClB,IAAM,GAAM,GAAM,IAClB,IAAM,IAAM,IAAM,IAAM,GAS1B,MAPa,UAATqB,IACFrB,EAAM+F,OAAN,MAAA/F,EAAA,CAAa,EAAG,GAAhB,OAAsB,CAAC,IAAM,IAAM,IAAM,OACzCA,EAAM+F,OAAN,MAAA/F,EAAA,CAAa,GAAI,IAAjB,OAAwB,CAAC,GAAM,IAAM,IAAM,IACzC,IAAM,GAAM,GAAM,IAClB,IAAM,IAAM,IAAM,IAAM,MAE5B0C,EAAO0d,MAAMC,KAAKjf,KAAK,EAAIpB,EAAM8F,QAASua,KAAKhf,KAAK,QAAS,IAAIoG,WAAWzH,IACrE0C,EAAOA,S,gCAEHD,GACX,IAAIC,EAAS,IAAIyL,UAAc/M,EAAO,EAClCulB,EAAqB,UAAdlkB,EAAKpB,KAAmBgf,KAAKsG,OAAStG,KAAK0I,OAClDuF,EAAOjO,KAAKiO,OACZC,EAAOlO,KAAKkO,KAAK9rB,GAKrB,MAJA,CAACkkB,EAAM2H,EAAMC,GAAMngB,QAAQ,SAAArL,GACzB3B,GAAQ2B,EAAKH,aAEfF,EAAO0d,MAAMC,KAAKjf,KAAKA,GAAOif,KAAKhf,KAAK,QAASslB,EAAM2H,EAAMC,GACtD7rB,EAAOA,S,kCAGd,IAAIA,EAAS,IAAIyL,UASjB,OARAzL,EAAO0d,MAAMC,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAAS,IAAIoG,WAAW,CAC5D,EACA,EAAM,EAAM,EACZ,EAAM,EACN,EAAM,EACN,EAAM,EACN,EAAM,KAED/E,EAAOA,S,kCAGd,IAAIA,EAAS,IAAIyL,UAOjB,OANAzL,EAAO0d,MAAMC,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAAS,IAAIoG,WAAW,CAC5D,EACA,EAAM,EAAM,EACZ,EAAM,EACN,EAAM,KAED/E,EAAOA,S,kCAGd,IAAIA,EAAS,IAAIyL,UAUjB,OADAzL,EAAO0d,MAAMC,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAASgf,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAAS,IAAIoG,WAR1E,CAAC,EACV,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,GAClB,IAAM,IAAM,IAAM,GAClB,EACA,EAAM,EAAM,KAGP/E,EAAOA,S,gCAEHD,GACX,IAAIC,EAAS,IAAIyL,UAAc/M,EAAO,EAClConB,EAAOnI,KAAKmI,KAAK/lB,GACjB8c,EAAOc,KAAKd,OACZF,EAAOgB,KAAKhB,OACZC,EAAOe,KAAKf,OACZE,EAAOa,KAAKb,OAchB,MAbiB,UAAd/c,EAAKpB,MAEN,CAACmnB,EAAMjJ,EADHZ,EAAO0B,KAAK1B,KAAKlc,EAAKkc,MACPU,EAAMC,EAAME,GAAMpR,QAAQ,SAAArL,GAC3C3B,GAAQ2B,EAAKH,aAEfF,EAAO0d,MAAMC,KAAKjf,KAAKA,GAAOif,KAAKhf,KAAK,QAASmnB,EAAMjJ,EAAMZ,EAAMU,EAAMC,EAAME,KAE/E,CAACgJ,EAAMjJ,EAAMF,EAAMC,EAAME,GAAMpR,QAAQ,SAAArL,GACrC3B,GAAQ2B,EAAKH,aAEfF,EAAO0d,MAAMC,KAAKjf,KAAKA,GAAOif,KAAKhf,KAAK,QAASmnB,EAAMjJ,EAAMF,EAAMC,EAAME,IAGpE9c,EAAOA,S,gCAEHD,GACX,IAAIC,EAAS,IAAIyL,UAAc0c,SAE7BA,EADgB,UAAdpoB,EAAKpB,KACGgf,KAAKtD,KAAKta,IACwB,EAAnCA,EAAKgV,WAAWC,QAAQ,QACvB2I,KAAKvC,KAAKrb,GAEV4d,KAAKqN,KAAKjrB,GAStB,OAPAC,EAAO0d,MACLC,KAAKjf,KAAK,GAAKypB,EAAQjoB,YACvByd,KAAKhf,KAAK,QACVgf,KAAKgO,UAAU,EAAG,GAClB,IAAI5mB,WAAW,CAAC,EAAM,EAAM,EAAM,IAClCojB,GAEKnoB,EAAOA,S,gCAEHD,GACX,IAAIC,EAAS,IAAIyL,UACb0c,EAAU,IAAIpjB,WAAW,CAC3B,EAAM,EAAM,EACZ,EAAM,EAAM,EACZ,EAAM,EACN,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAMhF,EAAK4Z,aACX,EAAM,GACN,EAAM,EAAM,EAAM,EACjB5Z,EAAK6Z,YAAc,EAAK,IACP,IAAlB7Z,EAAK6Z,WACL,EAAM,IAEJQ,EAAOuD,KAAKvD,KAAKra,EAAKic,aAE1B,OADAhc,EAAO0d,MAAMC,KAAKjf,KAAK,EAAIypB,EAAQjoB,WAAaka,EAAKla,YAAayd,KAAKhf,KAAK,QAASwpB,EAAS/N,GACvFpa,EAAOA,S,kCAEuB,IAA1BmS,EAA0B,uDAAjB,CAAC,GAAI,IAAK,EAAG,GAC3B2Z,EAAY3Z,EAAO/O,OACrBpD,EAAS,IAAIyL,UACb0c,EAAU,IAAIpjB,WAAW,CAC3B,EACA,EAAM,EAAM,EAEZ,EACA,GAAO+mB,EACP,EAAM,EACN,EAEA,EACA,GAAOA,EACP,GACA,GACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAElB,GACArP,OAAO,CAACqP,IAAYrP,OAAOtK,GAAQsK,OAAO,CAAC,EAAM,EAAM,KAEzD,OADAzc,EAAO0d,MAAMC,KAAKjf,KAAK,EAAIypB,EAAQjoB,YAAayd,KAAKhf,KAAK,QAASwpB,GAC5DnoB,EAAOA,S,gCAEHD,GACX,IAAIC,EAAS,IAAIyL,UACb+N,EAAMzZ,EAAKyZ,IAASC,EAAM1Z,EAAK0Z,IAAStR,EAAQpI,EAAKoI,MAAWC,EAASrI,EAAKqI,OAAY8e,EAAWnnB,EAAKia,WAAW,GAAQmN,EAAWpnB,EAAKia,WAAW,GACxJ+R,EAAO,IAAIhnB,WAAW,CACxB,EACAyU,EAAI,GACJA,EAAI,GACJA,EAAI,GACJ,IACA,KACAiD,OAAO,CAACjD,EAAIpW,SAAW,EAAI,IAAmB,IAAboW,EAAIpW,SAAgBqZ,OAAOjD,GAAKiD,OAAO,GAAGA,OAAO,CAAChD,EAAIrW,SAAW,EAAI,IAAmB,IAAbqW,EAAIrW,SAAgBqZ,OAAOhD,IACrIuR,KAAO,IAAIjmB,WAAW,CACxB,EAAM,EAAM,EACZ,EAAM,EAAM,EACZ,EAAM,EACN,EAAM,EACN,EAAM,EACN,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EACjBoD,GAAS,EAAK,IACP,IAARA,EACCC,GAAU,EAAK,IACP,IAATA,EACA,EAAM,GAAM,EAAM,EAClB,EAAM,GAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EACN,GACA,IAAM,GAAM,IAAM,IAClB,IAAM,IAAM,IAAM,IAClB,IAAM,IAAM,IAAM,GAClB,IAAM,IAAM,IAAM,GAClB,IAAM,IAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EACZ,EAAM,GACN,GAAM,KACJkiB,EAAO,IAAIvlB,WAAW,CACxB,EAAM,GAAM,IAAM,IAClB,EAAM,GAAM,IAAM,IAClB,EAAM,GAAM,IAAM,MAEhBkiB,EAAO,IAAIliB,WAAW,CACvBmiB,GAAY,GACZA,GAAY,GAAM,IAClBA,GAAY,EAAK,IACP,IAAXA,EACCC,GAAY,GACZA,GAAY,GAAM,IAClBA,GAAY,EAAK,IACP,IAAXA,IASF,OANAnnB,EAAO0d,MACLC,KAAKjf,KAvD+B,GAuDnBssB,KAAK9qB,WAAa6rB,EAAK7rB,WAAaoqB,EAAKpqB,YAAayd,KAAKhf,KAAK,QAASqsB,KAC1FrN,KAAKjf,KAAK,EAAIqtB,EAAK7rB,YAAayd,KAAKhf,KAAK,QAASotB,EACnDpO,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAAS2rB,EAClC3M,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAASsoB,GAE7BjnB,EAAOA,S,gCAEHD,GACX,IAAMC,EAAS,IAAIyL,UACb0c,EAAU,IAAIpjB,WAAW,CAC7B,EAAM,EAAM,EACZ,EAAM,EAAM,EACZ,EAAM,EACN,EAAM,EACN,EAAM,EACN,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EACjBhF,EAAKoI,OAAS,EAAK,IACP,IAAbpI,EAAKoI,MACJpI,EAAKqI,QAAU,EAAK,IACP,IAAdrI,EAAKqI,OACL,EAAM,GAAM,EAAM,EAClB,EAAM,GAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EACN,EACA,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EACZ,EAAM,GACN,IAAM,MAQR,OALApI,EAAO0d,MACLC,KAAKjf,KAAK,EAAIypB,EAAQjoB,WAAa,EAAIH,EAAKga,SAAS7Z,WAAa,IAAKyd,KAAKhf,KAAK,QAASwpB,EAC1FxK,KAAKjf,KAAK,EAAIqB,EAAKga,SAAS7Z,YAAayd,KAAKhf,KAAK,QAAS,IAAIoG,WAAWhF,EAAKga,UAChF4D,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAAS,IAAIoG,WAAW,CAAC,EAAM,KAEnD/E,EAAOA,S,kCAGd,IAAIA,EAAS,IAAIyL,UACb0c,EAAU,IAAIpjB,WAAW,CAC3B,EACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,IAGpB,OADA/E,EAAO0d,MAAMC,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAASwpB,GACxCnoB,EAAOA,S,gCAEHgsB,GACX,IAAIhsB,EAAS,IAAIyL,UACb6R,EAAU,GAOV6K,GANJ6D,EAAQ1O,QAAQ5R,QAAQ,SAAArL,GACtBid,EAAQ5d,KAAKW,GAAQ,IACrBid,EAAQ5d,KAAMW,GAAQ,GAAM,KAC5Bid,EAAQ5d,KAAMW,GAAQ,EAAK,KAC3Bid,EAAQ5d,KAAY,IAAPW,KAED,IAAI0E,WAAW,CAC3B,EACA,EAAM,EAAM,EACXinB,EAAQjrB,OAAS,GACjBirB,EAAQjrB,OAAS,GAAM,IACvBirB,EAAQjrB,OAAS,EAAK,IACP,IAAhBirB,EAAQjrB,OACR0b,OAAOa,KAET,OADAtd,EAAO0d,MAAMC,KAAKjf,KAAK,GAAI,EAAEstB,EAAQjrB,OAAQ4c,KAAKhf,KAAK,QAASwpB,GACzDnoB,EAAOA,S,kCAGd,IAAIA,EAAS,IAAIyL,UACb0c,EAAU,IAAIpjB,WAAW,CAC3B,EACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,IAGpB,OADA/E,EAAO0d,MAAMC,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAASwpB,GACxCnoB,EAAOA,S,kCAGd,IAAIA,EAAS,IAAIyL,UACb0c,EAAU,IAAIpjB,WAAW,CAC3B,EACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,IAGpB,OADA/E,EAAO0d,MAAMC,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAASwpB,GACxCnoB,EAAOA,S,kCAGd,IAAIA,EAAS,IAAIyL,UACb0c,EAAU,IAAIpjB,WAAW,CAC3B,EACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,IAGpB,OADA/E,EAAO0d,MAAMC,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAASwpB,GACxCnoB,EAAOA,S,gCAEHqP,EAAUwM,GACrB,IAAI7b,EAAS,IAAIyL,UACbwgB,EAAOxgB,UAAO0f,YAAY9b,EAAWwM,GAEzC,OADA7b,EAAO0d,MAAMC,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAASgf,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAASgf,KAAKgO,UAAU,EAAG,GAAIM,EAAMtO,KAAKuO,MAAM,GAAIvO,KAAKwO,MAAM,IAChInsB,EAAOA,S,gCAEHwM,GACX,IAAIxM,EAAS,IAAIyL,UACb0c,EAAU,IAAIpjB,WAAW,CAC3B,EACA,EAAM,EAAM,EACXyH,GAAM,GACNA,GAAM,GAAM,IACZA,GAAM,EAAK,IACN,IAALA,EACD,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,IAGpB,OADAxM,EAAO0d,MAAMC,KAAKjf,KAAK,EAAIypB,EAAQjoB,YAAayd,KAAKhf,KAAK,QAASwpB,GAC5DnoB,EAAOA,S,kCAEFwM,GACZ,IAAIxM,EAAS,IAAIyL,UACb0c,EAAU,IAAIpjB,WAAW,CAC3B,EACA,EAAM,EAAM,EACXyH,GAAM,GACNA,GAAM,GAAM,IACZA,GAAM,EAAK,IACN,IAALA,EACD,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,IAGpB,OADAxM,EAAO0d,MAAMC,KAAKjf,KAAK,EAAIypB,EAAQjoB,YAAayd,KAAKhf,KAAK,QAASwpB,GAC5DnoB,EAAOA,S,kCAEFwM,GACZ,IAAIxM,EAAS,IAAIyL,UACb0c,EAAU,IAAIpjB,WAAW,CAC3B,EACA,EAAM,EAAM,EACXyH,GAAM,GACNA,GAAM,GAAM,IACZA,GAAM,EAAK,IACN,IAALA,EACD,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,IAGpB,OADAxM,EAAO0d,MAAMC,KAAKjf,KAAK,EAAIypB,EAAQjoB,YAAayd,KAAKhf,KAAK,QAASwpB,GAC5DnoB,EAAOA,S,gCAEHD,GACX,IAAIC,EAAS,IAAIyL,UAAc/M,EAAO,EAClC0tB,EAAOzO,KAAKyO,KAAKrsB,GACjBssB,EAAO1O,KAAK0O,KAAKtsB,GAKrB,MAJA,CAACqsB,EAAMC,GAAM3gB,QAAQ,SAAArL,GACnB3B,GAAQ2B,EAAKH,aAEfF,EAAO0d,MAAMC,KAAKjf,KAAKA,GAAOif,KAAKhf,KAAK,QAASytB,EAAMC,GAChDrsB,EAAOA,S,gCAEHD,GACX,IAAIC,EAAS,IAAIyL,UACb0c,EAAU,KAEZA,GADEpoB,EAAKyM,GACGf,UAAO0f,aAAaprB,EAAK8d,WAAa,GAAK,IAMvD,OADA7d,EAAO0d,MAAMC,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAASgf,KAAKgO,UAAU,EAAG,GAAIxD,GAC9DnoB,EAAOA,S,gCAEHD,GACX,IAAIC,EAAS,IAAIyL,UAAc/M,EAAO,EAClCsmB,EAAOrH,KAAKqH,KAAKjlB,EAAKyM,IACtB8f,EAAO3O,KAAK2O,KAAKvsB,EAAMA,EAAKgE,MAC5BwoB,EAAO5O,KAAK4O,KAAKxsB,GACjBysB,EAAO7O,KAAK6O,KAAKzsB,EAAMwsB,EAAKrsB,YAKhC,MAJA,CAAC8kB,EAAMsH,EAAMC,EAAMC,GAAM9gB,QAAQ,SAAArL,GAC/B3B,GAAQ2B,EAAKH,aAEfF,EAAO0d,MAAMC,KAAKjf,KAAKA,GAAOif,KAAKhf,KAAK,QAASqmB,EAAMsH,EAAMC,EAAMC,GAC5DxsB,EAAOA,S,gCAEHwM,GACX,IAAIxM,EAAS,IAAIyL,UACb0c,EAAU1c,UAAO0f,YAAY3e,GAIjC,OAHAxM,EAAO0d,MAAMC,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAAS,IAAIoG,WAAW,CAC5D,EAAM,EAAM,EAAM,IAChBojB,GACGnoB,EAAOA,S,gCAEHD,EAAMgE,GACjB,IAAI/D,EAAS,IAAIyL,UACbghB,EAAQxrB,KAAKC,MAAM6C,GAAqB,EAAbknB,IAC3ByB,EAAQzrB,KAAKC,MAAM6C,GAAqB,EAAbknB,IAE/B,OADAjrB,EAAO0d,MAAMC,KAAKjf,KAAK,IAAKif,KAAKhf,KAAK,QAASgf,KAAKgO,UAAU,EAAG,GAAIlgB,UAAO0f,YAAYsB,GAAQhhB,UAAO0f,YAAYuB,IAC5G1sB,EAAOA,S,gCAEHD,EAAM4sB,GACjB,IAAIngB,EAAKzM,EAAKyM,GACV5E,EAAc,IAAP4E,EAAW,GAAK,GACvBxM,EAAS,IAAIyL,UACb4U,EAAc5U,UAAO0f,YAAYprB,EAAKqd,QAAQha,QAW9Coa,EAAS/R,UAAO0f,YAAY,GAAwCvjB,EAAO7H,EAAKqd,QAAQha,OAASupB,GAYrG,OAXA3sB,EAAO0d,MAAMC,KAAKjf,KAAK,GAAKkJ,EAAO7H,EAAKqd,QAAQha,QAASua,KAAKhf,KAAK,QAASgf,KAAKgO,UAAU,EAAG5rB,EAAKH,OAAQygB,EAAa7C,GACxHzd,EAAKqd,QAAQ1R,QAAQ,SAACrL,EAAMgO,GAC1BrO,EAAO0d,MAAMjS,UAAO0f,YAAY9qB,EAAKgP,WACrCrP,EAAO0d,MAAMjS,UAAO0f,YAAY9qB,EAAK3B,OAC1B,IAAP8N,GACFxM,EAAO0d,MAAMjS,UAAO0f,YAAY9qB,EAAKzC,IAAM,SAAa,WACxDoC,EAAO0d,MAAMjS,UAAO0f,YAAY9qB,EAAKmd,UAErCxd,EAAO0d,MAAMjS,UAAO0f,YAAY,aAG7BnrB,EAAOA,S,gCAEHD,GACX,IAAIC,EAAS,IAAIyL,UAKjB,OAJAzL,EAAO0d,MAAMC,KAAKjf,KAAK,GAAKqB,EAAKqd,QAAQha,QAASua,KAAKhf,KAAK,QAASgf,KAAKgO,UAAU,EAAG,IACvF5rB,EAAKqd,QAAQ1R,QAAQ,SAAArL,GACnBL,EAAO0d,MAAM,IAAI3Y,WAAuB,IAAZhF,EAAKyM,GAAW,CAACnM,EAAKzC,IAAM,GAAK,IAAM,CAAC,QAE/DoC,EAAOA,S,gCAEHD,GACX,IAAIC,EAAS,IAAIyL,UACb/M,EAAO,EAQX,OAPAqB,EAAKqd,QAAQ1R,QAAQ,SAAArL,GACnB3B,GAAQ2B,EAAK3B,OAEfsB,EAAO0d,MAAMC,KAAKjf,KAAKA,GAAOif,KAAKhf,KAAK,SACxCoB,EAAKqd,QAAQ1R,QAAQ,SAAArL,GACnBL,EAAO0d,MAAMrd,EAAKL,UAEbA,EAAOA,W,kBAIH2d,E,6GCrsBA,SAASiP,mBAAmB/f,GACvC,IAAMggB,EAAY,GAClB,GAAIhgB,aAAe3K,OAAO4K,eACtB,IACoBD,EAAIigB,wBAEAC,OAAOC,MAAM,WAC7BthB,QAAQ,SAAUpM,GAClB,IAAM2tB,EAAQ3tB,EAAK0tB,MAAM,MACnBE,EAASD,EAAME,QACf7vB,EAAQ2vB,EAAMxgB,KAAK,MACzBogB,EAAUK,GAAU5vB,IAE1B,MAAOsO,IAGb,OAAOihB,G,mGChBX,IAAIza,EAAO,CAUXA,QAAe,SAAUoB,EAAM7U,GAAmB,IAGxCgC,EAH2BkS,EAAa,uDAAJ,GAc5C,OAbIW,EAAK7U,OAASA,EACZ6U,GAAQA,EAAK5U,UACX+B,EAAM6S,EAAK5U,OAAOwP,OAAO,SAAA/N,GAAA,OAAQA,EAAK1B,OAASA,KAC3CyE,OACNzC,EAAI+K,QAAQ,SAAArL,GAAA,OAAQwS,EAAOnT,KAAKW,KAEhCmT,EAAK5U,OAAO8M,QAAQ,SAAArL,GAAA,OAAQ+R,EAAK8G,QAAQ7Y,EAAM1B,EAAMkU,MAIzDA,EAAOnT,KAAK8T,GAGS,GADvBX,EAAS,GAAG4J,OAAO5J,IACLzP,OAAayP,EAASA,EAAO,IAG7CT,SAAgB,SAAUqQ,EAAKrf,EAAQgqB,GAGrC,IAFA,IAAIC,EAAUpuB,OAAOmuB,GAAUlW,EAAM9T,GAAU,EAAOkqB,EAASrsB,KAAK2G,KAAKsP,EAAMmW,EAAQjqB,QACnFmqB,EAAQ,GAAQpwB,EAAI8B,OAAOwjB,GACxB6K,KACLC,EAAM7tB,KAAK2tB,GAEb,OAAOE,EAAM9gB,KAAK,IAAI+gB,UAAU,EAAGtW,EAAM/Z,EAAEiG,QAAUjG,GAQvDiV,MAAa,WAAoB,IAC/B,IAAIqb,EAAM,GADqB,mBAAPnwB,EAAO,qBAAPA,EAAO,gBAK/B,OAHAA,EAAMoO,QAAQ,SAAArL,GACZotB,EAAI/tB,KAAK0S,EAAKwV,SAASzM,OAAO9a,GAAMshB,SAAS,IAAK,EAAG,MAEhD8L,GAQTrb,IAAW,WAAkB,IAC3B,IAAIrR,EAAQ,EADe,mBAAL2sB,EAAK,qBAALA,EAAK,gBAG3B,OADAA,EAAIhiB,QAAQ,SAAArL,GAAUU,GAASV,IACxBU,GASTqR,WAAkB,SAAUuK,EAAMgR,EAAc1Q,GAC9C,IAiBM2Q,EATAC,EAJFC,EAAc7Q,EAAQ0Q,GAC1B,OAAKG,GAWCD,EAAe5sB,KAAKC,OAAOysB,EAAeG,EAAY1H,cAAgB0H,EAAYvN,mBAClFqN,EAAsBE,EAAY1H,aAAeyH,EAAeC,EAAYvN,kBAGzE,CACLwN,YAHYD,EAAY9H,YAAc6H,EAItCG,eAHe,CAACJ,EAAqBD,MAbnCM,EAAatR,EAAKW,QAAQ4Q,MAC9BvR,EAAKW,QAAQ5d,KAAKuuB,GACdJ,EAAe5sB,KAAKC,OAAOysB,EAAeM,EAAW7H,cAAgB6H,EAAW1N,mBAG7E,CACLwN,YAHqBE,EAAWjI,YAAc6H,EAI9CG,eAAgB,CAHYC,EAAW7H,aAAe6H,EAAW1N,kBAAoBsN,EAG3CF,MAchDvb,iBAAwB,SAAUuK,EAAMG,EAAMF,EAAMiC,EAAOlD,EAAWsB,GAChEkR,EAAc/b,EAAKgc,WAAWzR,EAAMkC,EAAQ,EAAG5B,GAC/CoR,EAAOjc,EAAKic,IAAIhsB,MAAM,KAAMua,EAAKU,QAAQrd,MAAMkuB,EAAYH,eAAe,GAAK,EAAGG,EAAYH,eAAe,GAAK,IAElHnb,EADKiK,EAAKQ,QAAQ6Q,EAAYJ,YAAc,GAC9BM,EAAM1S,EAGjB,GAAI9I,EAAS,EAClB,eAAgBA,EAAhB,gBAAsCiK,EAAKQ,QAAQla,OAAnD,QAAiEgP,EAAKic,IAAIhsB,MAAM,KAAMua,EAAKU,QAAQrd,MAAM,EAAG4e,IAE9G,OAAOhM,GAGTT,eAAsB,SAAUyK,EAAME,EAAS8B,GAC7C,IAAI9a,SAAUsL,SAActO,EAAQ,EAAOyd,EAAY,EAAOhB,EAAS,EAoBvE,OAnBAX,EAAKsD,MAAMhK,MAAM,SAAA9V,GAEf,OADAgP,EAAWhP,EAAKulB,eACZ/G,EAAQ9d,EAAQV,EAAKggB,aACvBtc,EAAOya,GAAaK,EAAQ9d,GAASV,EAAKulB,gBACnC,IAEP7kB,GAASV,EAAKggB,YACd7B,GAAane,EAAKggB,YAAchR,GACzB,KAGP0N,GACCA,EAAQ8B,KACTrB,EAAST,EAAQ8B,IAMd,CAAC9a,KAFNA,EADGA,GACIya,GAAaK,EAAQ9d,GAASsO,EAEzBA,WAAUmO,WAG1BpL,sBAA6B,SAAUyK,EAAMhB,EAAW9X,GACtD,IAAqDuqB,EAAjD9P,EAAY,EAAOK,EAAQ,EAAO9d,EAAQ,EAa9C,OAZA8b,EAAK1G,MAAM,SAAC9V,EAAMgO,GAEhB,OADAigB,EAAejuB,EAAKggB,YAAchgB,EAAKulB,eAAiB/J,EACpD9X,GAAQya,EAAY8P,GACtBzP,EAAQ9d,EAAQE,KAAK2G,MAAM7D,EAAOya,GAAa3C,EAAYxb,EAAKulB,gBAChEpH,GAAwBvd,KAAK2G,MAAM7D,EAAOya,GAAa3C,EAAYxb,EAAKulB,gBAAkBvlB,EAAKulB,eAAiB/J,GACzG,IAEP2C,GAAa8P,EACbvtB,GAASV,EAAKggB,aACP,KAGJ,CAACxB,QAAOL,cAGjBpM,iBAAwB,SAAU8H,EAAM2B,GACtC,IAAIgB,EAAOzK,EAAK8G,QAAQgB,EAAM,QAAa7K,EAAW,EAItD,OAHAwN,EAAKsD,MAAMzU,QAAQ,SAAArL,GACjBgP,GAAYhP,EAAKggB,YAAchgB,EAAKulB,iBAE/BzK,OAAO9L,EAAWwM,GAAWpT,QAAQ,IAG9C2J,oBAA2B,SAAUqQ,GAGnC,IAFA,IAAI8L,EAAM,IAAI3tB,YAAY6hB,EAAIrf,QAC1BorB,EAAO,IAAIzpB,WAAWwpB,GACjBlyB,EAAI,EAAGA,EAAIomB,EAAIrf,OAAQ/G,IAC9BmyB,EAAKnyB,GAAKomB,EAAIyI,WAAW7uB,GAE3B,OAAOkyB,GAQTnc,QAAe,SAAUqQ,GAEvB,IADA,IAAI8L,EAAM,IAAIxpB,WAAW0d,EAAIrf,OAAS,GAC7B/G,EAAI,EAAGA,EAAIomB,EAAIrf,OAAQ/G,GAAK,EACnCkyB,EAAIlyB,EAAI,GAAK6F,OAAOusB,SAAShM,EAAIiM,OAAOryB,EAAG,GAAI,IAEjD,OAAOkyB,GAETnc,aAAoB,SAAUuc,GAG5B,IAFA,IACIC,EAAM,GACDvyB,EAAI,EAAGA,EAAIsyB,EAAMvrB,OAAQ/G,GAFxB,KAEkC,CAC1C,IAAIwyB,EAAWF,EAAM1jB,SAAS5O,EAAGA,EAHzB,MAIRuyB,GAAO3vB,OAAOC,aAAamD,MAAM,KAAMwsB,GAGzC,OAAOD,GAETxc,oBAA2B,SAAUmc,GAGnC,IAFA,IAAI9L,EAAM,GACN+L,EAAO,IAAIzpB,WAAWwpB,GACjBlyB,EAAI,EAAGA,EAAImyB,EAAKprB,OAAQ/G,IAC/BomB,GAAOxjB,OAAOC,aAAasvB,EAAKnyB,IAElC,OAAOomB,GAETrQ,YAAmB,SAAUqQ,GAG3B,IAFA,IAAIqM,EAAM5sB,OAAO6sB,KAAKtM,EAAIuM,QAAQ,KAAM,KAAKA,QAAQ,KAAM,MACvD1tB,EAAM,GACDjF,EAAI,EAAGA,EAAIyyB,EAAI1rB,OAAQ/G,IAC9BiF,IAAQ,IAAMwtB,EAAI5D,WAAW7uB,GAAGslB,SAAS,KAAK+M,QAAQ,GAExD,OAAOptB,GAYT8Q,SAAgB,SAAUmc,EAAKU,GAEzB1D,EAAQnZ,EAAKlT,aAAaqvB,GAC9BU,OAAuB5R,IAAZ4R,GAAgCA,EACvCC,EAAShtB,OAAOitB,KAAK5D,GAAOyD,QAAQ,MAAO,KAAKA,QAAQ,MAAO,KACnE,OAAOC,EAAUC,EAASA,EAAOF,QAAQ,MAAO,KAGlD5c,OAAc,SAAUqQ,GAetB,IATA,IAAI2M,EAAUC,mBAAmB5M,GAM7B6M,EAAOC,SAASH,GAEhBvc,EAAS,IAAI9N,WAAWuqB,EAAKlsB,QACxB/G,EAAI,EAAGA,EAAIizB,EAAKlsB,SAAU/G,EACjCwW,EAAOxW,GAAKizB,EAAKpE,WAAW7uB,GAE9B,OAAOwW,EAAO7S,QAGhBoS,eAAsB,SAAU9U,GAC9B,OAAQ,IAAK6d,OAAO7d,GAAOqkB,SAAS,KAAM1hB,OAAO,GAAGuvB,eAEtDpd,SAAgB,SAAUqQ,GAExB,IADA,IAAIziB,EAAS,GACL3D,EAAI,EAAGA,EAAIomB,EAAIrf,OAAQ/G,GAAQ,EACrC2D,EAAON,KACL+uB,SAAShM,EAAIpmB,GAAKomB,EAAIpmB,EAAI,GAAI,KAGlC,OAAO,IAAI0I,WAAW/E,IAExBoS,QAAe,SAAUqQ,GACvB,GAAW,KAARA,EACD,MAAO,GAGT,IADA,IAAI8L,EAAM,GACFlyB,EAAI,EAAGA,EAAIomB,EAAIrf,OAAQ/G,IAC7BkyB,EAAI7uB,KAAK+iB,EAAIyI,WAAW7uB,IAE1B,OAAOkyB,GAETnc,MAAa,SAAUqd,GACrB,GAAKjsB,MAAMyW,QAAQwV,GAYnB,OAAOA,EAAEvU,IAAI,SAAA7a,GAAS,OAAOouB,SAASpuB,EAAM,MAT1C,IAFA,IACI/C,EADAixB,EAAM,GAEFlyB,EAAI,EAAGA,EAAIozB,EAAErsB,OAAQ/G,IACvBA,EAAI,IACNiB,EAAQmyB,EAAEpzB,EAAI,GAAKozB,EAAGpzB,GACtBkyB,EAAI7uB,KAAK+uB,SAASnxB,EAAO,MAI7B,OAAOixB,I,UAIInc,E,kaCvRf,M,yBACA,M,wEAEMI,E,WACJ,eAA+E,IAAlEkd,EAAkE,uDAAzD,6CAA8Cna,EAAW,c,4GAAA,YAC7E,aAAa/W,MACbA,KAAKkxB,OAASA,EACdlxB,KAAKmxB,YAAc,IAAIztB,OAAO0tB,YAAYra,GAC1C/W,KAAKwD,IAAME,OAAO2tB,IAAIC,gBAAgBtxB,KAAKmxB,aAC3CnxB,KAAK4N,MAAQ,GACb5N,KAAKuX,UAAW,EAChBvX,KAAKuxB,eAAgB,EACrBvxB,KAAKwxB,iBAAkB,EACvBxxB,KAAKyxB,wBAAyB,EAC9BzxB,KAAK0xB,cAAgB1xB,KAAK0xB,cAAcryB,KAAKW,MAC7CA,KAAK2xB,oBAAsB3xB,KAAK2xB,oBAAoBtyB,KAAKW,MACzDA,KAAK4xB,qBAAuB5xB,KAAK4xB,qBAAqBvyB,KAAKW,MAC3DA,KAAK6xB,yBAA2B7xB,KAAK6xB,yBAAyBxyB,KAAKW,MACnEA,KAAKmxB,YAAY9d,iBAAiB,aAAcrT,KAAK0xB,eACrD1xB,KAAKmxB,YAAY9d,iBAAiB,cAAerT,KAAK2xB,qB,kEAItD,IAAIrtB,EAAOtE,KACXsE,EAAKwtB,aAAextB,EAAK6sB,YAAYY,gBAAgBztB,EAAK4sB,QAC1D5sB,EAAKwtB,aAAaze,iBAAiB,QAASrT,KAAK4xB,sBACjDttB,EAAKwtB,aAAaze,iBAAiB,YAAarT,KAAK6xB,0BACrDvtB,EAAKQ,KAAK,gB,gEAGS+J,GACnB7O,KAAK8E,KAAK,QAAS,IAAIjE,UAAO,MAAO,GAAI,CAACC,KAAM,GAAIC,OAAQ,+BAAgCC,IAAK6N,EAAEU,a,0EAInG,IAMI/N,EANA8C,EAAOtE,KACXsE,EAAKQ,KAAK,aACP9E,KAAKwxB,kBAAoBxxB,KAAKyxB,uBAC/BzxB,KAAKgyB,gBAGHxwB,EAAS8C,EAAKsJ,MAAM+gB,UACVrqB,EAAKwtB,eAA+C,IAA/BxtB,EAAKwtB,aAAava,UAAqC,SAAfjT,EAAK2tB,MAC9E3tB,EAAKwtB,aAAa9b,aAAaxU,GACvBA,GACR8C,EAAKsJ,MAAMskB,QAAQ1wB,K,gEAKrBxB,KAAK8E,KAAK,iB,gDAeEtD,GACZ,IAEIswB,EAFJ,GAAItwB,EAGJ,OADIswB,EAAe9xB,KAAK8xB,aACpBA,IAAiBA,EAAava,UAA2B,SAAfvX,KAAKiyB,OACjDH,EAAa9b,aAAaxU,IACnB,IAEPxB,KAAK4N,MAAM1M,KAAKM,IACT,K,gDAIGnB,EAAOgB,GACnB,IAAIywB,EAAe9xB,KAAK8xB,aACpBA,IAA0C,IAA1BA,EAAava,UAAqC,SAAfvX,KAAKiyB,OAC1DH,EAAaziB,OAAOhP,EAAOgB,K,gDAK7BrB,KAAKwxB,iBAAkB,EACa,SAAhCxxB,KAAKmxB,YAAYriB,YAChB9O,KAAK8xB,eAAiB9xB,KAAK8xB,aAAava,WACzCvX,KAAKyxB,wBAAyB,EAC9BzxB,KAAKgyB,kB,kDAOThyB,KAAK4N,MAAQ,GACsB,SAAhC5N,KAAKmxB,YAAYriB,YAClB9O,KAAKmxB,YAAYpgB,gB,wCAShB/Q,KAAKuxB,gBAGRvxB,KAAKuxB,eAAgB,EACrB7tB,OAAO2tB,IAAIc,gBAAgBnyB,KAAKwD,KAC7BxD,KAAKmxB,cACNnxB,KAAKmxB,YAAYhb,oBAAoB,cAAenW,KAAK2xB,qBACzD3xB,KAAKmxB,YAAYhb,oBAAoB,aAAcnW,KAAK0xB,gBAEvD1xB,KAAK8xB,eACN9xB,KAAK8xB,aAAa3b,oBAAoB,QAASnW,KAAK4xB,sBACpD5xB,KAAK8xB,aAAa3b,oBAAoB,YAAanW,KAAK6xB,8B,gCAjE1D,OAAO7xB,KAAKmxB,YAAYriB,a,mCAIxB,OAAO9O,KAAKmxB,YAAYtgB,U,iBAGZ/R,GACZkB,KAAKmxB,YAAYtgB,SAAW/R,K,+CAyCVoyB,GAClB,OAAOxtB,OAAO0tB,aAAe1tB,OAAO0tB,YAAYgB,gBAAgBlB,O,iBAoBrDld,E,kDC5HfrW,EAAQ00B,YAAc,WACpB,IAAIC,EAAK5uB,OAAO0T,UAAUmb,UACtBC,EAAOF,EAAG9b,QAAQ,SAClBic,EAAUH,EAAG9b,QAAQ,YACzB,OAAc,EAAPgc,GAAsB,EAAVC,GAGrB90B,EAAQ6b,uBAAyB,WAC/B,IAAM2X,EAAeztB,OAAO0tB,YAAc1tB,OAAO0tB,aAAe1tB,OAAOgvB,kBACvE,OAAOvB,GAAsD,mBAAhCA,EAAYiB,iBAG3Cz0B,EAAQsW,YAAc,WACpB,OAAOtW,EAAQ6b,2BACT7b,EAAQ00B,eAGhB10B,EAAQ4b,qBAAuB,WAC7B,OAAQ5b,EAAQ00B,gB,wXCjBG5gB,E,WAEnB,yB,4GAAc,oBACZ,IAAIkhB,SACAC,SAOEC,EALU,IAAI/Y,QAAS,SAACzE,EAAS6B,GACrCyb,EAAiBtd,EACjBud,EAAgB1b,IAOlB,OAHA2b,EAAcxd,QAAUsd,EACxBE,EAAc3b,OAAS0b,EAEhBC,E,6DAKD/zB,M,oCAIDsa,Q,0BAxBY3H,E,6YCDAsH,E,WAEjB,eAAY+Z,I,4GAAQ,aAClB9yB,KAAK+yB,QAAUD,EACf9yB,KAAKgzB,eAAiB,K,0DAGdC,GAAiC,WAAjBzlB,EAAiB,uDAAN,KAG/B0lB,GADJlzB,KAAK8Y,QACO,GACRqa,EAAY,KAEhBnzB,KAAKgzB,eAAiB,WACpBtvB,OAAO0vB,aAAaD,GACpBD,GAAQ,GAYVC,EAAYzvB,OAAO8T,WATJ,SAATsb,SACAI,IACF,EAAKH,UACFvlB,GACCA,MAK+C,IAAjBylB,GAEtC,OAAOjzB,O,0CAGCqzB,GAAQ,WACfrzB,KAAKszB,UAAUD,EAAS,WACpB,EAAKpa,UAAUoa,O,kCAMhBrzB,KAAKgzB,iBACPhzB,KAAKgzB,iBACLhzB,KAAKgzB,eAAiB,U,mBA1CTja,E,odCMrB,OACqBrF,E,WAEjB,iBAAYjD,EAAQkD,I,4GAAQ,eACxB3T,KAAKyQ,OAASA,EACdzQ,KAAKuzB,UAAY9iB,EAAO2C,MACxBpT,KAAK2T,OAASA,EACd3T,KAAKwzB,MAAQ,IAAIC,UAEjBzzB,KAAK0zB,eAAiB1zB,KAAKuzB,UAAUzkB,WACrC9O,KAAK2zB,iBAAkB,EACvB3zB,KAAK4zB,sBAAuB,EAC5B5zB,KAAK6zB,iBAAkB,EACvB7zB,KAAK8zB,WAAa9zB,KAAKqS,WAAWhT,KAAKW,MACvCA,KAAK+zB,WAAa/zB,KAAKg0B,QAAQ30B,KAAKW,MACpCA,KAAKi0B,SAAW,4BAA4B7Q,KAAKhM,UAAUmb,aAAe,SAASnP,KAAKhM,UAAUmb,aAAe,aAAanP,KAAKhM,UAAU8c,WAC9G,IAA3Bl0B,KAAK2T,OAAOwgB,YACZn0B,KAAKqY,SAGTrY,KAAKo0B,WAAY,E,gEAGjBp0B,KAAKq0B,UAAU,gB,wCAIfr0B,KAAKo0B,WAAY,I,sCAGZ,WACLp0B,KAAKuzB,UAAUlgB,iBAAiB,UAAWrT,KAAK8zB,YAChD9zB,KAAKuzB,UAAUlgB,iBAAiB,OAAQrT,KAAK+zB,YAE7C/zB,KAAKwzB,MAAMc,OAAO,WACd,EAAKD,UAAU,WAChB,O,wDAIHr0B,KAAK6zB,iBAAkB,EACvB7zB,KAAKq0B,UAAU,qB,4CAIfr0B,KAAK4zB,sBAAuB,EAC5B5zB,KAAK6zB,iBAAkB,EACvB7zB,KAAK2zB,iBAAkB,I,0CAGjBxzB,GACN,GAAIH,KAAKuzB,UAAUzkB,aAAeylB,iBAAiBC,aAAnD,CAGA,GAAIx0B,KAAKuzB,UAAUkB,SACf,IAAKz0B,KAAK4zB,qBAAwB,YAElC5zB,KAAK4zB,sBAAuB,EAGhC,IASMc,EAEA9jB,EASA+jB,EAMAC,EA1BF50B,KAAKuzB,UAAUsB,QAAyC,IAA/B70B,KAAKuzB,UAAU3iB,aAAqB5Q,KAAKo0B,YAGlEp0B,KAAKuzB,UAAUzkB,aAAe9O,KAAK0zB,iBACnC1zB,KAAK2zB,iBAAkB,EACvB3zB,KAAK0zB,eAAiB1zB,KAAKuzB,UAAUzkB,YAGnCqG,EAAWnV,KAAKuzB,UAAUpe,SAC1Buf,EAAgB10B,KAAK2T,OAAO+gB,eAAiB,GAC7CI,EAAwB90B,KAAK2T,OAAOmhB,uBAAyB,GAC7DlkB,EAAc5Q,KAAKuzB,UAAU3iB,YAEvB,QADNf,EAAM7P,KAAK+0B,UAAU5f,EAAUvE,EAAakkB,KAItC,IAARjlB,IAAc7P,KAAK6zB,kBAIjBc,EAASxf,EAAS9U,MAAMwP,GAAO,GACrB7P,KAAKuzB,UAAU1iB,SAE3B8jB,KAGEC,EAAWD,EAAS/jB,GAGX8C,QAAQshB,uBAFJJ,GAAYF,KAOe,IAAtC10B,KAAK2T,OAAOshB,wBACZj1B,KAAKuzB,UAAU3iB,YAAc5Q,KAAKi0B,SAAWU,EAAS,GAAMA,GAEhE30B,KAAKyQ,QAAUzQ,KAAKyQ,OAAO3L,KAAK,oB,0CAK9BqQ,EAAU5P,EAAM2vB,GACtB,IAAK/f,IAAaA,EAASvQ,OACvB,OAAO,KAEX,GAAwB,IAApBuQ,EAASvQ,QAAgBuQ,EAAS9T,IAAI,GAAK8T,EAAS9U,MAAM,GAAK,KAC/D,OAAO,KAIX,IAFA,IAAM80B,EAAen1B,KAAKo1B,aAAajgB,GACnCtF,EAAM,KACDhS,EAAI,EAAGA,EAAIs3B,EAAavwB,OAAQ/G,IAErC,GADWs3B,EAAat3B,GACfwC,MAAQkF,IAAe,IAAN1H,GAAWs3B,EAAat3B,EAAI,GAAGwD,IAAMkE,GAAQ2vB,GAAY,CAC/ErlB,EAAMhS,EACN,MAGR,OAAOgS,I,gDAGEwlB,GACT,IAAKA,EACD,MAAO,GAGX,IADA,IAAMjF,EAAM,GACHvyB,EAAI,EAAGA,EAAIw3B,EAAEzwB,OAAQ/G,IAC1BuyB,EAAIlvB,KAAK,CACLb,MAAOg1B,EAAEh1B,MAAMxC,GACfwD,IAAKg0B,EAAEh0B,IAAIxD,KAGnB,OAAOuyB,I,wCAIPpwB,KAAKuzB,UAAUpd,oBAAoB,UAAWnW,KAAK8zB,YACnD9zB,KAAKuzB,UAAUpd,oBAAoB,OAAQnW,KAAK+zB,YAChD/zB,KAAKwzB,MAAM1b,QACX9X,KAAKwzB,MAAQ,S,sBA1IA9f,GA8IZshB,sBAAwB,K,6YCpJ3BvB,E,WACF,0B,4GAAc,qBACVzzB,KAAKs1B,OAAS,KACdt1B,KAAKu1B,KAAO,K,4DAGTA,EAAMC,GACTx1B,KAAKs1B,OAAS,EACdt1B,KAAKy1B,eAAeF,EAAMC,K,oDAGfD,EAAMC,GAAI,WAChBx1B,KAAKs1B,SACQ,OAAdt1B,KAAKu1B,OACLv1B,KAAKu1B,KAAOA,GAGZv1B,KAAKu1B,OAASA,IAGdv1B,KAAKs1B,QAAQlC,aAAapzB,KAAKs1B,QACnCt1B,KAAKs1B,OAAS,KACdt1B,KAAKs1B,OAAS9d,WAAW,WACrB+d,IACA,EAAKE,eAAeF,EAAMC,IAC3BA,O,oCAIHpC,aAAapzB,KAAKs1B,QAClBt1B,KAAKs1B,OAAS,S,2BAIP7B,E","file":"index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 14);\n","import Stream from './stream'\nimport Errors from '../error'\nclass Box {\n constructor () {\n this.headSize = 8\n this.size = 0\n this.type = ''\n this.subBox = []\n this.start = -1\n }\n readHeader (stream) {\n this.start = stream.position\n this.size = stream.readUint32()\n this.type = String.fromCharCode(stream.readUint8(), stream.readUint8(), stream.readUint8(), stream.readUint8())\n if (this.size === 1) {\n this.size = stream.readUint64()\n } else if (this.size === 0) {\n if (this.type !== 'mdat') {\n throw new Errors('parse', '', {line: 19, handle: '[Box] readHeader', msg: 'parse mp4 mdat box failed'})\n }\n }\n if (this.type === 'uuid') {\n let uuid = []\n for (let i = 0; i < 16; i++) {\n uuid.push(stream.readUint8())\n }\n }\n if (this.type === 'pssh') {\n this.version = stream.readUint8();\n this.flags = stream.readUint8();\n }\n }\n readBody (stream) {\n let end = this.size - stream.position + this.start\n let type = this.type\n this.data = stream.buffer.slice(stream.position, stream.position + end)\n stream.position += this.data.byteLength\n let parser\n if (Box.containerBox.find(item => item === type)) {\n parser = Box.containerParser\n } else {\n parser = Box[type]\n }\n if (parser && parser instanceof Function) {\n parser.call(this)\n }\n }\n read (stream) {\n this.readHeader(stream)\n this.readBody(stream)\n }\n\n static containerParser () {\n let stream = new Stream(this.data)\n let size = stream.buffer.byteLength\n let self = this\n while (stream.position < size) {\n let box = new Box()\n box.readHeader(stream)\n self.subBox.push(box)\n box.readBody(stream)\n }\n delete self.data\n stream = null\n }\n}\n\nBox.containerBox = ['moov', 'trak', 'edts', 'mdia', 'minf', 'dinf', 'stbl', 'mvex', 'moof', 'traf', 'mfra', 'sinf', 'schi']\n\nexport default Box\n","import Errors from '../error'\nclass Stream {\n constructor (buffer) {\n if (buffer instanceof ArrayBuffer) {\n this.buffer = buffer\n this.dataview = new DataView(buffer)\n this.dataview.position = 0\n } else {\n throw new Errors('parse', '', {line: 9, handle: '[Stream] constructor', msg: 'data is valid'})\n }\n }\n\n set position (value) {\n this.dataview.position = value\n }\n\n get position () {\n return this.dataview.position\n }\n\n skip (count) {\n let loop = Math.floor(count / 4)\n let last = count % 4\n for (let i = 0; i < loop; i++) {\n Stream.readByte(this.dataview, 4)\n }\n if (last > 0) {\n Stream.readByte(this.dataview, last)\n }\n }\n\n /**\n * [readByte 从DataView中读取数据]\n * @param {DataView} buffer [DataView实例]\n * @param {Number} size [读取字节数]\n * @return {Number} [整数]\n */\n static readByte (buffer, size, sign) {\n let res\n switch (size) {\n case 1:\n if (sign) {\n res = buffer.getInt8(buffer.position)\n } else {\n res = buffer.getUint8(buffer.position)\n }\n break\n case 2:\n if (sign) {\n res = buffer.getInt16(buffer.position)\n } else {\n res = buffer.getUint16(buffer.position)\n }\n break\n case 3:\n if (sign) {\n throw 'not supported for readByte 3'\n } else {\n res = buffer.getUint8(buffer.position) << 16\n res |= buffer.getUint8(buffer.position + 1) << 8\n res |= buffer.getUint8(buffer.position + 2)\n }\n break\n case 4:\n if (sign) {\n res = buffer.getInt32(buffer.position)\n } else {\n res = buffer.getUint32(buffer.position)\n }\n break\n case 8:\n if (sign) {\n throw new Errors('parse', '', {line: 73, handle: '[Stream] readByte', msg: 'not supported for readBody 8'})\n } else {\n res = buffer.getUint32(buffer.position) << 32\n res |= buffer.getUint32(buffer.position + 4)\n }\n break\n default:\n res = ''\n }\n buffer.position += size\n return res\n }\n\n readUint8 () {\n return Stream.readByte(this.dataview, 1)\n }\n\n readUint16 () {\n return Stream.readByte(this.dataview, 2)\n }\n \n readUint24 () {\n return Stream.readByte(this.dataview, 3)\n }\n\n readUint32 () {\n return Stream.readByte(this.dataview, 4)\n }\n\n readUint64 () {\n return Stream.readByte(this.dataview, 8)\n }\n\n readInt8 () {\n return Stream.readByte(this.dataview, 1, true)\n }\n readInt16 () {\n return Stream.readByte(this.dataview, 2, true)\n }\n readInt32 () {\n return Stream.readByte(this.dataview, 4, true)\n }\n}\n\nexport default Stream\n","import Player from 'xgplayer'\nimport { version } from '../version.json'\n\nclass _Errors extends Player.Errors {\n constructor (type, vid, errd = {}, url = '') {\n errd.version = version\n super(type, vid, errd)\n this.url = url\n }\n}\n\nexport default _Errors\n","(function() { module.exports = window[\"Player\"]; }());","'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\nvar _undefined = require(\"../function/noop\")(); // Support ES3 engines\n\nmodule.exports = function (val) { return val !== _undefined && val !== null; };\n","class UTC {\n constructor () {\n let time = new Date()\n time.setFullYear(1904)\n time.setMonth(0)\n time.setDate(1)\n time.setHours(0)\n time.setMinutes(0)\n time.setSeconds(0)\n this.time = time\n }\n setTime (value) {\n this.time.setTime(this.time.getTime() + value * 1)\n return this.time.toLocaleString()\n }\n}\n\nexport default UTC\n","/* eslint-disable camelcase */\n/* eslint-disable one-var */\nimport Golomb from './golomb'\n\nclass SPSParser {\n static _ebsp2rbsp (uint8array) {\n let src = uint8array\n let srcLength = src.byteLength\n let dst = new Uint8Array(srcLength)\n let dstIdx = 0\n\n for (let i = 0; i < srcLength; i++) {\n if (i >= 2) {\n if (src[i] === 0x03 && src[i - 1] === 0x00 && src[i - 2] === 0x00) {\n continue\n }\n }\n dst[dstIdx] = src[i]\n dstIdx++\n }\n\n return new Uint8Array(dst.buffer, 0, dstIdx)\n }\n\n static parseSPS (uint8array) {\n let rbsp = SPSParser._ebsp2rbsp(uint8array)\n let gb = new Golomb(rbsp)\n\n gb.readByte()\n let profileIdc = gb.readByte()\n gb.readByte()\n let levelIdc = gb.readByte()\n gb.readUEG()\n\n let profile_string = SPSParser.getProfileString(profileIdc)\n let level_string = SPSParser.getLevelString(levelIdc)\n let chroma_format_idc = 1\n let chroma_format = 420\n let chroma_format_table = [0, 420, 422, 444]\n let bit_depth = 8\n\n if (profileIdc === 100 || profileIdc === 110 || profileIdc === 122 ||\n profileIdc === 244 || profileIdc === 44 || profileIdc === 83 ||\n profileIdc === 86 || profileIdc === 118 || profileIdc === 128 ||\n profileIdc === 138 || profileIdc === 144) {\n chroma_format_idc = gb.readUEG()\n if (chroma_format_idc === 3) {\n gb.readBits(1)\n }\n if (chroma_format_idc <= 3) {\n chroma_format = chroma_format_table[chroma_format_idc]\n }\n\n bit_depth = gb.readUEG() + 8\n gb.readUEG()\n gb.readBits(1)\n if (gb.readBool()) {\n let scaling_list_count = (chroma_format_idc !== 3) ? 8 : 12\n for (let i = 0; i < scaling_list_count; i++) {\n if (gb.readBool()) {\n if (i < 6) {\n SPSParser._skipScalingList(gb, 16)\n } else {\n SPSParser._skipScalingList(gb, 64)\n }\n }\n }\n }\n }\n gb.readUEG()\n let pic_order_cnt_type = gb.readUEG()\n if (pic_order_cnt_type === 0) {\n gb.readUEG()\n } else if (pic_order_cnt_type === 1) {\n gb.readBits(1)\n gb.readSEG()\n gb.readSEG()\n let num_ref_frames_in_pic_order_cnt_cycle = gb.readUEG()\n for (let i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++) {\n gb.readSEG()\n }\n }\n gb.readUEG()\n gb.readBits(1)\n\n let pic_width_in_mbs_minus1 = gb.readUEG()\n let pic_height_in_map_units_minus1 = gb.readUEG()\n\n let frame_mbs_only_flag = gb.readBits(1)\n if (frame_mbs_only_flag === 0) {\n gb.readBits(1)\n }\n gb.readBits(1)\n\n let frame_crop_left_offset = 0\n let frame_crop_right_offset = 0\n let frame_crop_top_offset = 0\n let frame_crop_bottom_offset = 0\n\n let frame_cropping_flag = gb.readBool()\n if (frame_cropping_flag) {\n frame_crop_left_offset = gb.readUEG()\n frame_crop_right_offset = gb.readUEG()\n frame_crop_top_offset = gb.readUEG()\n frame_crop_bottom_offset = gb.readUEG()\n }\n\n let par_width = 1, par_height = 1\n let fps = 0, fps_fixed = true, fps_num = 0, fps_den = 0\n\n let vui_parameters_present_flag = gb.readBool()\n if (vui_parameters_present_flag) {\n if (gb.readBool()) { // aspect_ratio_info_present_flag\n let aspect_ratio_idc = gb.readByte()\n let par_w_table = [1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2]\n let par_h_table = [1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1]\n\n if (aspect_ratio_idc > 0 && aspect_ratio_idc < 16) {\n par_width = par_w_table[aspect_ratio_idc - 1]\n par_height = par_h_table[aspect_ratio_idc - 1]\n } else if (aspect_ratio_idc === 255) {\n par_width = gb.readByte() << 8 | gb.readByte()\n par_height = gb.readByte() << 8 | gb.readByte()\n }\n }\n\n if (gb.readBool()) {\n gb.readBool()\n }\n if (gb.readBool()) {\n gb.readBits(4)\n if (gb.readBool()) {\n gb.readBits(24)\n }\n }\n if (gb.readBool()) {\n gb.readUEG()\n gb.readUEG()\n }\n if (gb.readBool()) {\n let num_units_in_tick = gb.readBits(32)\n let time_scale = gb.readBits(32)\n fps_fixed = gb.readBool()\n\n fps_num = time_scale\n fps_den = num_units_in_tick * 2\n fps = fps_num / fps_den\n }\n }\n\n let parScale = 1\n if (par_width !== 1 || par_height !== 1) {\n parScale = par_width / par_height\n }\n\n let crop_unit_x = 0, crop_unit_y = 0\n if (chroma_format_idc === 0) {\n crop_unit_x = 1\n crop_unit_y = 2 - frame_mbs_only_flag\n } else {\n let sub_wc = (chroma_format_idc === 3) ? 1 : 2\n let sub_hc = (chroma_format_idc === 1) ? 2 : 1\n crop_unit_x = sub_wc\n crop_unit_y = sub_hc * (2 - frame_mbs_only_flag)\n }\n\n let codec_width = (pic_width_in_mbs_minus1 + 1) * 16\n let codec_height = (2 - frame_mbs_only_flag) * ((pic_height_in_map_units_minus1 + 1) * 16)\n\n codec_width -= (frame_crop_left_offset + frame_crop_right_offset) * crop_unit_x\n codec_height -= (frame_crop_top_offset + frame_crop_bottom_offset) * crop_unit_y\n\n let present_width = Math.ceil(codec_width * parScale)\n\n gb.destroy()\n gb = null\n\n return {\n profile_string: profile_string,\n level_string: level_string,\n bit_depth: bit_depth,\n chroma_format: chroma_format,\n chroma_format_string: SPSParser.getChromaFormatString(chroma_format),\n\n frame_rate: {\n fixed: fps_fixed,\n fps: fps,\n fps_den: fps_den,\n fps_num: fps_num\n },\n\n par_ratio: {\n width: par_width,\n height: par_height\n },\n\n codec_size: {\n width: codec_width,\n height: codec_height\n },\n\n present_size: {\n width: present_width,\n height: codec_height\n }\n }\n }\n\n static _skipScalingList (gb, count) {\n let last_scale = 8, next_scale = 8\n let delta_scale = 0\n for (let i = 0; i < count; i++) {\n if (next_scale !== 0) {\n delta_scale = gb.readSEG()\n next_scale = (last_scale + delta_scale + 256) % 256\n }\n last_scale = (next_scale === 0) ? last_scale : next_scale\n }\n }\n\n static getProfileString (profileIdc) {\n switch (profileIdc) {\n case 66:\n return 'Baseline'\n case 77:\n return 'Main'\n case 88:\n return 'Extended'\n case 100:\n return 'High'\n case 110:\n return 'High10'\n case 122:\n return 'High422'\n case 244:\n return 'High444'\n default:\n return 'Unknown'\n }\n }\n\n static getLevelString (levelIdc) {\n return (levelIdc / 10).toFixed(1)\n }\n\n static getChromaFormatString (chroma) {\n switch (chroma) {\n case 420:\n return '4:2:0'\n case 422:\n return '4:2:2'\n case 444:\n return '4:4:4'\n default:\n return 'Unknown'\n }\n }\n\n static toVideoMeta (spsConfig) {\n let meta = {}\n if (spsConfig && spsConfig.codec_size) {\n meta.codecWidth = spsConfig.codec_size.width\n meta.codecHeight = spsConfig.codec_size.height\n meta.presentWidth = spsConfig.present_size.width\n meta.presentHeight = spsConfig.present_size.height\n }\n\n meta.profile = spsConfig.profile_string\n meta.level = spsConfig.level_string\n meta.bitDepth = spsConfig.bit_depth\n meta.chromaFormat = spsConfig.chroma_format\n\n meta.parRatio = {\n width: spsConfig.par_ratio.width,\n height: spsConfig.par_ratio.height\n }\n\n meta.frameRate = spsConfig.frame_rate\n\n let fpsDen = meta.frameRate.fps_den\n let fpsNum = meta.frameRate.fps_num\n meta.refSampleDuration = Math.floor(meta.timescale * (fpsDen / fpsNum))\n }\n}\n\nexport default SPSParser\n","export const CUSTOM_EVENTS = {\n \"MEDIA_EXPIRED\":'MEDIA_EXPIRED',\n \"INIT_FAIL\":\"INIT_FAIL\",\n \"PARSE_ERROR\":\"PARSE_ERROR\",\n \"BUFFERED_RESET\": \"BUFFERED_RESET\"\n}\n\nexport const TASK_ERROR = 'TASK_ERROR';\n\nexport const TASK_ERROR_TYPES = {\n ERROR:\"ERROR\",\n CODE_ERROR:\"CODE_ERROR\",\n CANCEL:\"CANCEL\",\n}\n","\"use strict\";\n\n// ES3 safe\nvar _undefined = void 0;\n\nmodule.exports = function (value) { return value !== _undefined && value !== null; };\n","'use strict';\n\nvar _concat = require('./concat');\n\nvar _concat2 = _interopRequireDefault(_concat);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = _concat2.default;","class Golomb {\n constructor (uint8array) {\n this.TAG = 'Golomb'\n this._buffer = uint8array\n this._bufferIndex = 0\n this._totalBytes = uint8array.byteLength\n this._totalBits = uint8array.byteLength * 8\n this._currentWord = 0\n this._currentWordBitsLeft = 0\n }\n\n destroy () {\n this._buffer = null\n }\n\n _fillCurrentWord () {\n let bufferBytesLeft = this._totalBytes - this._bufferIndex\n if (bufferBytesLeft <= 0) {\n // TODO 异常处理\n }\n\n let bytesRead = Math.min(4, bufferBytesLeft)\n let word = new Uint8Array(4)\n word.set(this._buffer.subarray(this._bufferIndex, this._bufferIndex + bytesRead))\n this._currentWord = new DataView(word.buffer).getUint32(0)\n\n this._bufferIndex += bytesRead\n this._currentWordBitsLeft = bytesRead * 8\n }\n\n readBits (size) {\n let bits = Math.min(this._currentWordBitsLeft, size);// :uint\n let valu = this._currentWord >>> (32 - bits);\n if (size > 32) {\n throw new Error('Cannot read more than 32 bits at a time');\n }\n this._currentWordBitsLeft -= bits;\n if (this._currentWordBitsLeft > 0) {\n this._currentWord <<= bits;\n } else if (this._totalBytes - this._bufferIndex > 0) {\n this._fillCurrentWord();\n }\n\n bits = size - bits;\n if (bits > 0 && this._currentWordBitsLeft) {\n return valu << bits | this.readBits(bits);\n } else {\n return valu;\n }\n }\n\n readBool () {\n return this.readBits(1) === 1\n }\n\n readByte () {\n return this.readBits(8)\n }\n\n _skipLeadingZero () {\n let zeroCount\n for (zeroCount = 0; zeroCount < this._currentWordBitsLeft; zeroCount++) {\n if ((this._currentWord & (0x80000000 >>> zeroCount)) !== 0) {\n this._currentWord <<= zeroCount\n this._currentWordBitsLeft -= zeroCount\n return zeroCount\n }\n }\n this._fillCurrentWord()\n return zeroCount + this._skipLeadingZero()\n }\n\n readUEG () { // unsigned exponential golomb\n let leadingZeros = this._skipLeadingZero()\n return this.readBits(leadingZeros + 1) - 1\n }\n\n readSEG () { // signed exponential golomb\n let value = this.readUEG()\n if (value & 0x01) {\n return (value + 1) >>> 1\n } else {\n return -1 * (value >>> 1)\n }\n }\n}\n\nexport default Golomb\n","import Concat from 'concat-typed-array'\n\nclass Buffer {\n constructor () {\n this.buffer = new Uint8Array(0)\n }\n write (...buffer) {\n let self = this\n buffer.forEach(item => {\n if (item) {\n self.buffer = Concat(Uint8Array, self.buffer, item)\n } else {\n window.console.error(item)\n }\n })\n }\n static writeUint16 (value) {\n return new Uint8Array([\n (value >> 8) & 0xff,\n value & 0xff\n ])\n }\n static writeUint32 (value) {\n return new Uint8Array([\n value >> 24,\n (value >> 16) & 0xff,\n (value >> 8) & 0xff,\n value & 0xff\n ])\n }\n}\n\nexport default Buffer\n","import EventEmitter from 'event-emitter'\nimport Errors from '../error'\nimport {CUSTOM_EVENTS, TASK_ERROR, TASK_ERROR_TYPES} from '../constants'\nimport getResponseHeaders from '../util/getHeaders';\n\nclass Task {\n constructor (url, range, xhrSetup, callback, ext = {}) {\n EventEmitter(this)\n window.Task = Task\n this.url = url\n this.range = range\n ext.start = range[0]\n ext.end = range[1]\n this.uniqueTag = `${this.url}&range=${range[0]}-${range[1]}`\n this.playerId = ext.playerId;\n //处理重复分片请求,只拦截同一播放器的相同请求\n if (Task.queue.some(item => item.url === url && JSON.stringify(item.range) === JSON.stringify(range) && item.playerId === ext.playerId)) {\n // console.log('task repeat playerid', ext.playerId)\n return;\n }\n this.xhrSetup = xhrSetup\n this.id = this.playerId + range.join('-')\n this.running = false\n this.canceled = false\n this.initialize(url, range, callback);\n }\n initialize(url, range, callback) {\n let xhr = new window.XMLHttpRequest()\n xhr.target = this\n xhr.responseType = 'arraybuffer'\n xhr.withCredentials = this.withCredentials || false\n xhr.open('get', url)\n if(typeof this.xhrSetup === 'function') {\n this.xhrSetup(xhr, url)\n }\n xhr.setRequestHeader('Range', `bytes=${range[0]}-${range[1]}`)\n let self = this;\n xhr.onreadystatechange = function (e) {\n // HEADERS_RECEIVED\n if (xhr.readyState === 2) {\n self.headers = getResponseHeaders(xhr);\n // self.emit('getHeaders', self.headers);\n self.status = xhr.status;\n // self.startDownloadTime = nowTime();\n }\n // OPENED\n if (xhr.readyState === 1) {\n // self.lastTime = nowTime();\n }\n };\n xhr.onload = function () {\n if (xhr.status === 200 || xhr.status === 206) {\n if (callback && callback instanceof Function) {\n callback(xhr.response)\n }\n } else{\n if(xhr.status === 403){\n self.emit(CUSTOM_EVENTS.MEDIA_EXPIRED);\n }else{\n self._emitTaskError(TASK_ERROR_TYPES.CODE_ERROR);\n }\n }\n xhr.target.remove()\n }\n xhr.onerror = function (e) {\n xhr.target.emit('error', new Errors('network', '', {line: 25, handle: '[Task] constructor', msg: e.message, url}))\n xhr.target.remove()\n }\n xhr.onabort = function () {\n xhr.target.remove()\n }\n if (!self.canceled) {\n self.xhr = xhr;\n Task.queue.push(self);\n }\n self.update()\n }\n cancel () {\n this.xhr.abort()\n this._emitTaskError(TASK_ERROR_TYPES.CANCEL);\n this.canceled = true;\n }\n\n _emitTaskError(code){\n this.emit(TASK_ERROR, {code , url: this.uniqueTag, readyState: this.xhr.readyState, status: this.xhr.status})\n }\n\n remove () {\n Task.queue.filter((item, idx) => {\n if (item.url === this.url && item.id === this.id) {\n Task.queue.splice(idx, 1)\n return true\n } else {\n return false\n }\n })\n this.update()\n }\n\n update () {\n let Queue = Task.queue\n let sended = Queue.filter((item) => item.running)\n let wait = Queue.filter(item => !item.running)\n let max = Task.limit - sended.length\n wait.forEach((item, idx) => {\n if (idx < max) {\n item.run()\n }\n })\n }\n\n run () {\n if (this.xhr.readyState === 1) {\n this.running = true\n this.xhr.send()\n } else {\n this.remove()\n }\n }\n\n /***\n * 同时存在多播放器实例,存在问题\n */\n static clear (playerId) {\n let queue = Task.queue;\n for(let i = queue.length - 1; i > -1; i--){\n let item = queue[i];\n if(item.running && item.playerId === playerId){\n item.cancel();\n }\n queue.splice(i, 1)\n }\n }\n}\n\nTask.queue = []\nTask.limit = 2\n\nexport default Task\n","import Player from 'xgplayer'\nimport MP4 from './mp4'\nimport MSE from './media/mse'\nimport Task from './media/task'\nimport { isSupported, isSupportedWithXgmse, isMediaSourceSupported } from './util/isSupport';\nimport ProxyPromise from './util/proxyPromise'\nimport Timer from './util/timer'\nimport { CUSTOM_EVENTS } from './constants'\nimport GapJump from './gap_jump';\n\nconst DESTROYED = 'DESTROYED';\n\nconst sniffer = Player.sniffer;\n\nlet isEnded = (player, mp4) => {\n if (mp4.meta.endTime - player.currentTime < 0.5) {\n // let range = player.getBufferedRange(player.buffered2)\n let offsetTime = player.duration - player.currentTime\n if (offsetTime < 0.5) {\n player.mse.endOfStream()\n player._stopProgress()\n }\n }\n}\n\nclass Mp4Player extends Player {\n constructor (options) {\n let hasStartProgress = true;\n if(options.onlyInit || options.videoInit){\n options.onlyInit = true;\n options.autoplay = false;\n options.videoInit = false;\n hasStartProgress = false;\n }\n super(options);\n\n this._pendingPromises = [];\n this._allInitPromise = new ProxyPromise();\n this._maxBufferLength = options.maxBufferLength || 5\n this._playerId = Mp4Player.uniqueId ++;\n this._onBufferedResetFunc = this._onBufferedReset.bind(this);\n this._onSeekingFunc = this._onSeeking.bind(this);\n this._onMp4InitFunc = this._onMp4Init.bind(this);\n this._onWaitingFunc = this._onWaiting.bind(this);\n this._onEndedFunc = this._onEnded.bind(this);\n this._onDestroyFunc = this._onDestroy.bind(this);\n this._replay = this._onReplay.bind(this);\n this._onOnlineHandlerFunc = this._onOnlineHandler.bind(this);\n this._onOfflineHandlerFunc = this._onOfflineHandler.bind(this);\n this._tickInSeconds = options.tickInSeconds || 0.2;\n this._hasStartProgress = hasStartProgress;\n this._hasStartProgressBack = hasStartProgress;\n this.video.addEventListener(CUSTOM_EVENTS.BUFFERED_RESET, this._onBufferedResetFunc);\n this._bindNetworkStateChange();\n this._initMp4Kernal();\n\n this.once('ready', () => {\n this.gapJumpInst = new GapJump(this, this.config);\n Player.util.on(this, 'addVideoBufferEnd', () => {\n this.gapJumpInst.onSegmentAppend();\n });\n })\n }\n\n _initMp4Kernal(){\n let player = this;\n let rule = player.config.pluginRule || function () { return true }\n if (MSE.isSupported('video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"')) {\n if (!rule.call(player)) {\n return false\n }\n Object.defineProperty(player, 'src', {\n get () {\n return player.currentSrc\n },\n set (url) {\n player.mse.endOfStream()\n player._onDestroy();\n player.config.autoplay = player.autoplay = true\n player.config.url = url\n\n player._init(url).then((result) => {\n let mp4 = result[0]; \n let mse = result[1]\n player.proxyOnce('canplay', () => {\n player.play()\n player.proxyOn('waiting', player._onWaitingFunc)\n })\n player._startProgress();\n player._onSuperStart(mse.url)\n player.mp4 = mp4\n player.mse = mse\n // player.currentTime = 0\n }, err => {\n player._errorHandle(err)\n })\n },\n configurable: true\n })\n \n player.proxyOn('ended', player._onEndedFunc)\n \n player.proxyOnce('destroy', player._onDestroyFunc)\n \n if (player.config.videoInit || player.config.onlyInit){\n player.start(player.config.url)\n }\n }\n }\n\n start(url) {\n let player = this;\n url = url ? url : player.config.url;\n if (player.config.autoplay && Player.sniffer.browser == 'chrome' && !Player.util.hasClass(player.root, 'xgplayer-is-enter')) {\n Player.util.addClass(player.root, 'xgplayer-is-enter')\n }\n player.proxyOnce('error', () => {\n if (Player.util.hasClass(player.root, 'xgplayer-is-enter')) {\n Player.util.removeClass(player.root, 'xgplayer-is-enter')\n }\n })\n player.proxyOn('timeupdate', function () {\n if (Player.util.hasClass(player.root, 'xgplayer-isloading')) {\n Player.util.removeClass(player.root, 'xgplayer-isloading')\n }\n })\n player.proxyOnce('canplay', () => {\n if (Player.util.hasClass(player.root, 'xgplayer-is-enter')) {\n Player.util.removeClass(player.root, 'xgplayer-is-enter')\n }\n // safari decoder time offset\n if (sniffer.browser === 'safari' && player.buffered && player.config.autoplay) {\n let start = player.buffered.start(0)\n player.currentTime = start + 0.1\n }\n })\n\n let initPromise = player._init(url)\n initPromise.id = 'init'\n player._addPendingPromise(initPromise)\n initPromise.then(result => {\n \n player._allInitPromise.resolve();\n player._hasInited = true;\n player._removePendingPromise(initPromise);\n let mp4 = result[0]; let mse = result[1]\n if(player.config.autoplay) {\n player.proxyOnce('canplay', () => {\n player.play()\n })\n }\n player._onSuperStart(mse.url)\n player.mp4 = mp4\n player.mse = mse\n Player.util.on(mp4, 'error', err => {\n player._errorHandle(err)\n })\n player.proxyOn('seeking', player._onSeekingFunc)\n player.proxyOnce('playing', player._onMp4InitFunc)\n player.proxyOn('waiting', player._onWaitingFunc)\n // if(!player.config.onlyInit || player._hasStartProgressBack){\n player._startProgress();\n // }\n }, err => {\n if(err !== DESTROYED){\n player._onSuperStart(url)\n player._errorHandle(err)\n }\n })\n }\n\n switchURL(url){\n let player = this;\n let mp5 = new MP4(url, player.config.xhrSetup, player, player.config.preloadSize, {\n playerId: player._playerId\n })\n let mp4 = player.mp4\n Player.util.on(mp5, 'moovReady', () => {\n let timeRange = mp4.timeRage; \n let curTime = player.currentTime\n timeRange = mp4.timeRage\n let start = timeRange.find(item => item[0] - curTime > 2)[0]\n let end = player.getBufferedRange(player.buffered2)[1]\n if (end - start > 0 && sniffer.browser !== 'safari') {\n player.mse.removeBuffer(start, end)\n }\n if (!Player.util.hasClass(player.root, 'xgplayer-ended')) {\n player.emit('urlchange')\n }\n player.mp4 = mp5\n player.mse.appendBuffer(mp5.packMeta(mp4.meta))\n })\n Player.util.on(mp5, 'error', err => {\n player._errorHandle(err)\n })\n }\n\n _onBufferedReset(){\n if(this.mp4 && this.mp4.timeRage) {\n this.mp4.timeRage.forEach(item => {\n // if(item[0] <= time) item.downloaded = false;\n item.downloaded = false;\n });\n }\n };\n\n _onOnlineHandler(){\n if(!this._hasInited){\n this.src = this.config.url;\n }else{\n if(this._hasStartProgressBack){\n this._startProgress();\n }\n this._hasStartProgressBack = false;\n }\n }\n\n _onOfflineHandler(){\n if(this._hasStartProgress){\n this._stopProgress();\n this._hasStartProgressBack = true;\n }\n }\n\n _bindNetworkStateChange(){\n window.addEventListener('online', this._onOnlineHandlerFunc)\n window.addEventListener('offline', this._onOfflineHandlerFunc)\n }\n\n _unbindNetworkStateChange(){\n window.removeEventListener('online', this._onOnlineHandlerFunc)\n window.removeEventListener('offline', this._onOfflineHandlerFunc)\n }\n\n _onSuperStart(url){\n super.start(url)\n }\n\n _init(url){\n let player = this;\n let promise = new ProxyPromise();\n\n player._initMp4(url, promise);\n return promise;\n }\n\n _initMse(mp4, meta, promise){\n let player = this;\n const isHvc = meta.videoCodec.indexOf('hvc1') > -1 || (meta.encv && meta.encv.data_format.indexOf('hvc1') > -1)\n\n let hasVideo = !!meta.videoCodec\n let hasAudio = !!meta.audioCodec\n let codec\n if(hasVideo && hasAudio){\n codec = isHvc ? 'video/mp4; codecs=\"hev1.1.6.L93.B0, mp4a.40.5\"':'video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"'\n }else if(hasVideo){\n codec = isHvc ? 'video/mp4; codecs=\"hev1.1.6.L93.B0\"':'video/mp4; codecs=\"avc1.64001E\"'\n }else{\n codec = 'video/mp4; codecs=\"mp4a.40.5\"'\n }\n \n let mse = new MSE(codec, player.config.mediaType)\n Player.util.on(mse, 'sourceopen', function () {\n const initSeg = mp4.packMeta(mp4.meta);\n mse.appendBuffer(initSeg)\n Player.util.once(mse, 'updateend', function () {\n player._loadData();\n })\n })\n Player.util.on(mse, 'error', function (e) {\n promise.reject(e)\n })\n promise.resolve([mp4, mse])\n }\n\n _initMp4(url, promise){\n let player = this;\n let mp4 = new MP4(url, player.config.xhrSetup, player, player.config.preloadSize, {\n playerId: player._playerId\n })\n\n Player.util.once(mp4, 'metaReady', meta => {\n this._initMse(mp4, meta, promise)\n })\n \n Player.util.on(mp4, 'error', (e) => {\n promise.reject(e)\n })\n }\n\n _loadData(i = 0, time = null){\n if(!navigator.onLine){\n return;\n }\n let player = this;\n if(!player.mp4){\n return;\n }\n time = time ? time : player.currentTime;\n player.mp4.seek(time + i * 0.1).then(buffer => {\n if (buffer && player.mse) {\n let mse = player.mse\n mse.updating = true\n Player.util.once(mse, 'updateend', () => {\n // if (player.currentTime === 0 && player.video.buffered.length && player.video.buffered.end(player.video.buffered.length - 1) > 0) {\n // player.emit('canplay')\n // }\n mse.updating = false\n player.emit('addVideoBufferEnd');\n })\n mse.appendBuffer(buffer)\n }\n }, () => {\n if (i < 10) {\n setTimeout(function () {\n player._loadData(i + 1)\n }, 2000)\n }\n })\n }\n\n _onTimeUpdate(){\n let player = this;\n let mse = player.mse;\n let mp4 = player.mp4\n if (mse && !mse.updating && mp4 && mp4.canDownload) {\n let timeRage = mp4.timeRage\n let range = player.getBufferedRange(player.buffered2); \n let cacheMaxTime = player.currentTime + player._maxBufferLength\n if (range[1] - cacheMaxTime > 0) {\n return\n }\n timeRage.every((item, idx) => {\n if(item.downloaded) {\n return true;\n } else if (range[1] === 0) { //当前播放时刻无缓存\n if(item[0] <= player.currentTime && (player.currentTime < item[1] || player.duration - item[1] < 0.5)) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n } else { //当前播放时刻有缓存\n if (item[0] >= range[1] || item[1] - 1 >= range[1] || (range[1] >= item[0] && range[1] <= item[0] + 1)) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n }\n })\n isEnded(player, mp4)// hack for older webkit\n }\n }\n\n\n _onWaiting(){\n let player = this;\n let curTime = player.currentTime\n player._onInnerWait(curTime)\n if(curTime + 2 < player.duration) player._onInnerWait(curTime + 2)\n if(curTime - 2 > 0) player._onInnerWait(curTime - 2)\n }\n\n _onEnded(){\n this.off('waiting', this._onWaitingFunc)\n this._stopProgress();\n }\n\n _onReplay() {\n let player = this;\n player._onDestroy();\n player._init(player.config.url).then((result) => {\n let mp4 = result[0]; \n let mse = result[1]\n player._startProgress();\n player._onSuperStart(mse.url)\n player.mp4 = mp4\n player.mse = mse\n // player.currentTime = 0\n player.proxyOnce('canplay', () => {\n player.play()\n player.proxyOn('waiting', player._onWaitingFunc)\n })\n }, err => {\n player._errorHandle(err)\n })\n }\n\n _onDestroy(){\n let player = this;\n player._hasInited = false;\n player._unbindNetworkStateChange();\n Task.clear(player._playerId)\n if (player.mp4) {\n player.mp4.destroy();\n player.mp4 = null;\n }\n if(player.mse){\n player.mse.destroy();\n }\n player.unloadVideo();\n player._stopProgress();\n player.cancelPendingPromises();\n }\n\n _errorHandle(err){\n if(err.errt === 'network' || err.errorType === 'network'){\n return;\n }\n if(err.errt === 'parse' || err.errorType === 'parse'){\n\n return;\n }\n let player = this;\n err.url = player.src\n if (err.errd && typeof err.errd === 'object') {\n if (player.mp4) {\n err.errd.url = player.mp4.url\n err.url = player.mp4.url\n player.mp4.canDownload = false\n }\n }\n player.emit('DATA_REPORT', err)\n Task.clear(player._playerId)\n if (player.mp4 && player.mp4.bufferCache) {\n player.mp4.bufferCache.clear()\n }\n if (player.currentTime) {\n player._currentTime = player.currentTime\n }\n if (player._start) {\n player.start = player._start\n player._start = null\n }\n player.switchURL = null\n player._replay = null\n\n player.off('seeking', player._onSeekingFunc)\n player.off('playing', player._onMp4InitFunc)\n player.off('waiting', player._onWaitingFunc)\n player.off('ended', player._onEndedFunc)\n player.off('destroy', player._onDestroyFunc)\n\n iplayer.emit('error', err)\n player.src = player.config.url\n player.proxyOnce('canplay', () => {\n if (player._currentTime) {\n player.currentTime = player._currentTime\n }\n player.play()\n })\n \n }\n\n _onSeeking() {\n let curTime = this.currentTime\n this._onCheckLoad(curTime);\n isEnded(this, this.mp4)\n }\n\n _onInnerWait(curTime) {\n this._onCheckLoad(curTime);\n }\n\n _onCheckLoad(curTime){\n let player = this;\n let buffered = player.buffered2 || player.buffered; \n let hasBuffered = false; \n let timeRage = player.mp4.timeRage\n if (buffered.length) {\n for (let i = 0, len = buffered.length; i < len; i++) {\n if (curTime >= buffered.start(i) && curTime <= buffered.end(i)) {\n hasBuffered = true\n break\n }\n }\n if (!hasBuffered) {\n timeRage.every((item, idx) => {\n if (item[0] <= curTime && (item[1] > curTime || player.duration - item[1] < 0.5)) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n })\n }\n } else {\n timeRage.every((item, idx) => {\n if (item[0] <= curTime && item[1] > curTime) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n })\n }\n }\n\n _onMp4Init(){\n let player = this;\n if(player.config.mp4Init) {\n player.pause()\n }\n // if(player.config.onlyInit){\n // player._startProgress();\n // }\n }\n\n _stopProgress(){\n let player = this;\n this._hasStartProgress = false;\n if(player._requestTimer){\n player._requestTimer.stop();\n player._requestTimer = null;\n }\n }\n\n _startProgress(){\n let player = this;\n player._stopProgress();\n player._requestTimer = new Timer(()=>{\n if(player._requestTimer) {\n player._onTimeUpdate()\n }\n });\n player._requestTimer.tickEvery(player._tickInSeconds);//200ms\n this._hasStartProgress = true;\n }\n\n unloadVideo() {\n let player = this;\n try {\n if (player.video && player.video.src) {\n player.video.removeAttribute('src'); // empty source\n player.video.load();\n }\n } catch (error) {\n // console.log('unloadVideo error', error)\n }\n }\n\n _addPendingPromise(p){\n this._pendingPromises.push(p);\n }\n\n _removePendingPromise(p){\n let idx = this._pendingPromises.indexOf(p);\n if(idx > -1){\n this._pendingPromises.splice(idx, 1);\n }\n }\n\n onMediaExpired(){\n this._stopProgress();\n this.emit(CUSTOM_EVENTS.MEDIA_EXPIRED);\n }\n\n cancelPendingPromises(){\n if(this._pendingPromises.length > 0){\n this._pendingPromises.forEach(promise => {\n promise.reject(DESTROYED)\n })\n }\n this._pendingPromises = [];\n }\n\n enableAutoBuffer(start){\n if(start){\n if(!this._allInitPromise){\n return;\n }\n this._allInitPromise.then(()=>{\n this._startProgress();\n })\n }else{\n this._stopProgress();\n }\n }\n\n destroy(){\n if(this.mp4){\n this.mp4.destroy();\n }\n if(this.mse){\n this.mse.destroy();\n }\n if(this.video) {\n this.video.removeEventListener(CUSTOM_EVENTS.BUFFERED_RESET, this._onBufferedResetFunc);\n }\n super.destroy();\n }\n\n emitInitFail(reason){\n this.emit(CUSTOM_EVENTS.INIT_FAIL, reason);\n }\n\n emitParseError(){\n this.emit(CUSTOM_EVENTS.PARSE_ERROR);\n }\n\n /***\n * @return Promise\n */\n get ready(){\n return this._allInitPromise;\n }\n}\nMp4Player.uniqueId = 1;\nMp4Player.isSupported = isSupported;\nMp4Player.isSupportedWithXgmse = isSupportedWithXgmse;\nMp4Player.isMediaSourceSupported = isMediaSourceSupported;\nMp4Player.CUSTOM_EVENTS = CUSTOM_EVENTS;\n\nexport default Mp4Player;\n","import EventEmitter from 'event-emitter'\nimport Parser from './parse'\nimport Buffer from './fmp4/buffer'\nimport FMP4 from './fmp4/mp4'\nimport Task from './media/task'\nimport util from './util'\nimport Errors from './error'\nimport {CUSTOM_EVENTS, TASK_ERROR} from './constants'\nimport Player from 'xgplayer'\n\nclass MP4 {\n /**\n * [constructor 构造函数]\n * @param {String} url [视频地址]\n * @param {Number} [chunk_size=Math.pow(25, 4)] [请求的数据块大小,对于长视频设置的较大些可以避免二次请求]\n */\n constructor (url, xhrSetup, player, chunkSize = Math.pow(25, 4), ext = {}) {\n EventEmitter(this)\n this.url = url\n this.xhrSetup = xhrSetup\n this.CHUNK_SIZE = chunkSize\n this.player = player\n this.ext = ext\n this.timeRage = []\n this.canDownload = true\n this.init()\n Player.util.once(this, 'moovReady', this.moovParse.bind(this))\n }\n\n /**\n * [getData 根据字节区间下载二进制数据]\n * @param {Number} [start=0] [起始字节]\n * @param {Number} [end=start + this.CHUNK_SIZE] [截止字节]\n */\n getData (start = 0, end = start + this.CHUNK_SIZE - 1) {\n let self = this\n return new Promise((resolve, reject) => {\n let task = new Task(this.url, [\n start, end\n ], this.xhrSetup, (data)=>{\n if(self.hasDestroyed){\n return;\n }\n resolve(data)\n }, self.ext)\n // Player.util.once(task, 'error', err => {\n // self.emit('error', err)\n // })\n\n Player.util.once(task, CUSTOM_EVENTS.MEDIA_EXPIRED, ()=>{\n self.player && self.player.onMediaExpired();\n });\n\n Player.util.once(task, TASK_ERROR, params => {\n //非403状态或者非200,206状态逻辑\n reject({code: params.code, status: params.status})\n })\n })\n }\n\n /**\n * [moovParse 解析视频信息]\n * @return {[type]} [description]\n */\n moovParse () {\n let self = this\n let moov = this.moovBox\n let mvhd = util.findBox(moov, 'mvhd')\n let traks = util.findBox(moov, 'trak')\n let videoTrak,\n audioTrak\n let videoCodec,\n audioCodec\n let videoTimeScale,\n audioTimeScale\n let sps,\n pps,\n vps,\n profile,\n width,\n height\n let channelCount,\n sampleRate,\n decoderConfig\n let hvc1Data, hvcCData\n let pixelRatio = [1, 1]\n if (!Array.isArray(traks)) {\n traks = [traks]\n }\n traks.forEach(trak => {\n let hdlr = util.findBox(trak, 'hdlr')\n let mdhd = util.findBox(trak, 'mdhd')\n if (!hdlr || !mdhd) {\n self.emit('error', new Errors('parse', '', {line: 101, handle: '[MP4] moovParse', url: self.url}))\n return\n }\n let stsd = util.findBox(trak, 'stsd')\n let codecBox = stsd.subBox[0]\n if (hdlr.handleType === 'vide') {\n let avcC = util.findBox(trak, 'avcC')\n let hvcC\n if(!avcC) {\n hvcC = util.findBox(trak, 'hvcC')\n }\n \n let tkhd = util.findBox(trak, 'tkhd')\n videoTrak = trak\n videoTimeScale = mdhd.timescale\n if (avcC) {\n videoCodec = `${codecBox.type}.` + util.toHex(avcC.profile, avcC.profileCompatibility, avcC.AVCLevelIndication).join('')\n sps = avcC.sequence\n pixelRatio = [avcC.spsInfo.par_ratio.width, avcC.spsInfo.par_ratio.height]\n if (avcC.spsInfo.codec_size) {\n width = avcC.spsInfo.codec_size.width\n height = avcC.spsInfo.codec_size.height\n }\n pps = avcC.pps && avcC.pps.map((item) => Number(`0x${item}`))\n profile = avcC.profile\n } else if(hvcC) {\n hvcCData = hvcC.data\n let hvc1 = util.findBox(trak, 'hvc1')\n if(hvc1) {\n hvc1Data = hvc1.data\n width = hvc1.width\n height = hvc1.height\n }\n videoCodec = `${codecBox.type}.` + util.toHex(hvcC.profile, hvcC.profileCompatibility, hvcC.profileCompatibilityIndications).join('')\n vps = hvcC.vps && hvcC.vps.map((item) => Number(`0x${item}`))\n sps = hvcC.sequence\n // pixelRatio = [hvcC.spsInfo.par_ratio.width, hvcC.spsInfo.par_ratio.height]\n // if (hvcC.spsInfo.codec_size) {\n // width = hvcC.spsInfo.codec_size.width\n // height = hvcC.spsInfo.codec_size.height\n // }\n pps = hvcC.pps && hvcC.pps.map((item) => Number(`0x${item}`))\n profile = hvcC.profile\n } else {\n videoCodec = `${codecBox.type}`\n }\n if (tkhd && !width) {\n width = tkhd.width\n height = tkhd.height\n }\n }\n if (hdlr.handleType === 'soun') {\n audioTrak = trak\n let esds = util.findBox(trak, 'esds')\n let mp4a = util.findBox(trak, 'mp4a')\n let ESDescriptor = util.findBox(trak, 5)\n audioTimeScale = mdhd.timescale\n if (esds) {\n audioCodec = `${codecBox.type}.` + util.toHex(esds.subBox[0].subBox[0].typeID) + `.${esds.subBox[0].subBox[0].subBox[0].type}`\n } else {\n audioCodec = `${codecBox.type}`\n }\n if (ESDescriptor && ESDescriptor.EScode) {\n decoderConfig = ESDescriptor.EScode.map((item) => Number(`0x${item}`))\n }\n if (mp4a) {\n channelCount = mp4a.channelCount\n sampleRate = mp4a.sampleRate\n }\n }\n })\n if (!sps) return\n // this.videoTrak = Merge({}, videoTrak)\n // this.audioTrak = audioTrak ? Merge({}, audioTrak) : null\n this.videoTrak = videoTrak;\n this.audioTrak = audioTrak ? audioTrak : null\n let mdat = this._boxes.find(item => item.type === 'mdat')\n let videoDuration = util.seekTrakDuration(videoTrak, videoTimeScale)\n let audioDuration = audioTrak ? util.seekTrakDuration(audioTrak, audioTimeScale) : videoDuration\n this.mdatStart = mdat.start\n let vf = this.videoKeyFrames\n let videoKeyFramesLength = vf.length - 1\n vf.forEach((item, idx) => {\n if (idx < videoKeyFramesLength) {\n this.timeRage.push([\n item.time.time / videoTimeScale,\n vf[idx + 1].time.time / videoTimeScale\n ])\n } else {\n this.timeRage.push([\n item.time.time / videoTimeScale,\n mvhd.duration / mvhd.timeScale\n ])\n }\n })\n this.meta = {\n videoCodec,\n audioCodec,\n createTime: mvhd.createTime,\n modifyTime: mvhd.modifyTime,\n duration: mvhd.duration / mvhd.timeScale,\n timeScale: mvhd.timeScale,\n videoDuration,\n videoTimeScale,\n audioDuration,\n audioTimeScale,\n endTime: Math.min(videoDuration, audioDuration),\n vps,\n sps,\n pps,\n width,\n height,\n profile,\n pixelRatio,\n channelCount,\n sampleRate,\n audioConfig: decoderConfig,\n hvc1Data,\n hvcCData,\n ext: {\n videoTrak: this.videoTrak,\n audioTrak: this.audioTrak,\n mdatStart: this.mdatStart,\n timeRage: this.timeRage,\n },\n stss: this._stssObj\n }\n this.emit('metaReady', this.meta)\n }\n\n /**\n * [init 实例的初始化,主要是获取视频的MOOV元信息]\n */\n init () {\n let self = this\n self.getData().then(res => {\n let parsed\n let moovStart = 0\n let moov\n let boxes\n try {\n parsed = new Parser(res)\n } catch (e) {\n self.emit('error', e.type ? e : new Errors('parse', '', {line: 176, handle: '[MP4] init', msg: e.message}))\n return false\n }\n self._boxes = boxes = parsed.boxes\n boxes.every(item => {\n moovStart += item.size\n if (item.type === 'moov') {\n moov = item\n self.moovBox = moov\n self.emit('moovReady', moov)\n return false\n } else {\n return true\n }\n })\n if (!moov) {\n let nextBox = parsed.nextBox\n if (nextBox) {\n if (nextBox.type === 'moov') {\n self.getData(moovStart, moovStart + nextBox.size + 28).then(res => {\n let parsed\n // try {\n parsed = new Parser(res)\n // }catch(e) {\n\n // }\n \n self._boxes = self._boxes.concat(parsed.boxes)\n moov = parsed.boxes.filter(box => box.type === 'moov')\n if (moov.length) {\n self.moovBox = moov[0]\n self.emit('moovReady', moov)\n } else {\n self.emit('error', new Errors('parse', '', {line: 203, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n })\n } else {\n self.emit('error', new Errors('parse', '', {line: 207, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n } else {\n self.getData(moovStart, '').then(res => {\n let parsed = new Parser(res)\n if (parsed) {\n self._boxes = self._boxes.concat(parsed.boxes)\n parsed.boxes.every(item => {\n if (item.type === 'moov') {\n moov = item\n self.moovBox = moov\n self.emit('moovReady', moov)\n return false\n } else {\n return true\n }\n })\n } else {\n self.emit('error', new Errors('parse', '', {line: 225, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n })\n }\n }\n }).catch(() => {\n self.emit('error', new Errors('network', '', {line: 231, handle: '[MP4] getData', msg: 'getData failed'}))\n })\n }\n\n getSamplesByOrders (type = 'video', start, end) {\n let trak = type === 'video'\n ? this.videoTrak\n : this.audioTrak\n let stsc = util.findBox(trak, 'stsc') // chunk~samples\n let stsz = util.findBox(trak, 'stsz') // sample-size\n let stts = util.findBox(trak, 'stts') // sample-time\n let stco = util.findBox(trak, 'stco') // chunk-offset\n let cttsObj = type === 'video' ? this._cttsObj : null;\n let stscObj = type === 'video' ? this._stscVideoObj : this._stscAudioObj;\n let mdatStart = this.mdatStart\n let samples = []\n end = end !== undefined\n ? end\n : stsz.entries.length\n if (start instanceof Array) {\n start.forEach((item, idx) => {\n samples.push({\n idx: item,\n size: stsz.entries[item],\n time: util.seekSampleTime(stts, cttsObj, item),\n offset: util.seekSampleOffset(stsc, stco, stsz, item, mdatStart, stscObj)\n })\n })\n } else if (end !== 0) {\n for (let i = start; i < end; i++) {\n samples.push({\n idx: i,\n size: stsz.entries[i],\n time: util.seekSampleTime(stts, cttsObj, i),\n offset: util.seekSampleOffset(stsc, stco, stsz, i, mdatStart, stscObj)\n })\n }\n } else {\n let offset = util.seekSampleOffset(stsc, stco, stsz, start, mdatStart, stscObj)\n samples = {\n idx: start,\n size: stsz.entries[start],\n time: util.seekSampleTime(stts, cttsObj, start),\n offset: offset\n }\n }\n return samples\n }\n\n get videoKeyFrames () {\n if (this._videoFrames) {\n return this._videoFrames\n }\n let videoTrak = this.videoTrak\n let stss = util.findBox(videoTrak, 'stss')\n let stsc = util.findBox(videoTrak, 'stsc') // chunk~samples\n let ctts = util.findBox(videoTrak, 'ctts') // offset-compositime\n this._cttsObj = null;\n if(ctts){\n this._cttsObj = {};\n let count = 0;\n for(let i = 0; i < ctts.entry.length; i++){\n let entry = ctts.entry[i];\n for(let j = 0; j < entry.count; j++){\n this._cttsObj[count] = entry.offset;\n count += 1;\n }\n }\n }\n\n this._stscVideoObj = {};\n let sampleCount = 0;\n for(let i = 0; i < stsc.count - 1; i++){\n let entry = stsc.entries[i];\n for(let j = 0; j < entry.chunk_count * entry.samples_per_chunk; j++){\n sampleCount ++;\n this._stscVideoObj[sampleCount] = entry;\n }\n }\n\n let frames = this.getSamplesByOrders('video', stss.entries.map(item => item - 1))\n this._stssObj = stss;\n this._videoFrames = frames\n return frames\n }\n\n get audioKeyFrames () {\n if (this._audioFrames) {\n return this._audioFrames\n }\n let videoScale = util.findBox(this.videoTrak, 'mdhd').timescale\n let audioScale = util.findBox(this.audioTrak, 'mdhd').timescale\n let audioStts = util.findBox(this.audioTrak, 'stts').entry\n let stsc = util.findBox(this.audioTrak, 'stsc') // chunk~samples\n this._stscAudioObj = {};\n let sampleCount = 0;\n for(let i = 0; i < stsc.count - 1; i++){\n let entry = stsc.entries[i];\n for(let j = 0; j < entry.chunk_count * entry.samples_per_chunk; j++){\n sampleCount ++;\n this._stscAudioObj[sampleCount] = entry;\n }\n }\n let videoFrames = this.videoKeyFrames\n let audioIndex = []\n audioIndex = videoFrames.map(item => {\n return util.seekOrderSampleByTime(audioStts, audioScale, item.time.time / videoScale)\n })\n this._audioFrames = audioIndex\n return this._audioFrames\n }\n\n packMeta() {\n if (!this.meta) {\n return\n }\n let buffer = new Buffer()\n buffer.write(FMP4.ftyp())\n buffer.write(FMP4.moov(this.meta))\n // this.cache.write(buffer.buffer)\n return buffer.buffer\n }\n\n getRangeFromTime(time){\n let fragIndex = this.getFragmentIdx(time);\n let range = this.getFragRange(fragIndex)\n if(range === [0, 0]) return null;\n return {\n range,\n fragIndex,\n }\n }\n\n getFragmentIdx(time){\n let timeStart = Math.round(time * this.meta.videoTimeScale)\n let fragIndex\n let videoFrames = this.videoKeyFrames\n videoFrames.every((item, idx) => {\n let nowTime = item.time.time\n let nextTime = videoFrames[idx + 1]\n ? videoFrames[idx + 1].time.time\n : Number.MAX_SAFE_INTEGER\n if (nowTime <= timeStart && timeStart < nextTime) {\n fragIndex = idx\n return false\n } else {\n return true\n }\n })\n if (this.audioTrak) {\n let audioFrames = this.audioKeyFrames\n audioFrames.every((item, idx) => {\n let nowTime = item.startTime\n let nextTime = audioFrames[idx + 1]\n ? audioFrames[idx + 1].startTime\n : Number.MAX_SAFE_INTEGER\n if (nowTime <= timeStart && timeStart < nextTime) {\n fragIndex = Math.min(idx, fragIndex)\n return false\n } else {\n return true\n }\n })\n }\n return fragIndex;\n }\n\n seek (time) {\n let fragIndex = this.getFragmentIdx(time);\n this.timeRage[fragIndex].downloaded = true;\n return this.loadFragment(fragIndex)\n }\n\n getFragRange (fragIndex) {\n let videoFrame = this.videoKeyFrames[fragIndex]\n let start = videoFrame.offset\n let end\n if (this.audioTrak) {\n let audioFrame = this.getSamplesByOrders('audio', this.audioKeyFrames[fragIndex].order, 0)\n start = Math.min(start, audioFrame.offset)\n }\n if (fragIndex < this.videoKeyFrames.length - 1) {\n let videoNextFrame = this.videoKeyFrames[fragIndex + 1]\n end = videoNextFrame.offset\n if (this.audioTrak) {\n let audioNextFrame = this.getSamplesByOrders('audio', this.audioKeyFrames[fragIndex + 1].order, 0)\n end = Math.max(end, audioNextFrame.offset || 0)\n }\n }\n if (window.isNaN(start) || (end !== undefined && window.isNaN(end))) {\n this.emit('error', new Errors('parse', '', { line: 366, handle: '[MP4] loadFragment', url: this.url }))\n return [0, 0]\n }\n return [start + this.mdatStart, end ? this.mdatStart + end : '']\n }\n loadFragment (fragIndex) {\n let self = this\n let range = this.getFragRange(fragIndex)\n if(range === [0, 0]) {\n debugger\n return false;\n }\n return this.getData(range[0], range[1]).then((dat) => {\n return self.createFragment(new Uint8Array(dat), range[0] - this.mdatStart, fragIndex)\n })\n .then(buf => {\n return buf\n })\n }\n addFragment (data) {\n let buffer = new Buffer()\n return new Promise(resolve => {\n buffer.write(FMP4.moof(data))\n buffer.write(FMP4.mdat(data))\n // this.cache.write(buffer.buffer)\n resolve(buffer.buffer)\n })\n }\n getVideoBuffer(mdatData, start, fragIndex) {\n let self = this\n let videoFlags = 0xf01\n let framesIndex = self.videoKeyFrames.map((item) => item.idx)\n let _samples = self.getSamplesByOrders('video', framesIndex[fragIndex], framesIndex[fragIndex + 1])\n let samples = _samples.map((item, idx) => {\n return {\n size: item.size,\n duration: item.time.duration,\n offset: item.time.offset,\n buffer: new Uint8Array(mdatData.slice(item.offset - start, item.offset - start + item.size)),\n key: idx === 0,\n idx: item.idx\n }\n })\n return this.addFragment({\n id: 1,\n time: _samples[0].time.time,\n firstFlags: 0x2000000,\n flags: videoFlags,\n samples,\n sampleOffset: _samples[0].idx,\n fragIndex\n })\n }\n getAudioBuffer(mdatData, start, fragIndex) {\n\n let self = this\n let audioFlags = 0x701\n\n let _samples = this.getSamplesByOrders(\n 'audio', this.audioKeyFrames[fragIndex].order, this.audioKeyFrames[fragIndex + 1]\n ? this.audioKeyFrames[fragIndex + 1].order\n : undefined)\n let samples = _samples.map((item, idx) => {\n return {\n size: item.size,\n duration: item.time.duration,\n offset: item.time.offset,\n buffer: new Uint8Array(mdatData.slice(item.offset - start, item.offset - start + item.size)),\n key: idx === 0\n }\n })\n return this.addFragment({\n id: 2,\n time: _samples[0].time.time,\n firstFlags: 0x00,\n flags: audioFlags,\n samples,\n sampleOffset: _samples[0].idx,\n fragIndex\n })\n }\n createFragment (mdatData, start, fragIndex) {\n let self = this\n\n let resBuffers = []\n let promises = [\n self.getVideoBuffer(mdatData, start, fragIndex)\n ]\n if (this.audioTrak) {\n promises.push(self.getAudioBuffer(mdatData, start, fragIndex))\n }\n return Promise.all(promises)\n .then(buffers => {\n resBuffers.push(buffers[0])\n if (buffers && buffers[1]) {\n resBuffers.push(buffers[1])\n }\n let bufferSize = 0\n resBuffers.every(item => {\n bufferSize += item.byteLength\n return true\n })\n let buffer = new Uint8Array(bufferSize)\n let offset = 0\n resBuffers.every(item => {\n buffer.set(item, offset)\n offset += item.byteLength\n return true\n })\n return buffer\n })\n }\n\n update(url){\n this.url = url;\n }\n\n destroy(){\n if(this.hasDestroyed){\n return;\n }\n for (let k in this) {\n delete this[k]\n }\n this.hasDestroyed = true;\n }\n}\n\nexport default MP4\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 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\";\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 isObject = require(\"../object/is\");\n\nmodule.exports = function (value) {\n\tif (!isObject(value)) return false;\n\ttry {\n\t\tif (!value.constructor) return false;\n\t\treturn value.constructor.prototype === value;\n\t} catch (error) {\n\t\treturn false;\n\t}\n};\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\nmodule.exports = require(\"./is-implemented\")() ? Object.assign : require(\"./shim\");\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\";\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\nmodule.exports = require(\"./is-implemented\")() ? Object.keys : require(\"./shim\");\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 keys = Object.keys;\n\nmodule.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };\n","\"use strict\";\n\n// eslint-disable-next-line no-empty-function\nmodule.exports = function () {};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) throw new TypeError(\"Cannot use null or undefined\");\n\treturn value;\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\nmodule.exports = require(\"./is-implemented\")() ? String.prototype.contains : require(\"./shim\");\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","\"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 = function (fn) {\n\tif (typeof fn !== \"function\") throw new TypeError(fn + \" is not a function\");\n\treturn fn;\n};\n","import Box from './box'\nimport Concat from 'concat-typed-array'\nimport Stream from './stream'\nimport * as SubBox from './box/*.js'\n\nclass Parse {\n constructor (buffer) {\n this.buffer = null\n this.boxes = []\n this.nextBox = null\n this.start = 0\n let self = this\n if (self.buffer) {\n Concat(Uint8Array, self.buffer, buffer)\n } else {\n self.buffer = buffer\n }\n let bufferLength = buffer.byteLength\n buffer.position = 0\n let stream = new Stream(buffer)\n while (bufferLength - stream.position >= 8) {\n let box = new Box()\n box.readHeader(stream)\n if (box.size - 8 <= (bufferLength - stream.position)) {\n box.readBody(stream)\n self.boxes.push(box)\n } else {\n if (box.type === 'mdat') {\n box.readBody(stream)\n self.boxes.push(box)\n } else {\n self.nextBox = box\n stream.position -= 8\n break\n }\n }\n }\n self.buffer = new Uint8Array(self.buffer.slice(stream.position))\n }\n}\n\nexport default Parse\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (ResultConstructor) {\n var totalLength = 0;\n\n for (var _len = arguments.length, arrays = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n arrays[_key - 1] = arguments[_key];\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = arrays[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var arr = _step.value;\n\n totalLength += arr.length;\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 var result = new ResultConstructor(totalLength);\n var offset = 0;\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = arrays[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _arr = _step2.value;\n\n result.set(_arr, offset);\n offset += _arr.length;\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return result;\n};","import Box from '../box'\nimport Stream from '../stream'\n\nBox.vmhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = [stream.readUint8(), stream.readUint8(), stream.readUint8()]\n this.graphicsmode = stream.readUint16()\n this.opcolor = [stream.readUint16(), stream.readUint16(), stream.readUint16()]\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox['url '] = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = [stream.readUint8(), stream.readUint8(), stream.readUint8()]\n let location = []; let length = stream.buffer.byteLength\n while (stream.position < length) {\n location.push(stream.readUint8())\n }\n this.location = location\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nBox.udta = function () {\n delete this.subBox\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport UTC from '../date'\n\nBox.tkhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3, 0)\n if (this.version === 1) {\n this.create = stream.readUint64()\n this.modify = stream.readUint64()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.trackID = stream.readUint32()\n this.reserverd = stream.readUint32()\n this.duration = stream.readUint64()\n } else {\n this.create = stream.readUint32()\n this.modify = stream.readUint32()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.trackID = stream.readUint32()\n this.reserverd = stream.readUint32()\n this.duration = stream.readUint32()\n }\n stream.readUint64()\n this.layer = stream.readInt16()\n this.alternate_group = stream.readInt16()\n this.volume = stream.readInt16() >> 8\n stream.readUint16()\n // 视频转换矩阵\n let matrix = []\n for (let i = 0; i < 9; i++) {\n matrix.push(stream.readUint16() + '.' + stream.readUint16())\n }\n this.matrix = matrix\n this.width = stream.readUint16() + '.' + stream.readUint16()\n this.height = stream.readUint16() + '.' + stream.readUint16()\n delete this.data\n delete this.subBox\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.tfhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n\n // trackId: view.getUint32(4)\n this.track_id = stream.readUint32();\n\n let baseDataOffsetPresent = (this.flag & 0xff) & 0x01;\n let sampleDescriptionIndexPresent = (this.flag & 0xff) & 0x02;\n let defaultSampleDurationPresent = (this.flag & 0xff) & 0x08;\n let defaultSampleSizePresent = (this.flag & 0xff) & 0x10;\n let defaultSampleFlagsPresent = (this.flag & 0xff) & 0x20;\n\n let i = 8;\n if (baseDataOffsetPresent) {\n i += 4; // truncate top 4 bytes\n this.baseDataOffset = stream.readUint32();\n i += 4;\n }\n if (sampleDescriptionIndexPresent) {\n this.sampleDescriptionIndex = stream.readUint32();\n i += 4;\n }\n if (defaultSampleDurationPresent) {\n this.defaultSampleDuration = stream.readUint32();\n i += 4;\n }\n if (defaultSampleSizePresent) {\n this.defaultSampleSize = stream.readUint32();\n i += 4;\n }\n if (defaultSampleFlagsPresent) {\n this.defaultSampleFlags = stream.readUint32();\n }\n\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stts = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entry = []\n for (let i = 0, count = this.count; i < count; i++) {\n entry.push({\n sampleCount: stream.readUint32(),\n sampleDuration: stream.readUint32()\n })\n }\n this.entry = entry\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stsz = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.sampleSize = stream.readUint32()\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n if (this.sampleSize) {\n entries.push(this.sampleSize)\n }\n else {\n entries.push(stream.readUint32())\n }\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stss = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push(stream.readUint32())\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.stsd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.entryCount = stream.readUint32()\n let box = new Box()\n box.readHeader(stream)\n this.subBox.push(box)\n box.readBody(stream)\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stsc = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push({\n first_chunk: stream.readUint32(),\n samples_per_chunk: stream.readUint32(),\n sample_desc_index: stream.readUint32()\n })\n }\n for (let i = 0, count = this.count, entry, preEntry; i < count - 1; i++) {\n entry = entries[i]\n preEntry = entries[i - 1]\n entry.chunk_count = entries[i + 1].first_chunk - entry.first_chunk\n entry.first_sample = i === 0 ? 1 : preEntry.first_sample + preEntry.chunk_count * preEntry.samples_per_chunk\n }\n if (this.count === 1) {\n let entry = entries[0]\n entry.first_sample = 1\n entry.chunk_count = 0\n } else if (this.count > 1) {\n let last = entries[this.count - 1]; let pre = entries[this.count - 2]\n last.first_sample = pre.first_sample + pre.chunk_count * pre.samples_per_chunk\n last.chunk_count = 0\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stco = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push(stream.readUint32())\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.smhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.balance = stream.readInt8() + '.' + stream.readInt8()\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\n\nBox.SLConfigDescriptor = function (stream) {\n let box = new Box()\n let size\n box.type = stream.readUint8()\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n } else {\n size += 2\n }\n box.size = size\n box.SL = stream.readUint8()\n delete box.subBox\n return box\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\n\nBox.schm = function () {\n let stream = new Stream(this.data)\n\tthis.scheme_version = stream.readUint32();\n this.scheme_type = '';\n for (var i = 0; i < 4; i++) {\n this.scheme_type += String.fromCharCode(stream.readUint8());\n }\n\tif (this.flags & 0x000001) {\n this.scheme_uri = '';\n for (var i = 0; i < this.size - this.hdr_size - 8; i++) {\n this.scheme_uri += String.fromCharCode(stream.readUint8());\n }\n\t}\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.pasp = function () {\n let stream = new Stream(this.data)\n\tthis.hSpacing = stream.readUint32();\n\tthis.vSpacing = stream.readUint32();\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport UTC from '../date'\n\nBox.mvhd = function () {\n let stream = new Stream(this.data)\n\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.create = stream.readUint32()\n this.modify = stream.readUint32()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.timeScale = stream.readUint32()\n this.duration = stream.readUint32()\n this.rate = stream.readUint16() + '.' + stream.readUint16()\n this.volume = stream.readUint8() + '.' + stream.readUint8()\n // 越过保留的10字节\n Stream.readByte(stream.dataview, 8)\n Stream.readByte(stream.dataview, 2)\n // 视频转换矩阵\n let matrix = []\n for (let i = 0; i < 9; i++) {\n matrix.push(stream.readUint16() + '.' + stream.readUint16())\n }\n this.matrix = matrix\n Stream.readByte(stream.dataview, 24)\n this.nextTrackID = stream.readUint32()\n delete this.subBox\n delete this.data\n}\n","import Box from '../box'\n\nBox.MP4ESDescrTag = function (stream) {\n let box = new Box()\n let size\n box.type = stream.readUint8()\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n } else {\n size += 2\n }\n box.size = size\n box.esID = stream.readUint16()\n box.priority = stream.readUint8()\n box.subBox.push(Box.MP4DecConfigDescrTag(stream))\n box.subBox.push(Box.SLConfigDescriptor(stream))\n return box\n}\n","import Box from '../box'\n\nBox.MP4DecSpecificDescrTag = function (stream) {\n let box = new Box()\n let size, dataSize\n box.type = stream.readUint8()\n if (box.type !== 5) {\n stream.position = stream.position - 1\n return box\n }\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n dataSize = size - 5\n } else {\n dataSize = size\n size += 2\n }\n box.size = size\n let EScode = []\n for (let i = 0; i < dataSize; i++) {\n EScode.push(Number(stream.readUint8()).toString(16).padStart(2, '0'))\n }\n box.EScode = EScode\n delete box.subBox\n return box\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.MP4DecConfigDescrTag = function (stream) {\n let box = new Box()\n let size\n box.type = stream.readUint8()\n if (box.type !== 4) {\n return box\n }\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n } else {\n size += 2\n }\n box.size = size\n box.typeID = stream.readUint8()\n // 6 bits stream type,1 bit upstream flag,1 bit reserved flag\n box.streamUint = stream.readUint8()\n box.bufferSize = Stream.readByte(stream.dataview, 3)\n box.maximum = stream.readUint32()\n box.average = stream.readUint32()\n box.subBox.push(Box.MP4DecSpecificDescrTag(stream))\n return box\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.mp4a = function () {\n let stream = new Stream(this.data)\n stream.skip(6)\n this.dataReferenceIndex = stream.readUint16()\n stream.skip(8)\n this.channelCount = stream.readUint16()\n this.sampleSize = stream.readUint16()\n stream.skip(4)\n this.sampleRate = stream.readUint32() >> 16\n let box = new Box()\n box.readHeader(stream)\n this.subBox.push(box)\n box.readBody(stream)\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport UTC from '../date'\n\nBox.mdhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n if (this.version === 1) {\n this.create = stream.readUint64()\n this.modify = stream.readUint64()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.timescale = stream.readUint32()\n this.duration = stream.readUint64()\n } else {\n this.create = stream.readUint32()\n this.modify = stream.readUint32()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.timescale = stream.readUint32()\n this.duration = stream.readUint32()\n }\n this.language = stream.readUint16()\n stream.readUint16()\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\n\nBox.mdat = function () {\n delete this.subBox\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.iods = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let content = []\n let length = stream.buffer.byteLength\n while (stream.position < length) {\n content.push(stream.readUint8())\n }\n this.content = content\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport SpsParser from './sps'\n\nBox.hvcC = function () {\n let stream = new Stream(this.data)\n this.configVersion = stream.readUint8()\n this.profile = stream.readUint8()\n this.profileCompatibility = stream.readUint32()\n this.constraintIndicatorFlags = []\n for (let i = 0; i < 6; i++) {\n this.constraintIndicatorFlags.push(Number(stream.readUint8()).toString(16))\n }\n this.levelIdc = stream.readUint8()\n this.profileCompatibilityIndications = stream.readUint32()\n this.bitDepthLumaMinus8 = stream.readUint8()\n this.bitDepthChromaMinus8 = stream.readUint8()\n this.avgFrameRate = stream.readUint16()\n this.constantFrameRate = stream.readUint8()\n this.numOfArrays = stream.readUint8()\n\n this.vpsHeader = stream.readUint24()\n this.vpsLength = stream.readUint16()\n let vps = []\n for (let i = 0; i < this.vpsLength; i++) {\n vps.push(Number(stream.readUint8()).toString(16))\n }\n this.vps = vps\n\n this.spsHeader = stream.readUint24()\n this.spsLength = stream.readUint16()\n let sps = []\n for (let i = 0; i < this.spsLength; i++) {\n sps.push(Number(stream.readUint8()).toString(16))\n }\n // this.spsInfo = SpsParser.parseSPS(new Uint8Array(sps))\n this.sequence = sps\n\n this.ppsHeader = stream.readUint24()\n this.ppsLength = stream.readUint16()\n let pps = []\n for (let i = 0; i < this.ppsLength; i++) {\n pps.push(Number(stream.readUint8()).toString(16))\n }\n this.pps = pps\n\n let last = []; let dataviewLength = stream.dataview.byteLength\n while (stream.position < dataviewLength) {\n last.push(stream.readUint8())\n }\n this.last = last\n delete this.subBox\n // delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.hvc1 = function () {\n let stream = new Stream(this.data)\n let self = this\n stream.skip(6)\n this.dataReferenceIndex = stream.readUint16()\n stream.skip(16)\n this.width = stream.readUint16()\n this.height = stream.readUint16()\n this.horizresolution = stream.readUint32()\n this.vertresolution = stream.readUint32()\n stream.skip(4)\n this.frameCount = stream.readUint16()\n stream.skip(1)\n for (let i = 0; i < 31; i++) {\n String.fromCharCode(stream.readUint8())\n }\n this.depth = stream.readUint16()\n stream.skip(2)\n while (stream.position < stream.buffer.byteLength) {\n let box = new Box()\n box.readHeader(stream)\n self.subBox.push(box)\n box.readBody(stream)\n }\n // delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.hdlr = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n stream.skip(4)\n this.handleType = `${String.fromCharCode(stream.readUint8())}${String.fromCharCode(stream.readUint8())}${String.fromCharCode(stream.readUint8())}${String.fromCharCode(stream.readUint8())}`\n stream.skip(12)\n let name = []\n while (stream.position < this.size - 8) {\n name.push(String.fromCharCode(stream.readUint8()))\n }\n this.name = name.join('')\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.ftyp = function () {\n let stream = new Stream(this.data)\n this.major_brand = String.fromCharCode(stream.readUint8(), stream.readUint8(), stream.readUint8(), stream.readUint8())\n this.minor_version = stream.readUint32()\n let compatibleBrands = []\n for (let i = 0, len = Math.floor((stream.buffer.byteLength - 8) / 4); i < len; i++) {\n compatibleBrands.push(String.fromCharCode(stream.readUint8(), stream.readUint8(), stream.readUint8(), stream.readUint8()))\n }\n this.compatible_brands = compatibleBrands\n stream = null\n delete this.subBox\n delete this.data\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.frma = function () {\n let stream = new Stream(this.data)\n this.data_format = '';\n for (var i = 0; i < 4; i++) {\n this.data_format += String.fromCharCode(stream.readUint8());\n }\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.esds = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n try {\n let box = Box.MP4ESDescrTag(stream)\n this.subBox.push(box)\n delete this.data\n stream = null\n }catch(e) {\n console.error(e)\n }\n \n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.elst = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let entries = []\n let entry_count = stream.readUint32()\n this.entries = entries\n for (let i = 0; i < entry_count; i++) {\n let entry = {}\n entries.push(entry)\n if (this.version === 1) {\n entry.segment_duration = stream.readUint64()\n entry.media_time = stream.readUint64()\n } else {\n entry.segment_duration = stream.readUint32()\n entry.media_time = stream.readInt32()\n }\n entry.media_rate_integer = stream.readInt16()\n entry.media_rate_fraction = stream.readInt16()\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.dref = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let entryCount = stream.readUint32()\n this.entryCount = entryCount\n let self = this\n // 暂时不支持离散视频,视频的部分内容由url指定\n for (let i = 0; i < entryCount; i++) {\n let box = new Box()\n self.subBox.push(box)\n box.read(stream)\n }\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.ctts = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n\n this.entryCount = stream.readUint32()\n let entry = []\n this.entry = entry\n for (let i = 0, count = this.entryCount; i < count; i++) {\n entry.push({\n count: stream.readUint32(),\n offset: stream.readUint32()\n })\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.co64 = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push(stream.readUint64())\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.btrt = function () {\n let stream = new Stream(this.data)\n this.bufferSizeDB = stream.readUint32()\n this.maxBitrate = stream.readUint32()\n this.avgBitrate = stream.readUint32()\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport SpsParser from './sps'\n\nBox.avcC = function () {\n let stream = new Stream(this.data)\n this.configVersion = stream.readUint8()\n this.profile = stream.readUint8()\n this.profileCompatibility = stream.readUint8()\n this.AVCLevelIndication = stream.readUint8()\n this.lengthSizeMinusOne = (stream.readUint8() & 3) + 1\n this.numOfSequenceParameterSets = stream.readUint8() & 31\n let sequenceLength = stream.readUint16()\n this.sequenceLength = sequenceLength\n let sequence = []\n for (let i = 0; i < sequenceLength; i++) {\n sequence.push(stream.readUint8())\n }\n this.spsInfo = SpsParser.parseSPS(new Uint8Array(sequence))\n this.ppsCount = stream.readUint8()\n let ppsLength = stream.readUint16()\n this.ppsLength = ppsLength\n let pps = []\n for (let i = 0; i < ppsLength; i++) {\n pps.push(Number(stream.readUint8()).toString(16))\n }\n this.pps = pps\n this.sequence = sequence\n let last = []; let dataviewLength = stream.dataview.byteLength\n while (stream.position < dataviewLength) {\n last.push(stream.readUint8())\n }\n this.last = last\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.avc1 = function () {\n let stream = new Stream(this.data)\n let self = this\n stream.skip(6)\n this.dataReferenceIndex = stream.readUint16()\n stream.skip(16)\n this.width = stream.readUint16()\n this.height = stream.readUint16()\n this.horizresolution = stream.readUint32()\n this.vertresolution = stream.readUint32()\n stream.skip(4)\n this.frameCount = stream.readUint16()\n stream.skip(1)\n for (let i = 0; i < 31; i++) {\n String.fromCharCode(stream.readUint8())\n }\n this.depth = stream.readUint16()\n stream.skip(2)\n while (stream.position < stream.buffer.byteLength) {\n let box = new Box()\n box.readHeader(stream)\n self.subBox.push(box)\n box.readBody(stream)\n }\n delete this.data\n stream = null\n}\n","import Buffer from './buffer'\nconst UINT32_MAX = Math.pow(2, 32) - 1\n\nclass FMP4 {\n static type (name) {\n return new Uint8Array([name.charCodeAt(0), name.charCodeAt(1), name.charCodeAt(2), name.charCodeAt(3)])\n }\n static size (value) {\n return Buffer.writeUint32(value)\n }\n static extension (version, flag) {\n return new Uint8Array([\n version,\n (flag >> 16) & 0xff,\n (flag >> 8) & 0xff,\n flag & 0xff\n ])\n }\n static ftyp () {\n let buffer = new Buffer()\n buffer.write(FMP4.size(24), FMP4.type('ftyp'), new Uint8Array([\n 0x69, 0x73, 0x6F, 0x36, // isom,\n 0x0, 0x0, 0x00, 0x01, // minor_version: 0x01\n 0x69, 0x73, 0x6F, 0x36, // isom\n 0x64, 0x61, 0x73, 0x68 // avc1\n ]))\n return buffer.buffer\n }\n static moov (data) {\n let buffer = new Buffer(); let size = 8\n let mvhd = FMP4.mvhd(data.duration, data.timeScale)\n let mvex = FMP4.mvex(data.duration, data.timeScale)\n let trak1 = FMP4.videoTrak(data)\n let trak2 = new Uint8Array([])\n if (data.channelCount) {\n trak2 = FMP4.audioTrak(data);\n }\n [mvhd, mvex, trak1, trak2].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('moov'), mvhd, mvex, trak1, trak2)\n return buffer.buffer\n }\n static mvhd (duration, timescale) {\n let buffer = new Buffer()\n duration *= timescale\n // const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1))\n // const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1))\n let bytes = new Uint8Array([\n 0x00, // version 1\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >> 24) & 0xff,\n (timescale >> 16) & 0xff,\n (timescale >> 8) & 0xff,\n timescale & 0xff, // timescale\n (duration >> 24) & 0xff,\n (duration >> 16) & 0xff,\n (duration >> 8) & 0xff,\n duration & 0xff, // duration\n 0x00, 0x01, 0x00, 0x00, // 1.0 rate\n 0x01, 0x00, // 1.0 volume\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x00, 0x00, 0x00, 0x03 // next_track_ID\n ])\n buffer.write(FMP4.size(8 + bytes.length), FMP4.type('mvhd'), new Uint8Array(bytes))\n return buffer.buffer\n }\n static videoTrak (data) {\n let buffer = new Buffer(); let size = 8\n let tkhd = FMP4.tkhd({\n id: 1,\n duration: data.videoDuration,\n timescale: data.videoTimeScale,\n width: data.width,\n height: data.height,\n type: 'video'\n })\n let mdia = FMP4.mdia({\n type: 'video',\n timescale: data.videoTimeScale,\n duration: data.videoDuration,\n vps: data.vps,\n sps: data.sps,\n pps: data.pps,\n pixelRatio: data.pixelRatio,\n width: data.width,\n height: data.height,\n videoCodec: data.videoCodec,\n hvc1Data: data.hvc1Data,\n hvcCData: data.hvcCData,\n stss: data.stss\n });\n [tkhd, mdia].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('trak'), tkhd, mdia)\n return buffer.buffer\n }\n static audioTrak (data) {\n let buffer = new Buffer(); let size = 8\n let tkhd = FMP4.tkhd({\n id: 2,\n duration: data.audioDuration,\n timescale: data.audioTimeScale,\n width: 0,\n height: 0,\n type: 'audio'\n })\n let channelCount = data.channelCount\n let sampleRate = data.sampleRate\n let mdia = FMP4.mdia({\n type: 'audio',\n timescale: data.audioTimeScale,\n duration: data.audioDuration,\n channelCount,\n sampleRate,\n audioConfig: data.audioConfig\n });\n [tkhd, mdia].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('trak'), tkhd, mdia)\n return buffer.buffer\n }\n static tkhd (data) {\n let buffer = new Buffer()\n let id = data.id\n\n let duration = data.duration * data.timeScale\n\n let width = data.width\n\n let height = data.height\n\n let type = data.type\n\n // let upperWordDuration = Math.floor(duration / (UINT32_MAX + 1))\n\n // let lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1))\n let content = new Uint8Array([\n 0x00, // version 1\n 0x00, 0x00, 0x03, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0xD9, 0xAC, 0xEC, 0x56, // modification_time\n (id >> 24) & 0xff,\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n id & 0xff, // track_ID\n 0x00, 0x00, 0x00, 0x00, // reserved\n (duration >> 24) & 0xff,\n (duration >> 16) & 0xff,\n (duration >> 8) & 0xff,\n duration & 0xff, // duration\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, // layer\n 0x00, type === 'video' ? 0x01 : 0x00, // alternate_group\n type === 'audio' ? 0x01 : 0x00, 0x00, // non-audio track volume\n 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n (width >> 8) & 0xff,\n width & 0xff,\n 0x00, 0x00, // width\n (height >> 8) & 0xff,\n height & 0xff,\n 0x00, 0x00 // height\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('tkhd'), content)\n return buffer.buffer\n }\n static edts (data) {\n let buffer = new Buffer(); let duration = data.duration; let mediaTime = data.mediaTime\n buffer.write(FMP4.size(36), FMP4.type('edts'))\n // elst\n buffer.write(FMP4.size(28), FMP4.type('elst'))\n buffer.write(new Uint8Array([\n 0x00, 0x00, 0x00, 0x01, // entry count\n (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff,\n (mediaTime >> 24) & 0xff, (mediaTime >> 16) & 0xff, (mediaTime >> 8) & 0xff, mediaTime & 0xff,\n 0x00, 0x00, 0x00, 0x01 // media rate\n ]))\n return buffer.buffer\n }\n static mdia (data) {\n let buffer = new Buffer(); let size = 8\n let mdhd = FMP4.mdhd(data.timescale)\n let hdlr = FMP4.hdlr(data.type)\n let minf = FMP4.minf(data);\n [mdhd, hdlr, minf].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('mdia'), mdhd, hdlr, minf)\n return buffer.buffer\n }\n static mdhd (timescale, duration = 0) {\n let buffer = new Buffer()\n duration *= timescale\n const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1))\n const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1))\n let content = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0xD9, 0x14, 0x25, 0x5A, // modification_time\n (timescale >> 24) & 0xff, (timescale >> 16) & 0xff, (timescale >> 8) & 0xff, timescale & 0xff,\n 0x00, 0x00, 0x00, 0x00, // duration\n 0x15, 0xC7, // 'und' language\n 0x00, 0x00\n ])\n buffer.write(FMP4.size(12 + content.byteLength), FMP4.type('mdhd'), FMP4.extension(0, 0), content)\n return buffer.buffer\n }\n static hdlr (type) {\n let buffer = new Buffer()\n let value = [0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x56, 0x69, 0x64, 0x65,\n 0x6f, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ]\n if (type === 'audio') {\n value.splice(8, 4, ...[0x73, 0x6f, 0x75, 0x6e])\n value.splice(24, 13, ...[0x53, 0x6f, 0x75, 0x6e,\n 0x64, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00])\n }\n buffer.write(FMP4.size(8 + value.length), FMP4.type('hdlr'), new Uint8Array(value))\n return buffer.buffer\n }\n static minf (data) {\n let buffer = new Buffer(); let size = 8\n let vmhd = data.type === 'video' ? FMP4.vmhd() : FMP4.smhd()\n let dinf = FMP4.dinf()\n let stbl = FMP4.stbl(data);\n [vmhd, dinf, stbl].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('minf'), vmhd, dinf, stbl)\n return buffer.buffer\n }\n static vmhd () {\n let buffer = new Buffer()\n buffer.write(FMP4.size(20), FMP4.type('vmhd'), new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x01, // flags\n 0x00, 0x00, // graphicsmode\n 0x00, 0x00,\n 0x00, 0x00,\n 0x00, 0x00 // opcolor\n ]))\n return buffer.buffer\n }\n static smhd () {\n let buffer = new Buffer()\n buffer.write(FMP4.size(16), FMP4.type('smhd'), new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, // balance\n 0x00, 0x00 // reserved\n ]))\n return buffer.buffer\n }\n static dinf () {\n let buffer = new Buffer()\n let dref = [0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01, // entry_count\n 0x00, 0x00, 0x00, 0x0c, // entry_size\n 0x75, 0x72, 0x6c, 0x20, // 'url' type\n 0x00, // version 0\n 0x00, 0x00, 0x01 // entry_flags\n ]\n buffer.write(FMP4.size(36), FMP4.type('dinf'), FMP4.size(28), FMP4.type('dref'), new Uint8Array(dref))\n return buffer.buffer\n }\n static stbl (data) {\n let buffer = new Buffer(); let size = 8\n let stsd = FMP4.stsd(data)\n let stts = FMP4.stts()\n let stsc = FMP4.stsc()\n let stsz = FMP4.stsz()\n let stco = FMP4.stco();\n if(data.type === 'video') {\n let stss = FMP4.stss(data.stss);\n [stsd, stts, stss, stsc, stsz, stco].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('stbl'), stsd, stts, stss, stsc, stsz, stco)\n } else {\n [stsd, stts, stsc, stsz, stco].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('stbl'), stsd, stts, stsc, stsz, stco)\n }\n \n return buffer.buffer\n }\n static stsd (data) {\n let buffer = new Buffer(); let content\n if (data.type === 'audio') {\n content = FMP4.mp4a(data)\n } else if (data.videoCodec.indexOf('hvc1') > -1) {\n content = FMP4.hvc1(data)\n } else {\n content = FMP4.avc1(data)\n }\n buffer.write(\n FMP4.size(16 + content.byteLength), \n FMP4.type('stsd'), \n FMP4.extension(0, 0), \n new Uint8Array([0x00, 0x00, 0x00, 0x01]),\n content\n )\n return buffer.buffer\n }\n static mp4a (data) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, data.channelCount, // channelcount\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00, // reserved2\n (data.sampleRate >> 8) & 0xff,\n data.sampleRate & 0xff, //\n 0x00, 0x00\n ])\n let esds = FMP4.esds(data.audioConfig)\n buffer.write(FMP4.size(8 + content.byteLength + esds.byteLength), FMP4.type('mp4a'), content, esds)\n return buffer.buffer\n }\n static esds (config = [43, 146, 8, 0]) {\n const configlen = config.length\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n\n 0x03, // descriptor_type\n 0x17 + configlen, // length\n 0x00, 0x01, // es_id\n 0x00, // stream_priority\n\n 0x04, // descriptor_type\n 0x0f + configlen, // length\n 0x40, // codec : mpeg4_audio\n 0x15, // stream_type\n 0x00, 0x00, 0x00, // buffer_size\n 0x00, 0x00, 0x00, 0x00, // maxBitrate\n 0x00, 0x00, 0x00, 0x00, // avgBitrate\n\n 0x05 // descriptor_type\n ].concat([configlen]).concat(config).concat([0x06, 0x01, 0x02]))\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('esds'), content)\n return buffer.buffer\n }\n static avc1 (data) {\n let buffer = new Buffer(); let size = 40// 8(avc1)+8(avcc)+8(btrt)+16(pasp)\n let sps = data.sps; let pps = data.pps; let width = data.width; let height = data.height; let hSpacing = data.pixelRatio[0]; let vSpacing = data.pixelRatio[1]\n let avcc = new Uint8Array([\n 0x01, // version\n sps[1], // profile\n sps[2], // profile compatible\n sps[3], // level\n 0xfc | 3,\n 0xE0 | 1 // 目前只处理一个sps\n ].concat([sps.length >>> 8 & 0xff, sps.length & 0xff]).concat(sps).concat(1).concat([pps.length >>> 8 & 0xff, pps.length & 0xff]).concat(pps))\n let avc1 = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n (width >> 8) & 0xff,\n width & 0xff, // width\n (height >> 8) & 0xff,\n height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n 0x12,\n 0x64, 0x61, 0x69, 0x6C, // dailymotion/hls.js\n 0x79, 0x6D, 0x6F, 0x74,\n 0x69, 0x6F, 0x6E, 0x2F,\n 0x68, 0x6C, 0x73, 0x2E,\n 0x6A, 0x73, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0x11, 0x11]) // pre_defined = -1\n let btrt = new Uint8Array([\n 0x00, 0x1c, 0x9c, 0x80, // bufferSizeDB\n 0x00, 0x2d, 0xc6, 0xc0, // maxBitrate\n 0x00, 0x2d, 0xc6, 0xc0 // avgBitrate\n ])\n let pasp = new Uint8Array([\n (hSpacing >> 24), // hSpacing\n (hSpacing >> 16) & 0xff,\n (hSpacing >> 8) & 0xff,\n hSpacing & 0xff,\n (vSpacing >> 24), // vSpacing\n (vSpacing >> 16) & 0xff,\n (vSpacing >> 8) & 0xff,\n vSpacing & 0xff\n ])\n\n buffer.write(\n FMP4.size(size + avc1.byteLength + avcc.byteLength + btrt.byteLength), FMP4.type('avc1'), avc1,\n FMP4.size(8 + avcc.byteLength), FMP4.type('avcC'), avcc,\n FMP4.size(20), FMP4.type('btrt'), btrt,\n FMP4.size(16), FMP4.type('pasp'), pasp\n )\n return buffer.buffer\n }\n static hvc1 (data) {\n const buffer = new Buffer()\n const content = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n (data.width >> 8) & 0xFF,\n data.width & 0xff, // width\n (data.height >> 8) & 0xFF,\n data.height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n 0x00,\n 0x00, 0x00, 0x00, 0x00, // dailymotion/hls.js\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0xFF, 0xFF,\n ]);\n\n buffer.write(\n FMP4.size(8 + content.byteLength + 8 + data.hvcCData.byteLength + 10), FMP4.type('hvc1'), content,\n FMP4.size(8 + data.hvcCData.byteLength), FMP4.type('hvcC'), new Uint8Array(data.hvcCData),\n FMP4.size(10), FMP4.type('fiel'), new Uint8Array([0x01, 0x00])\n )\n return buffer.buffer\n }\n static stts () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n buffer.write(FMP4.size(16), FMP4.type('stts'), content)\n return buffer.buffer\n }\n static stss (stssObj) {\n let buffer = new Buffer()\n let entries = [];\n stssObj.entries.forEach(item => {\n entries.push(item >> 24)\n entries.push((item >> 16) & 0xff)\n entries.push((item >> 8) & 0xff)\n entries.push(item & 0xff)\n })\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n (stssObj.count >> 24), // entry_count\n (stssObj.count >> 16) & 0xff,\n (stssObj.count >> 8) & 0xff,\n stssObj.count & 0xff,\n ].concat(entries))\n buffer.write(FMP4.size(8+8+4*stssObj.count), FMP4.type('stss'), content)\n return buffer.buffer\n }\n static stsc () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n buffer.write(FMP4.size(16), FMP4.type('stsc'), content)\n return buffer.buffer\n }\n static stco () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n buffer.write(FMP4.size(16), FMP4.type('stco'), content)\n return buffer.buffer\n }\n static stsz () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // sample_size\n 0x00, 0x00, 0x00, 0x00 // sample_count\n ])\n buffer.write(FMP4.size(20), FMP4.type('stsz'), content)\n return buffer.buffer\n }\n static mvex (duration, timeScale) {\n let buffer = new Buffer()\n let mehd = Buffer.writeUint32(duration * timeScale)\n buffer.write(FMP4.size(88), FMP4.type('mvex'), FMP4.size(16), FMP4.type('mehd'), FMP4.extension(0, 0), mehd, FMP4.trex1(1), FMP4.trex2(2))\n return buffer.buffer\n }\n static trex (id) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('trex'), content)\n return buffer.buffer\n }\n static trex1 (id) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x02, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x00 // default_sample_flags\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('trex'), content)\n return buffer.buffer\n }\n static trex2 (id) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x04, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x02, 0x00, 0x00, 0x00 // default_sample_flags\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('trex'), content)\n return buffer.buffer\n }\n static moof (data) {\n let buffer = new Buffer(); let size = 8\n let mfhd = FMP4.mfhd(data)\n let traf = FMP4.traf(data);\n [mfhd, traf].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('moof'), mfhd, traf)\n return buffer.buffer\n }\n static mfhd (data) {\n let buffer = new Buffer()\n let content = null;\n if (data.id === 1) {\n content = Buffer.writeUint32((data.fragIndex || 0) + 1)\n }\n else {\n content = Buffer.writeUint32((data.fragIndex || 0) + 1)\n }\n buffer.write(FMP4.size(16), FMP4.type('mfhd'), FMP4.extension(0, 0), content)\n return buffer.buffer\n }\n static traf (data) {\n let buffer = new Buffer(); let size = 8\n let tfhd = FMP4.tfhd(data.id)\n let tfdt = FMP4.tfdt(data, data.time)\n let sdtp = FMP4.sdtp(data)\n let trun = FMP4.trun(data, sdtp.byteLength);\n [tfhd, tfdt, sdtp, trun].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('traf'), tfhd, tfdt, sdtp, trun)\n return buffer.buffer\n }\n static tfhd (id) {\n let buffer = new Buffer()\n let content = Buffer.writeUint32(id)\n buffer.write(FMP4.size(16), FMP4.type('tfhd'), new Uint8Array([\n 0x00, 0x02, 0x00, 0x00\n ]), content)\n return buffer.buffer\n }\n static tfdt (data, time) {\n let buffer = new Buffer()\n let upper = Math.floor(time / (UINT32_MAX + 1))\n let lower = Math.floor(time % (UINT32_MAX + 1))\n buffer.write(FMP4.size(20), FMP4.type('tfdt'), FMP4.extension(1, 0), Buffer.writeUint32(upper), Buffer.writeUint32(lower))\n return buffer.buffer\n }\n static trun (data, sdtpLength) {\n let id = data.id\n let ceil = id === 1 ? 16 : 12\n let buffer = new Buffer()\n let sampleCount = Buffer.writeUint32(data.samples.length)\n // mdat-header 8\n // moof-header 8\n // mfhd 16\n // traf-header 8\n // thhd 16\n // tfdt 20\n // trun-header 12\n // sampleCount 4\n // data-offset 4\n // samples.length\n let offset = Buffer.writeUint32(8 + 8 + 16 + 8 + 16 + 20 + 12 + 4 + 4 + ceil * data.samples.length + sdtpLength)\n buffer.write(FMP4.size(20 + ceil * data.samples.length), FMP4.type('trun'), FMP4.extension(0, data.flags), sampleCount, offset)\n data.samples.forEach((item, idx) => {\n buffer.write(Buffer.writeUint32(item.duration))\n buffer.write(Buffer.writeUint32(item.size))\n if (id === 1) {\n buffer.write(Buffer.writeUint32(item.key ? 0x02000000 : 0x01010000))\n buffer.write(Buffer.writeUint32(item.offset))\n } else {\n buffer.write(Buffer.writeUint32(0x1000000))\n }\n })\n return buffer.buffer\n }\n static sdtp (data) {\n let buffer = new Buffer()\n buffer.write(FMP4.size(12 + data.samples.length), FMP4.type('sdtp'), FMP4.extension(0, 0))\n data.samples.forEach(item => {\n buffer.write(new Uint8Array(data.id === 1 ? [item.key ? 32 : 16] : [16]))\n })\n return buffer.buffer\n }\n static mdat (data) {\n let buffer = new Buffer(); \n let size = 8;\n data.samples.forEach(item => {\n size += item.size\n })\n buffer.write(FMP4.size(size), FMP4.type('mdat'))\n data.samples.forEach(item => {\n buffer.write(item.buffer)\n })\n return buffer.buffer\n }\n}\n\nexport default FMP4","export default function getResponseHeaders(xhr) {\n const headerMap = {};\n if (xhr instanceof window.XMLHttpRequest) {\n try {\n const headers = xhr.getAllResponseHeaders();\n\n const arr = headers.trim().split(/[\\r\\n]+/);\n arr.forEach(function (line) {\n const parts = line.split(': ');\n const header = parts.shift();\n const value = parts.join(': ');\n headerMap[header] = value;\n });\n } catch (error) {\n }\n }\n return headerMap;\n}","let util = {}\n\n/**\n * [使用递归查询指定type的box]\n * var mimeCodec = 'video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"';\n * @param {Object} root [JSON对象]\n * @param {String} type [box的类型]\n * @param {?Array} type [box]\n * @return {Object|Array<Object>|undefined} [box]\n */\nutil.findBox = function (root, type, result = []) {\n if (root.type !== type) {\n if (root && root.subBox) {\n let box = root.subBox.filter(item => item.type === type)\n if (box.length) {\n box.forEach(item => result.push(item))\n } else {\n root.subBox.forEach(item => util.findBox(item, type, result))\n }\n }\n } else {\n result.push(root)\n }\n result = [].concat(result)\n return result.length > 1 ? result : result[0]\n}\n\nutil.padStart = function (str, length, pad) {\n let charstr = String(pad); let len = length >> 0; let maxlen = Math.ceil(len / charstr.length)\n let chars = []; let r = String(str)\n while (maxlen--) {\n chars.push(charstr)\n }\n return chars.join('').substring(0, len - r.length) + r\n}\n\n/**\n * [十进制转十六进制]\n * @param {Number} value [要转换的十进制数字]\n * @return {String} [十六进制]\n */\nutil.toHex = function (...value) {\n let hex = []\n value.forEach(item => {\n hex.push(util.padStart(Number(item).toString(16), 2, 0))\n })\n return hex\n}\n\n/**\n * [求和计算]\n * @param {[type]} rst [description]\n * @return {[type]} [description]\n */\nutil.sum = function (...rst) {\n let count = 0\n rst.forEach(item => { count += item })\n return count\n}\n\n/**\n * [计算音视频数据在Mdat中的偏移量]\n * @param {Array} stsc [块偏移量]\n * @param {Number} sample_order [帧次序]\n * @return {Object} [块的位置和当前帧的偏移数]\n */\nutil.stscOffset = function (stsc, sample_order, stscObj) {\n let chunk_index; let samples_offset = ''\n // let chunk_start = stsc.entries.filter((item) => {\n // return item.first_sample <= sample_order && sample_order < item.first_sample + item.chunk_count * item.samples_per_chunk\n // })[0]\n let chunk_start = stscObj[sample_order];\n if (!chunk_start) {\n let last_chunk = stsc.entries.pop()\n stsc.entries.push(last_chunk)\n let chunk_offset = Math.floor((sample_order - last_chunk.first_sample) / last_chunk.samples_per_chunk)\n let last_chunk_index = last_chunk.first_chunk + chunk_offset\n let last_chunk_first_sample = last_chunk.first_sample + last_chunk.samples_per_chunk * chunk_offset\n return {\n chunk_index: last_chunk_index,\n samples_offset: [last_chunk_first_sample, sample_order]\n }\n } else {\n let chunk_offset = Math.floor((sample_order - chunk_start.first_sample) / chunk_start.samples_per_chunk)\n let chunk_offset_sample = chunk_start.first_sample + chunk_offset * chunk_start.samples_per_chunk\n chunk_index = chunk_start.first_chunk + chunk_offset\n samples_offset = [chunk_offset_sample, sample_order]\n return {\n chunk_index: chunk_index,\n samples_offset\n }\n }\n}\n\nutil.seekSampleOffset = function (stsc, stco, stsz, order, mdatStart, stscObj) {\n let chunkOffset = util.stscOffset(stsc, order + 1, stscObj)\n let sum = util.sum.apply(null, stsz.entries.slice(chunkOffset.samples_offset[0] - 1, chunkOffset.samples_offset[1] - 1))\n let ss = stco.entries[chunkOffset.chunk_index - 1]\n let result = ss + sum - mdatStart\n if (result === undefined) {\n throw `result=${result},stco.length=${stco.entries.length},sum=${util.sum.apply(null, stsz.entries.slice(0, order))}`\n } else if (result < 0) {\n throw `result=${result},stco.length=${stco.entries.length},sum=${util.sum.apply(null, stsz.entries.slice(0, order))}`\n }\n return result\n}\n\nutil.seekSampleTime = function (stts, cttsObj, order) {\n let time; let duration; let count = 0; let startTime = 0; let offset = 0\n stts.entry.every(item => {\n duration = item.sampleDuration\n if (order < count + item.sampleCount) {\n time = startTime + (order - count) * item.sampleDuration\n return false\n } else {\n count += item.sampleCount\n startTime += item.sampleCount * duration\n return true\n }\n })\n if (cttsObj) {\n if(cttsObj[order]){\n offset = cttsObj[order]\n }\n }\n if (!time) {\n time = startTime + (order - count) * duration\n }\n return {time, duration, offset}\n}\n\nutil.seekOrderSampleByTime = function (stts, timeScale, time) {\n let startTime = 0; let order = 0; let count = 0; let itemDuration\n stts.every((item, idx) => {\n itemDuration = item.sampleCount * item.sampleDuration / timeScale\n if (time <= startTime + itemDuration) {\n order = count + Math.ceil((time - startTime) * timeScale / item.sampleDuration)\n startTime = startTime + Math.ceil((time - startTime) * timeScale / item.sampleDuration) * item.sampleDuration / timeScale\n return false\n } else {\n startTime += itemDuration\n count += item.sampleCount\n return true\n }\n })\n return {order, startTime}\n}\n\nutil.seekTrakDuration = function (trak, timeScale) {\n let stts = util.findBox(trak, 'stts'); let duration = 0\n stts.entry.forEach(item => {\n duration += item.sampleCount * item.sampleDuration\n })\n return Number(duration / timeScale).toFixed(4)\n}\n\nutil.StringToArrayBuffer = function (str) {\n let arr = new ArrayBuffer(str.length)\n let view = new Uint8Array(arr)\n for (let i = 0; i < str.length; i++) {\n view[i] = str.charCodeAt(i)\n }\n return arr\n}\n/**\n * Convert a hex string to a Uint8Array.\n * @param {string} str\n * @return {!Uint8Array}\n * @export\n */\nutil.fromHex = function (str) {\n let arr = new Uint8Array(str.length / 2)\n for (let i = 0; i < str.length; i += 2) {\n arr[i / 2] = window.parseInt(str.substr(i, 2), 16)\n }\n return arr\n}\nutil.fromCharCode = function (array) {\n let max = 16000\n let ret = ''\n for (let i = 0; i < array.length; i += max) {\n let subArray = array.subarray(i, i + max)\n ret += String.fromCharCode.apply(null, subArray)\n }\n\n return ret\n}\nutil.ArrayBufferToString = function (arr) {\n let str = ''\n let view = new Uint8Array(arr)\n for (let i = 0; i < view.length; i++) {\n str += String.fromCharCode(view[i])\n }\n return str\n}\nutil.Base64ToHex = function (str) {\n let bin = window.atob(str.replace(/-/g, '+').replace(/_/g, '/'))\n let res = ''\n for (let i = 0; i < bin.length; i++) {\n res += ('0' + bin.charCodeAt(i).toString(16)).substr(-2)\n }\n return res\n}\n\n/**\n * Convert a Uint8Array to a base64 string. The output will always use the\n * alternate encoding/alphabet also known as \"base64url\".\n * @param {!Uint8Array} arr\n * @param {boolean=} padding If true, pad the output with equals signs.\n * Defaults to true.\n * @return {string}\n * @export\n */\nutil.toBase64 = function (arr, padding) {\n // btoa expects a \"raw string\" where each character is interpreted as a byte.\n let bytes = util.fromCharCode(arr)\n padding = (padding === undefined) ? true : padding\n let base64 = window.btoa(bytes).replace(/\\+/g, '-').replace(/\\//g, '_')\n return padding ? base64 : base64.replace(/=*$/, '')\n}\n\nutil.toUTF8 = function (str) {\n // http://stackoverflow.com/a/13691499\n // Converts the given string to a URI encoded string. If a character falls\n // in the ASCII range, it is not converted; otherwise it will be converted to\n // a series of URI escape sequences according to UTF-8.\n // Example: 'g#€' -> 'g#%E3%82%AC'\n let encoded = encodeURIComponent(str)\n // Convert each escape sequence individually into a character. Each escape\n // sequence is interpreted as a code-point, so if an escape sequence happens\n // to be part of a multi-byte sequence, each byte will be converted to a\n // single character.\n // Example: 'g#%E3%82%AC' -> '\\x67\\x35\\xe3\\x82\\xac'\n let utf8 = unescape(encoded)\n\n let result = new Uint8Array(utf8.length)\n for (let i = 0; i < utf8.length; ++i) {\n result[i] = utf8.charCodeAt(i)\n }\n return result.buffer\n}\n\nutil.bufferToString = function (value) {\n return (\"0\"+(Number(value).toString(16))).slice(-2).toUpperCase()\n}\nutil.strToBuf = function (str) {\n let buffer = []\n for(let i = 0; i < str.length; i = i + 2) {\n buffer.push(\n parseInt(str[i] + str[i + 1], 16)\n )\n }\n return new Uint8Array(buffer)\n}\nutil.str2hex = function (str) {\n if(str === \"\") {\n return \"\"\n }\n let arr = [];\n for(let i = 0; i < str.length; i++) {\n arr.push(str.charCodeAt(i))\n }\n return arr\n}\nutil.parse = function (a) {\n if (!Array.isArray(a)) {\n let arr = [];\n let value = '';\n for(let i = 0; i < a.length; i++) {\n if (i % 2) {\n value = a[i - 1] + a[ i ]\n arr.push(parseInt(value, 16))\n value = ''\n }\n }\n return arr\n }\n return a.map(item => {return parseInt(item, 16)})\n}\nexport default util\n","import EventEmitter from 'event-emitter'\nimport Errors from '../error'\n\nclass MSE {\n constructor (codecs = 'video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"', mediaType) {\n EventEmitter(this)\n this.codecs = codecs\n this.mediaSource = new window.MediaSource(mediaType)\n this.url = window.URL.createObjectURL(this.mediaSource)\n this.queue = []\n this.updating = false\n this._hasDestroyed = false;\n this._hasEndOfStream = false;\n this._hasEndOfStreamSuccess = false;\n this._onSourceOpen = this._onSourceOpen.bind(this);\n this._onMediaSourceClose = this._onMediaSourceClose.bind(this);\n this._onSourceBufferError = this._onSourceBufferError.bind(this);\n this._onSourceBufferUpdateEnd = this._onSourceBufferUpdateEnd.bind(this);\n this.mediaSource.addEventListener('sourceopen', this._onSourceOpen);\n this.mediaSource.addEventListener('sourceclose', this._onMediaSourceClose);\n }\n\n _onSourceOpen(){\n let self = this;\n self.sourceBuffer = self.mediaSource.addSourceBuffer(self.codecs);\n self.sourceBuffer.addEventListener('error', this._onSourceBufferError);\n self.sourceBuffer.addEventListener('updateend', this._onSourceBufferUpdateEnd);\n self.emit('sourceopen')\n }\n\n _onSourceBufferError(e){\n this.emit('error', new Errors('mse', '', {line: 16, handle: '[MSE] constructor sourceopen', msg: e.message}))\n }\n\n _onSourceBufferUpdateEnd(){\n let self = this;\n self.emit('updateend');\n if(this._hasEndOfStream && !this._hasEndOfStreamSuccess){\n this._endOfStream();\n return;\n }\n let buffer = self.queue.shift()\n if (buffer && self.sourceBuffer && self.sourceBuffer.updating === false && self.state === 'open') {\n self.sourceBuffer.appendBuffer(buffer)\n } else if(buffer) {\n self.queue.unshift(buffer);\n }\n }\n\n _onMediaSourceClose(){\n this.emit('sourceclose')\n }\n\n get state () {\n return this.mediaSource.readyState\n }\n\n get duration () {\n return this.mediaSource.duration\n }\n\n set duration (value) {\n this.mediaSource.duration = value\n }\n\n appendBuffer (buffer) {\n if(!buffer) return;\n \n let sourceBuffer = this.sourceBuffer\n if (sourceBuffer && !sourceBuffer.updating && this.state === 'open') {\n sourceBuffer.appendBuffer(buffer)\n return true\n } else {\n this.queue.push(buffer)\n return false\n }\n }\n\n removeBuffer (start, end) {\n let sourceBuffer = this.sourceBuffer\n if (sourceBuffer && sourceBuffer.updating === false && this.state === 'open') {\n sourceBuffer.remove(start, end)\n }\n }\n\n endOfStream () {\n this._hasEndOfStream = true;\n if (this.mediaSource.readyState === 'open') {\n if(this.sourceBuffer && !this.sourceBuffer.updating){\n this._hasEndOfStreamSuccess = true;\n this._endOfStream();\n }\n \n }\n }\n\n _endOfStream(){\n this.queue = [];\n if(this.mediaSource.readyState === 'open'){\n this.mediaSource.endOfStream()\n }\n }\n\n static isSupported (codecs) {\n return window.MediaSource && window.MediaSource.isTypeSupported(codecs)\n }\n\n destroy(){\n if(this._hasDestroyed){\n return;\n }\n this._hasDestroyed = true;\n window.URL.revokeObjectURL(this.url);\n if(this.mediaSource) {\n this.mediaSource.removeEventListener('sourceclose', this._onMediaSourceClose);\n this.mediaSource.removeEventListener('sourceopen', this._onSourceOpen);\n }\n if(this.sourceBuffer) {\n this.sourceBuffer.removeEventListener('error', this._onSourceBufferError);\n this.sourceBuffer.removeEventListener('updateend', this._onSourceBufferUpdateEnd);\n }\n }\n}\n\nexport default MSE\n","exports.isMSBrowser = function () {\n let ua = window.navigator.userAgent\n let msie = ua.indexOf('MSIE ')\n let trident = ua.indexOf('Trident/')\n return msie > 0 || trident > 0\n}\n\nexports.isMediaSourceSupported = function () {\n const mediaSource = (window.MediaSource = window.MediaSource || window.WebKitMediaSource)\n return mediaSource && typeof mediaSource.isTypeSupported === 'function'\n}\n\nexports.isSupported = function () {\n return exports.isMediaSourceSupported()\n && !exports.isMSBrowser() \n}\n\nexports.isSupportedWithXgmse = function () {\n return !exports.isMSBrowser() \n}\n","\nexport default class ProxyPromise {\n \n constructor() {\n let resolvePromise;\n let rejectPromise;\n\n const promise = new Promise(((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n }));\n\n const publicPromise = promise\n publicPromise.resolve = resolvePromise;\n publicPromise.reject = rejectPromise;\n\n return publicPromise;\n }\n\n\n /** @param {T=} value */\n resolve(value) {}\n\n\n /** @param {*=} reason */\n reject(reason) {}\n};\n","export default class Timer{\n \n constructor(onTick) {\n this.onTick_ = onTick;\n this.cancelPending_ = null;\n }\n\n tickAfter(delayInSeconds, callback = null) {\n \n this.stop();\n let alive = true;\n let timeoutId = null;\n \n this.cancelPending_ = () => {\n window.clearTimeout(timeoutId);\n alive = false;\n };\n \n const onTick = () => {\n if (alive) {\n this.onTick_();\n if(callback){\n callback();\n }\n }\n };\n \n timeoutId = window.setTimeout(onTick, delayInSeconds * 1000);\n \n return this;\n }\n\n tickEvery(seconds){\n this.tickAfter(seconds, ()=>{\n this.tickEvery(seconds);\n })\n }\n\n\n stop() {\n if (this.cancelPending_) {\n this.cancelPending_();\n this.cancelPending_ = null;\n }\n }\n }\n","/***\n * 音视频源数据不对齐或者 关键视频帧存在cts,导致浏览器播不动场景下\n *\n * reference shakaplayer, 借鉴shakaplayer,根据项目逻辑进行改造\n */\n\nimport IntervalTimer from './util/intervalTimer';\nexport default class GapJump {\n \n constructor(player, config) {\n this.player = player;\n this.mediaElem = player.video;\n this.config = config;\n this.timer = new IntervalTimer();\n\n this.prevReadyState = this.mediaElem.readyState;\n this.didFireLargeGap = false;\n this.seekingEventReceived = false;\n this.segmentAppended = false;\n this.onWaitFunc = this._onWaiting.bind(this);\n this.onPlayFunc = this._onPlay.bind(this);\n this.isSafari = /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n if (this.config.useGapJump !== false) {\n this._start();\n }\n\n this.hasPlayed = false;\n }\n _onWaiting() {\n this.onGapJump('_onWaiting');\n }\n\n _onPlay() {\n this.hasPlayed = true;\n }\n\n _start() {\n this.mediaElem.addEventListener('waiting', this.onWaitFunc);\n this.mediaElem.addEventListener('play', this.onPlayFunc);\n //250ms\n this.timer.repeat(() => {\n this.onGapJump('repeat');\n }, 250);\n }\n\n onSegmentAppend() {\n this.segmentAppended = true;\n this.onGapJump('onSegmentAppend');\n }\n \n onSeeking() {\n this.seekingEventReceived = true;\n this.segmentAppended = false;\n this.didFireLargeGap = false;\n }\n \n onGapJump(type) {\n if (this.mediaElem.readyState === HTMLMediaElement.HAVE_NOTHING) {\n return;\n }\n if (this.mediaElem.seeking) {\n if (!this.seekingEventReceived) { return; }\n } else {\n this.seekingEventReceived = false;\n }\n\n if (this.mediaElem.paused && this.mediaElem.currentTime !== 0 && this.hasPlayed) {\n return;\n }\n if (this.mediaElem.readyState !== this.prevReadyState) {\n this.didFireLargeGap = false;\n this.prevReadyState = this.mediaElem.readyState;\n }\n\n const buffered = this.mediaElem.buffered;\n const smallGapLimit = this.config.smallGapLimit || 0.5;\n const gapDetectionThreshold = this.config.gapDetectionThreshold || 0.1;\n const currentTime = this.mediaElem.currentTime;\n const idx = this._getIndex(buffered, currentTime, gapDetectionThreshold);\n if (idx === null) {\n return;\n }\n if (idx === 0 && !this.segmentAppended) {\n return;\n }\n\n const jumpTo = buffered.start(idx) + 0.1;\n const seekEnd = this.mediaElem.duration;\n\n if (jumpTo > seekEnd) {\n return;\n }\n const jumpSize = jumpTo - currentTime;\n const isGapSmall = jumpSize <= smallGapLimit;\n let jumpLargeGap = false;\n if (jumpSize < GapJump.BROWSER_GAP_TOLERANCE) {\n return;\n }\n //对于分片缺失,目前未处理\n if (isGapSmall) {\n if (this.config.disableGapSetPosition !== true) {\n this.mediaElem.currentTime = this.isSafari ? jumpTo + 0.1 : jumpTo;\n }\n this.player && this.player.emit('detectGap');\n }\n\n }\n \n _getIndex(buffered, time, threshold) {\n if (!buffered || !buffered.length) {\n return null;\n }\n if (buffered.length === 1 && buffered.end(0) - buffered.start(0) < 1e-6) {\n return null;\n }\n const bufferedInfo = this._getBuffered(buffered);\n let idx = null;\n for (let i = 0; i < bufferedInfo.length; i++) {\n let item = bufferedInfo[i];\n if (item.start > time && (i === 0 || bufferedInfo[i - 1].end - time <= threshold)) {\n idx = i;\n break;\n }\n }\n return idx;\n }\n \n _getBuffered(b) {\n if (!b) {\n return [];\n }\n const ret = [];\n for (let i = 0; i < b.length; i++) {\n ret.push({\n start: b.start(i),\n end: b.end(i)\n });\n }\n return ret;\n }\n\n destroy() {\n this.mediaElem.removeEventListener('waiting', this.onWaitFunc);\n this.mediaElem.removeEventListener('play', this.onPlayFunc);\n this.timer.clear();\n this.timer = null;\n }\n }\n \n GapJump.BROWSER_GAP_TOLERANCE = 0.001;\n ","// 替代setInterval\nclass IntervalTimer {\n constructor() {\n this.timeID = null;\n this.func = null;\n }\n\n repeat(func, ms) {\n this.timeID = 1;\n this.repeatInterval(func, ms);\n }\n\n repeatInterval(func, ms) {\n if (!this.timeID) return;\n if (this.func === null) {\n this.func = func;\n }\n\n if (this.func !== func) {\n return;\n }\n if (this.timeID) clearTimeout(this.timeID);\n this.timeID = null;\n this.timeID = setTimeout(() => {\n func();\n this.repeatInterval(func, ms);\n }, ms);\n }\n\n clear() {\n clearTimeout(this.timeID);\n this.timeID = null;\n }\n}\n\nexport default IntervalTimer;\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://Mp4Player/webpack/bootstrap","webpack://Mp4Player/./src/parse/box.js","webpack://Mp4Player/./src/parse/stream.js","webpack://Mp4Player/./src/error.js","webpack://Mp4Player/external \"Player\"","webpack://Mp4Player/./node_modules/event-emitter/index.js","webpack://Mp4Player/./node_modules/es5-ext/object/is-value.js","webpack://Mp4Player/./src/parse/date.js","webpack://Mp4Player/./src/parse/box/sps.js","webpack://Mp4Player/./src/constants.js","webpack://Mp4Player/./node_modules/type/value/is.js","webpack://Mp4Player/./node_modules/concat-typed-array/lib/index.js","webpack://Mp4Player/./src/parse/box/golomb.js","webpack://Mp4Player/./src/fmp4/buffer.js","webpack://Mp4Player/./src/media/task.js","webpack://Mp4Player/./src/index.js","webpack://Mp4Player/./src/mp4.js","webpack://Mp4Player/./node_modules/d/index.js","webpack://Mp4Player/./node_modules/type/plain-function/is.js","webpack://Mp4Player/./node_modules/type/function/is.js","webpack://Mp4Player/./node_modules/type/prototype/is.js","webpack://Mp4Player/./node_modules/type/object/is.js","webpack://Mp4Player/./node_modules/es5-ext/object/assign/index.js","webpack://Mp4Player/./node_modules/es5-ext/object/assign/is-implemented.js","webpack://Mp4Player/./node_modules/es5-ext/object/assign/shim.js","webpack://Mp4Player/./node_modules/es5-ext/object/keys/index.js","webpack://Mp4Player/./node_modules/es5-ext/object/keys/is-implemented.js","webpack://Mp4Player/./node_modules/es5-ext/object/keys/shim.js","webpack://Mp4Player/./node_modules/es5-ext/function/noop.js","webpack://Mp4Player/./node_modules/es5-ext/object/valid-value.js","webpack://Mp4Player/./node_modules/es5-ext/object/normalize-options.js","webpack://Mp4Player/./node_modules/es5-ext/string/#/contains/index.js","webpack://Mp4Player/./node_modules/es5-ext/string/#/contains/is-implemented.js","webpack://Mp4Player/./node_modules/es5-ext/string/#/contains/shim.js","webpack://Mp4Player/./node_modules/es5-ext/object/valid-callable.js","webpack://Mp4Player/./src/parse/index.js","webpack://Mp4Player/./node_modules/concat-typed-array/lib/concat.js","webpack://Mp4Player/./src/parse/box/vmhd.js","webpack://Mp4Player/./src/parse/box/url.js","webpack://Mp4Player/./src/parse/box/udta.js","webpack://Mp4Player/./src/parse/box/tkhd.js","webpack://Mp4Player/./src/parse/box/tfhd.js","webpack://Mp4Player/./src/parse/box/stts.js","webpack://Mp4Player/./src/parse/box/stsz.js","webpack://Mp4Player/./src/parse/box/stss.js","webpack://Mp4Player/./src/parse/box/stsd.js","webpack://Mp4Player/./src/parse/box/stsc.js","webpack://Mp4Player/./src/parse/box/stco.js","webpack://Mp4Player/./src/parse/box/smhd.js","webpack://Mp4Player/./src/parse/box/SLConfigDescriptor.js","webpack://Mp4Player/./src/parse/box/schm.js","webpack://Mp4Player/./src/parse/box/pasp.js","webpack://Mp4Player/./src/parse/box/mvhd.js","webpack://Mp4Player/./src/parse/box/MP4ESDescrTag.js","webpack://Mp4Player/./src/parse/box/MP4DecSpecificDescrTag.js","webpack://Mp4Player/./src/parse/box/MP4DecConfigDescrTag.js","webpack://Mp4Player/./src/parse/box/mp4a.js","webpack://Mp4Player/./src/parse/box/mdhd.js","webpack://Mp4Player/./src/parse/box/mdat.js","webpack://Mp4Player/./src/parse/box/iods.js","webpack://Mp4Player/./src/parse/box/hvcC.js","webpack://Mp4Player/./src/parse/box/hvc1.js","webpack://Mp4Player/./src/parse/box/hdlr.js","webpack://Mp4Player/./src/parse/box/ftyp.js","webpack://Mp4Player/./src/parse/box/frma.js","webpack://Mp4Player/./src/parse/box/esds.js","webpack://Mp4Player/./src/parse/box/elst.js","webpack://Mp4Player/./src/parse/box/dref.js","webpack://Mp4Player/./src/parse/box/ctts.js","webpack://Mp4Player/./src/parse/box/co64.js","webpack://Mp4Player/./src/parse/box/btrt.js","webpack://Mp4Player/./src/parse/box/avcC.js","webpack://Mp4Player/./src/parse/box/avc1.js","webpack://Mp4Player/./src/fmp4/mp4.js","webpack://Mp4Player/./src/util/getHeaders.js","webpack://Mp4Player/./src/util/index.js","webpack://Mp4Player/./src/media/mse.js","webpack://Mp4Player/./src/util/isSupport.js","webpack://Mp4Player/./src/util/proxyPromise.js","webpack://Mp4Player/./src/util/timer.js","webpack://Mp4Player/./src/gap_jump.js","webpack://Mp4Player/./src/util/intervalTimer.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","Box","this","headSize","size","type","subBox","start","stream","position","readUint32","String","fromCharCode","readUint8","readUint64","Errors","line","handle","msg","uuid","push","version","flags","end","parser","data","buffer","slice","byteLength","containerBox","find","item","containerParser","Function","readHeader","readBody","Stream","box","ArrayBuffer","dataview","DataView","count","loop","Math","floor","last","readByte","sign","res","getInt8","getUint8","getInt16","getUint16","getInt32","getUint32","_Errors","vid","errd","url","Player","window","require","callable","apply","defineProperties","descriptor","configurable","writable","on","listener","__ee__","once","self","off","arguments","__eeOnceListener__","listeners","candidate","length","splice","emit","args","Array","methods","descriptors","base","_undefined","val","UTC","time","Date","setFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setTime","getTime","toLocaleString","SPSParser","uint8array","src","srcLength","dst","Uint8Array","dstIdx","rbsp","_ebsp2rbsp","gb","Golomb","profileIdc","levelIdc","profile_string","readUEG","getProfileString","level_string","getLevelString","chroma_format_idc","chroma_format","bit_depth","readBits","readBool","scaling_list_count","_skipScalingList","pic_order_cnt_type","readSEG","num_ref_frames_in_pic_order_cnt_cycle","pic_width_in_mbs_minus1","pic_height_in_map_units_minus1","frame_mbs_only_flag","frame_crop_left_offset","frame_crop_right_offset","frame_crop_top_offset","frame_crop_bottom_offset","par_width","par_height","fps","fps_fixed","fps_num","fps_den","parScale","aspect_ratio_idc","num_units_in_tick","time_scale","crop_unit_x","crop_unit_y","codec_width","codec_height","present_width","ceil","destroy","chroma_format_string","getChromaFormatString","frame_rate","fixed","par_ratio","width","height","codec_size","present_size","last_scale","next_scale","toFixed","chroma","spsConfig","meta","fpsDen","codecWidth","codecHeight","presentWidth","presentHeight","profile","level","bitDepth","chromaFormat","parRatio","frameRate","fpsNum","refSampleDuration","timescale","CUSTOM_EVENTS","TASK_ERROR","TASK_ERROR_TYPES","ERROR","CODE_ERROR","CANCEL","_concat2","_interopRequireDefault","obj","default","TAG","_buffer","_bufferIndex","_totalBytes","_totalBits","_currentWord","_currentWordBitsLeft","bufferBytesLeft","bytesRead","min","word","set","subarray","bits","valu","Error","_fillCurrentWord","zeroCount","_skipLeadingZero","leadingZeros","Buffer","forEach","console","error","Task","range","xhrSetup","callback","ext","uniqueTag","playerId","queue","some","JSON","stringify","id","join","running","canceled","initialize","xhr","XMLHttpRequest","target","responseType","withCredentials","open","setRequestHeader","onreadystatechange","e","readyState","headers","status","onload","response","MEDIA_EXPIRED","_emitTaskError","remove","onerror","message","onabort","update","abort","code","filter","idx","Queue","sended","wait","max","limit","run","OPENED","send","cancel","DESTROYED","sniffer","isEnded","player","mp4","endTime","currentTime","duration","mse","endOfStream","_stopProgress","Mp4Player","options","hasStartProgress","onlyInit","videoInit","autoplay","_pendingPromises","_allInitPromise","ProxyPromise","_maxBufferLength","maxBufferLength","_playerId","uniqueId","_onBufferedResetFunc","_onBufferedReset","_onSeekingFunc","_onSeeking","_onMp4InitFunc","_onMp4Init","_onWaitingFunc","_onWaiting","_onEndedFunc","_onEnded","_onDestroyFunc","_onDestroy","_replay","_onReplay","_onOnlineHandlerFunc","_onOnlineHandler","_onOfflineHandlerFunc","_onOfflineHandler","_tickInSeconds","tickInSeconds","_hasStartProgress","_hasStartProgressBack","video","addEventListener","BUFFERED_RESET","_bindNetworkStateChange","_initMp4Kernal","gapJumpInst","GapJump","config","util","onSegmentAppend","rule","pluginRule","MSE","isSupported","currentSrc","_init","then","result","proxyOnce","play","proxyOn","_startProgress","_onSuperStart","err","_errorHandle","initPromise","browser","hasClass","root","addClass","removeClass","buffered","_addPendingPromise","resolve","_hasInited","_removePendingPromise","mp5","MP4","preloadSize","timeRage","curTime","getBufferedRange","buffered2","removeBuffer","appendBuffer","packMeta","downloaded","removeEventListener","promise","_initMp4","isHvc","videoCodec","indexOf","encv","data_format","hasVideo","hasAudio","audioCodec","codec","mediaType","initSeg","_loadData","reject","_initMse","navigator","onLine","seek","updating","setTimeout","cacheMaxTime","canDownload","every","_onInnerWait","_unbindNetworkStateChange","clear","unloadVideo","cancelPendingPromises","errt","errorType","bufferCache","_currentTime","_start","switchURL","iplayer","_onCheckLoad","hasBuffered","len","mp4Init","pause","_requestTimer","stop","Timer","_onTimeUpdate","tickEvery","removeAttribute","load","reason","INIT_FAIL","PARSE_ERROR","isSupportedWithXgmse","isMediaSourceSupported","chunkSize","pow","CHUNK_SIZE","init","moovParse","Promise","task","hasDestroyed","onMediaExpired","params","videoDuration","audioDuration","vf","videoKeyFramesLength","moov","moovBox","mvhd","findBox","traks","videoTrak","audioTrak","videoTimeScale","audioTimeScale","sps","pps","vps","channelCount","sampleRate","decoderConfig","hvc1Data","hvcCData","pixelRatio","isArray","trak","codecBox","esds","mp4a","ESDescriptor","hdlr","mdhd","handleType","hvcC","avcC","tkhd","toHex","profileCompatibility","AVCLevelIndication","sequence","spsInfo","map","Number","hvc1","profileCompatibilityIndications","typeID","EScode","mdat","_boxes","seekTrakDuration","mdatStart","videoKeyFrames","timeScale","createTime","modifyTime","audioConfig","stss","_stssObj","getData","parsed","moovStart","boxes","Parser","nextBox","concat","catch","stsc","stsz","stts","stco","cttsObj","_cttsObj","stscObj","_stscVideoObj","_stscAudioObj","samples","undefined","entries","seekSampleTime","offset","seekSampleOffset","write","FMP4","ftyp","fragIndex","getFragmentIdx","getFragRange","audioFrames","timeStart","round","videoFrames","nowTime","nextTime","MAX_SAFE_INTEGER","audioKeyFrames","startTime","loadFragment","audioNextFrame","audioFrame","getSamplesByOrders","order","isNaN","dat","createFragment","buf","moof","mdatData","framesIndex","_samples","addFragment","firstFlags","sampleOffset","resBuffers","promises","getVideoBuffer","getAudioBuffer","all","buffers","bufferSize","k","_videoFrames","ctts","entry","j","sampleCount","chunk_count","samples_per_chunk","frames","_audioFrames","videoScale","audioScale","audioStts","audioIndex","seekOrderSampleByTime","isValue","isPlainFunction","assign","normalizeOpts","contains","dscr","w","desc","gs","isFunction","classRe","functionToString","toString","test","isPrototype","isObject","constructor","possibleTypes","foo","bar","trzy","keys","dest","TypeError","process","opts1","str","searchString","fn","bufferLength","ResultConstructor","totalLength","_len","arrays","_key","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","iterator","next","done","return","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","_arr","vmhd","flag","graphicsmode","readUint16","opcolor","location","udta","matrix","modify","trackID","reserverd","layer","readInt16","alternate_group","volume","tfhd","baseDataOffsetPresent","track_id","sampleDescriptionIndexPresent","defaultSampleDurationPresent","defaultSampleSizePresent","defaultSampleFlagsPresent","baseDataOffset","sampleDescriptionIndex","defaultSampleDuration","defaultSampleSize","defaultSampleFlags","sampleDuration","sampleSize","stsd","entryCount","first_chunk","sample_desc_index","preEntry","pre","first_sample","smhd","balance","readInt8","SLConfigDescriptor","extend","skip","SL","schm","scheme_version","scheme_type","scheme_uri","hdr_size","pasp","hSpacing","vSpacing","rate","nextTrackID","MP4ESDescrTag","esID","priority","MP4DecConfigDescrTag","MP4DecSpecificDescrTag","dataSize","padStart","streamUint","maximum","average","dataReferenceIndex","language","iods","content","configVersion","constraintIndicatorFlags","bitDepthLumaMinus8","bitDepthChromaMinus8","avgFrameRate","constantFrameRate","numOfArrays","vpsHeader","readUint24","vpsLength","spsHeader","spsLength","ppsHeader","ppsLength","dataviewLength","horizresolution","vertresolution","frameCount","depth","compatibleBrands","major_brand","minor_version","compatible_brands","frma","elst","entry_count","segment_duration","media_time","readInt32","media_rate_integer","media_rate_fraction","dref","read","co64","btrt","bufferSizeDB","maxBitrate","avgBitrate","sequenceLength","lengthSizeMinusOne","numOfSequenceParameterSets","SpsParser","parseSPS","ppsCount","avc1","UINT32_MAX","charCodeAt","writeUint32","mvex","trak1","trak2","bytes","mdia","mediaTime","minf","extension","dinf","stbl","configlen","avcc","stssObj","mehd","trex1","trex2","mfhd","traf","tfdt","sdtp","trun","upper","lower","sdtpLength","getResponseHeaders","headerMap","getAllResponseHeaders","trim","split","parts","header","shift","pad","charstr","maxlen","chars","substring","hex","rst","sample_order","chunk_offset_sample","chunk_offset","chunk_start","chunk_index","samples_offset","last_chunk","pop","chunkOffset","stscOffset","sum","itemDuration","arr","view","parseInt","substr","array","ret","subArray","bin","atob","replace","padding","base64","btoa","encoded","encodeURIComponent","utf8","unescape","toUpperCase","a","codecs","mediaSource","MediaSource","URL","createObjectURL","_hasDestroyed","_hasEndOfStream","_hasEndOfStreamSuccess","_onSourceOpen","_onMediaSourceClose","_onSourceBufferError","_onSourceBufferUpdateEnd","sourceBuffer","addSourceBuffer","_endOfStream","state","unshift","revokeObjectURL","isTypeSupported","isMSBrowser","ua","userAgent","msie","trident","WebKitMediaSource","resolvePromise","rejectPromise","publicPromise","onTick","onTick_","cancelPending_","delayInSeconds","alive","timeoutId","clearTimeout","seconds","tickAfter","mediaElem","timer","IntervalTimer","prevReadyState","didFireLargeGap","seekingEventReceived","segmentAppended","onWaitFunc","onPlayFunc","_onPlay","isSafari","platform","useGapJump","hasPlayed","onGapJump","repeat","HTMLMediaElement","HAVE_NOTHING","seeking","smallGapLimit","jumpTo","jumpSize","paused","gapDetectionThreshold","_getIndex","BROWSER_GAP_TOLERANCE","disableGapSetPosition","threshold","bufferedInfo","_getBuffered","b","timeID","func","ms","repeatInterval"],"mappings":"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","file":"index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 14);\n","import Stream from './stream'\nimport Errors from '../error'\nclass Box {\n constructor () {\n this.headSize = 8\n this.size = 0\n this.type = ''\n this.subBox = []\n this.start = -1\n }\n readHeader (stream) {\n this.start = stream.position\n this.size = stream.readUint32()\n this.type = String.fromCharCode(stream.readUint8(), stream.readUint8(), stream.readUint8(), stream.readUint8())\n if (this.size === 1) {\n this.size = stream.readUint64()\n } else if (this.size === 0) {\n if (this.type !== 'mdat') {\n throw new Errors('parse', '', {line: 19, handle: '[Box] readHeader', msg: 'parse mp4 mdat box failed'})\n }\n }\n if (this.type === 'uuid') {\n let uuid = []\n for (let i = 0; i < 16; i++) {\n uuid.push(stream.readUint8())\n }\n }\n if (this.type === 'pssh') {\n this.version = stream.readUint8();\n this.flags = stream.readUint8();\n }\n }\n readBody (stream) {\n let end = this.size - stream.position + this.start\n let type = this.type\n this.data = stream.buffer.slice(stream.position, stream.position + end)\n stream.position += this.data.byteLength\n let parser\n if (Box.containerBox.find(item => item === type)) {\n parser = Box.containerParser\n } else {\n parser = Box[type]\n }\n if (parser && parser instanceof Function) {\n parser.call(this)\n }\n }\n read (stream) {\n this.readHeader(stream)\n this.readBody(stream)\n }\n\n static containerParser () {\n let stream = new Stream(this.data)\n let size = stream.buffer.byteLength\n let self = this\n while (stream.position < size) {\n let box = new Box()\n box.readHeader(stream)\n self.subBox.push(box)\n box.readBody(stream)\n }\n delete self.data\n stream = null\n }\n}\n\nBox.containerBox = ['moov', 'trak', 'edts', 'mdia', 'minf', 'dinf', 'stbl', 'mvex', 'moof', 'traf', 'mfra', 'sinf', 'schi']\n\nexport default Box\n","import Errors from '../error'\nclass Stream {\n constructor (buffer) {\n if (buffer instanceof ArrayBuffer) {\n this.buffer = buffer\n this.dataview = new DataView(buffer)\n this.dataview.position = 0\n } else {\n throw new Errors('parse', '', {line: 9, handle: '[Stream] constructor', msg: 'data is valid'})\n }\n }\n\n set position (value) {\n this.dataview.position = value\n }\n\n get position () {\n return this.dataview.position\n }\n\n skip (count) {\n let loop = Math.floor(count / 4)\n let last = count % 4\n for (let i = 0; i < loop; i++) {\n Stream.readByte(this.dataview, 4)\n }\n if (last > 0) {\n Stream.readByte(this.dataview, last)\n }\n }\n\n /**\n * [readByte 从DataView中读取数据]\n * @param {DataView} buffer [DataView实例]\n * @param {Number} size [读取字节数]\n * @return {Number} [整数]\n */\n static readByte (buffer, size, sign) {\n let res\n switch (size) {\n case 1:\n if (sign) {\n res = buffer.getInt8(buffer.position)\n } else {\n res = buffer.getUint8(buffer.position)\n }\n break\n case 2:\n if (sign) {\n res = buffer.getInt16(buffer.position)\n } else {\n res = buffer.getUint16(buffer.position)\n }\n break\n case 3:\n if (sign) {\n throw 'not supported for readByte 3'\n } else {\n res = buffer.getUint8(buffer.position) << 16\n res |= buffer.getUint8(buffer.position + 1) << 8\n res |= buffer.getUint8(buffer.position + 2)\n }\n break\n case 4:\n if (sign) {\n res = buffer.getInt32(buffer.position)\n } else {\n res = buffer.getUint32(buffer.position)\n }\n break\n case 8:\n if (sign) {\n throw new Errors('parse', '', {line: 73, handle: '[Stream] readByte', msg: 'not supported for readBody 8'})\n } else {\n res = buffer.getUint32(buffer.position) << 32\n res |= buffer.getUint32(buffer.position + 4)\n }\n break\n default:\n res = ''\n }\n buffer.position += size\n return res\n }\n\n readUint8 () {\n return Stream.readByte(this.dataview, 1)\n }\n\n readUint16 () {\n return Stream.readByte(this.dataview, 2)\n }\n \n readUint24 () {\n return Stream.readByte(this.dataview, 3)\n }\n\n readUint32 () {\n return Stream.readByte(this.dataview, 4)\n }\n\n readUint64 () {\n return Stream.readByte(this.dataview, 8)\n }\n\n readInt8 () {\n return Stream.readByte(this.dataview, 1, true)\n }\n readInt16 () {\n return Stream.readByte(this.dataview, 2, true)\n }\n readInt32 () {\n return Stream.readByte(this.dataview, 4, true)\n }\n}\n\nexport default Stream\n","import Player from 'xgplayer'\nimport { version } from '../version.json'\n\nclass _Errors extends Player.Errors {\n constructor (type, vid, errd = {}, url = '') {\n errd.version = version\n super(type, vid, errd)\n this.url = url\n }\n}\n\nexport default _Errors\n","(function() { module.exports = window[\"Player\"]; }());","'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\nvar _undefined = require(\"../function/noop\")(); // Support ES3 engines\n\nmodule.exports = function (val) { return val !== _undefined && val !== null; };\n","class UTC {\n constructor () {\n let time = new Date()\n time.setFullYear(1904)\n time.setMonth(0)\n time.setDate(1)\n time.setHours(0)\n time.setMinutes(0)\n time.setSeconds(0)\n this.time = time\n }\n setTime (value) {\n this.time.setTime(this.time.getTime() + value * 1)\n return this.time.toLocaleString()\n }\n}\n\nexport default UTC\n","/* eslint-disable camelcase */\n/* eslint-disable one-var */\nimport Golomb from './golomb'\n\nclass SPSParser {\n static _ebsp2rbsp (uint8array) {\n let src = uint8array\n let srcLength = src.byteLength\n let dst = new Uint8Array(srcLength)\n let dstIdx = 0\n\n for (let i = 0; i < srcLength; i++) {\n if (i >= 2) {\n if (src[i] === 0x03 && src[i - 1] === 0x00 && src[i - 2] === 0x00) {\n continue\n }\n }\n dst[dstIdx] = src[i]\n dstIdx++\n }\n\n return new Uint8Array(dst.buffer, 0, dstIdx)\n }\n\n static parseSPS (uint8array) {\n let rbsp = SPSParser._ebsp2rbsp(uint8array)\n let gb = new Golomb(rbsp)\n\n gb.readByte()\n let profileIdc = gb.readByte()\n gb.readByte()\n let levelIdc = gb.readByte()\n gb.readUEG()\n\n let profile_string = SPSParser.getProfileString(profileIdc)\n let level_string = SPSParser.getLevelString(levelIdc)\n let chroma_format_idc = 1\n let chroma_format = 420\n let chroma_format_table = [0, 420, 422, 444]\n let bit_depth = 8\n\n if (profileIdc === 100 || profileIdc === 110 || profileIdc === 122 ||\n profileIdc === 244 || profileIdc === 44 || profileIdc === 83 ||\n profileIdc === 86 || profileIdc === 118 || profileIdc === 128 ||\n profileIdc === 138 || profileIdc === 144) {\n chroma_format_idc = gb.readUEG()\n if (chroma_format_idc === 3) {\n gb.readBits(1)\n }\n if (chroma_format_idc <= 3) {\n chroma_format = chroma_format_table[chroma_format_idc]\n }\n\n bit_depth = gb.readUEG() + 8\n gb.readUEG()\n gb.readBits(1)\n if (gb.readBool()) {\n let scaling_list_count = (chroma_format_idc !== 3) ? 8 : 12\n for (let i = 0; i < scaling_list_count; i++) {\n if (gb.readBool()) {\n if (i < 6) {\n SPSParser._skipScalingList(gb, 16)\n } else {\n SPSParser._skipScalingList(gb, 64)\n }\n }\n }\n }\n }\n gb.readUEG()\n let pic_order_cnt_type = gb.readUEG()\n if (pic_order_cnt_type === 0) {\n gb.readUEG()\n } else if (pic_order_cnt_type === 1) {\n gb.readBits(1)\n gb.readSEG()\n gb.readSEG()\n let num_ref_frames_in_pic_order_cnt_cycle = gb.readUEG()\n for (let i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++) {\n gb.readSEG()\n }\n }\n gb.readUEG()\n gb.readBits(1)\n\n let pic_width_in_mbs_minus1 = gb.readUEG()\n let pic_height_in_map_units_minus1 = gb.readUEG()\n\n let frame_mbs_only_flag = gb.readBits(1)\n if (frame_mbs_only_flag === 0) {\n gb.readBits(1)\n }\n gb.readBits(1)\n\n let frame_crop_left_offset = 0\n let frame_crop_right_offset = 0\n let frame_crop_top_offset = 0\n let frame_crop_bottom_offset = 0\n\n let frame_cropping_flag = gb.readBool()\n if (frame_cropping_flag) {\n frame_crop_left_offset = gb.readUEG()\n frame_crop_right_offset = gb.readUEG()\n frame_crop_top_offset = gb.readUEG()\n frame_crop_bottom_offset = gb.readUEG()\n }\n\n let par_width = 1, par_height = 1\n let fps = 0, fps_fixed = true, fps_num = 0, fps_den = 0\n\n let vui_parameters_present_flag = gb.readBool()\n if (vui_parameters_present_flag) {\n if (gb.readBool()) { // aspect_ratio_info_present_flag\n let aspect_ratio_idc = gb.readByte()\n let par_w_table = [1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2]\n let par_h_table = [1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1]\n\n if (aspect_ratio_idc > 0 && aspect_ratio_idc < 16) {\n par_width = par_w_table[aspect_ratio_idc - 1]\n par_height = par_h_table[aspect_ratio_idc - 1]\n } else if (aspect_ratio_idc === 255) {\n par_width = gb.readByte() << 8 | gb.readByte()\n par_height = gb.readByte() << 8 | gb.readByte()\n }\n }\n\n if (gb.readBool()) {\n gb.readBool()\n }\n if (gb.readBool()) {\n gb.readBits(4)\n if (gb.readBool()) {\n gb.readBits(24)\n }\n }\n if (gb.readBool()) {\n gb.readUEG()\n gb.readUEG()\n }\n if (gb.readBool()) {\n let num_units_in_tick = gb.readBits(32)\n let time_scale = gb.readBits(32)\n fps_fixed = gb.readBool()\n\n fps_num = time_scale\n fps_den = num_units_in_tick * 2\n fps = fps_num / fps_den\n }\n }\n\n let parScale = 1\n if (par_width !== 1 || par_height !== 1) {\n parScale = par_width / par_height\n }\n\n let crop_unit_x = 0, crop_unit_y = 0\n if (chroma_format_idc === 0) {\n crop_unit_x = 1\n crop_unit_y = 2 - frame_mbs_only_flag\n } else {\n let sub_wc = (chroma_format_idc === 3) ? 1 : 2\n let sub_hc = (chroma_format_idc === 1) ? 2 : 1\n crop_unit_x = sub_wc\n crop_unit_y = sub_hc * (2 - frame_mbs_only_flag)\n }\n\n let codec_width = (pic_width_in_mbs_minus1 + 1) * 16\n let codec_height = (2 - frame_mbs_only_flag) * ((pic_height_in_map_units_minus1 + 1) * 16)\n\n codec_width -= (frame_crop_left_offset + frame_crop_right_offset) * crop_unit_x\n codec_height -= (frame_crop_top_offset + frame_crop_bottom_offset) * crop_unit_y\n\n let present_width = Math.ceil(codec_width * parScale)\n\n gb.destroy()\n gb = null\n\n return {\n profile_string: profile_string,\n level_string: level_string,\n bit_depth: bit_depth,\n chroma_format: chroma_format,\n chroma_format_string: SPSParser.getChromaFormatString(chroma_format),\n\n frame_rate: {\n fixed: fps_fixed,\n fps: fps,\n fps_den: fps_den,\n fps_num: fps_num\n },\n\n par_ratio: {\n width: par_width,\n height: par_height\n },\n\n codec_size: {\n width: codec_width,\n height: codec_height\n },\n\n present_size: {\n width: present_width,\n height: codec_height\n }\n }\n }\n\n static _skipScalingList (gb, count) {\n let last_scale = 8, next_scale = 8\n let delta_scale = 0\n for (let i = 0; i < count; i++) {\n if (next_scale !== 0) {\n delta_scale = gb.readSEG()\n next_scale = (last_scale + delta_scale + 256) % 256\n }\n last_scale = (next_scale === 0) ? last_scale : next_scale\n }\n }\n\n static getProfileString (profileIdc) {\n switch (profileIdc) {\n case 66:\n return 'Baseline'\n case 77:\n return 'Main'\n case 88:\n return 'Extended'\n case 100:\n return 'High'\n case 110:\n return 'High10'\n case 122:\n return 'High422'\n case 244:\n return 'High444'\n default:\n return 'Unknown'\n }\n }\n\n static getLevelString (levelIdc) {\n return (levelIdc / 10).toFixed(1)\n }\n\n static getChromaFormatString (chroma) {\n switch (chroma) {\n case 420:\n return '4:2:0'\n case 422:\n return '4:2:2'\n case 444:\n return '4:4:4'\n default:\n return 'Unknown'\n }\n }\n\n static toVideoMeta (spsConfig) {\n let meta = {}\n if (spsConfig && spsConfig.codec_size) {\n meta.codecWidth = spsConfig.codec_size.width\n meta.codecHeight = spsConfig.codec_size.height\n meta.presentWidth = spsConfig.present_size.width\n meta.presentHeight = spsConfig.present_size.height\n }\n\n meta.profile = spsConfig.profile_string\n meta.level = spsConfig.level_string\n meta.bitDepth = spsConfig.bit_depth\n meta.chromaFormat = spsConfig.chroma_format\n\n meta.parRatio = {\n width: spsConfig.par_ratio.width,\n height: spsConfig.par_ratio.height\n }\n\n meta.frameRate = spsConfig.frame_rate\n\n let fpsDen = meta.frameRate.fps_den\n let fpsNum = meta.frameRate.fps_num\n meta.refSampleDuration = Math.floor(meta.timescale * (fpsDen / fpsNum))\n }\n}\n\nexport default SPSParser\n","export const CUSTOM_EVENTS = {\n \"MEDIA_EXPIRED\":'MEDIA_EXPIRED',\n \"INIT_FAIL\":\"INIT_FAIL\",\n \"PARSE_ERROR\":\"PARSE_ERROR\",\n \"BUFFERED_RESET\": \"BUFFERED_RESET\"\n}\n\nexport const TASK_ERROR = 'TASK_ERROR';\n\nexport const TASK_ERROR_TYPES = {\n ERROR:\"ERROR\",\n CODE_ERROR:\"CODE_ERROR\",\n CANCEL:\"CANCEL\",\n}\n","\"use strict\";\n\n// ES3 safe\nvar _undefined = void 0;\n\nmodule.exports = function (value) { return value !== _undefined && value !== null; };\n","'use strict';\n\nvar _concat = require('./concat');\n\nvar _concat2 = _interopRequireDefault(_concat);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = _concat2.default;","class Golomb {\n constructor (uint8array) {\n this.TAG = 'Golomb'\n this._buffer = uint8array\n this._bufferIndex = 0\n this._totalBytes = uint8array.byteLength\n this._totalBits = uint8array.byteLength * 8\n this._currentWord = 0\n this._currentWordBitsLeft = 0\n }\n\n destroy () {\n this._buffer = null\n }\n\n _fillCurrentWord () {\n let bufferBytesLeft = this._totalBytes - this._bufferIndex\n if (bufferBytesLeft <= 0) {\n // TODO 异常处理\n }\n\n let bytesRead = Math.min(4, bufferBytesLeft)\n let word = new Uint8Array(4)\n word.set(this._buffer.subarray(this._bufferIndex, this._bufferIndex + bytesRead))\n this._currentWord = new DataView(word.buffer).getUint32(0)\n\n this._bufferIndex += bytesRead\n this._currentWordBitsLeft = bytesRead * 8\n }\n\n readBits (size) {\n let bits = Math.min(this._currentWordBitsLeft, size);// :uint\n let valu = this._currentWord >>> (32 - bits);\n if (size > 32) {\n throw new Error('Cannot read more than 32 bits at a time');\n }\n this._currentWordBitsLeft -= bits;\n if (this._currentWordBitsLeft > 0) {\n this._currentWord <<= bits;\n } else if (this._totalBytes - this._bufferIndex > 0) {\n this._fillCurrentWord();\n }\n\n bits = size - bits;\n if (bits > 0 && this._currentWordBitsLeft) {\n return valu << bits | this.readBits(bits);\n } else {\n return valu;\n }\n }\n\n readBool () {\n return this.readBits(1) === 1\n }\n\n readByte () {\n return this.readBits(8)\n }\n\n _skipLeadingZero () {\n let zeroCount\n for (zeroCount = 0; zeroCount < this._currentWordBitsLeft; zeroCount++) {\n if ((this._currentWord & (0x80000000 >>> zeroCount)) !== 0) {\n this._currentWord <<= zeroCount\n this._currentWordBitsLeft -= zeroCount\n return zeroCount\n }\n }\n this._fillCurrentWord()\n return zeroCount + this._skipLeadingZero()\n }\n\n readUEG () { // unsigned exponential golomb\n let leadingZeros = this._skipLeadingZero()\n return this.readBits(leadingZeros + 1) - 1\n }\n\n readSEG () { // signed exponential golomb\n let value = this.readUEG()\n if (value & 0x01) {\n return (value + 1) >>> 1\n } else {\n return -1 * (value >>> 1)\n }\n }\n}\n\nexport default Golomb\n","import Concat from 'concat-typed-array'\n\nclass Buffer {\n constructor () {\n this.buffer = new Uint8Array(0)\n }\n write (...buffer) {\n let self = this\n buffer.forEach(item => {\n if (item) {\n self.buffer = Concat(Uint8Array, self.buffer, item)\n } else {\n window.console.error(item)\n }\n })\n }\n static writeUint16 (value) {\n return new Uint8Array([\n (value >> 8) & 0xff,\n value & 0xff\n ])\n }\n static writeUint32 (value) {\n return new Uint8Array([\n value >> 24,\n (value >> 16) & 0xff,\n (value >> 8) & 0xff,\n value & 0xff\n ])\n }\n}\n\nexport default Buffer\n","import EventEmitter from 'event-emitter'\nimport Errors from '../error'\nimport {CUSTOM_EVENTS, TASK_ERROR, TASK_ERROR_TYPES} from '../constants'\nimport getResponseHeaders from '../util/getHeaders';\n\nclass Task {\n constructor (url, range, xhrSetup, callback, ext = {}) {\n EventEmitter(this)\n window.Task = Task\n this.url = url\n this.range = range\n ext.start = range[0]\n ext.end = range[1]\n this.uniqueTag = `${this.url}&range=${range[0]}-${range[1]}`\n this.playerId = ext.playerId;\n //处理重复分片请求,只拦截同一播放器的相同请求\n if (Task.queue.some(item => item.url === url && JSON.stringify(item.range) === JSON.stringify(range) && item.playerId === ext.playerId)) {\n // console.log('task repeat playerid', ext.playerId)\n return;\n }\n this.xhrSetup = xhrSetup\n this.id = this.playerId + range.join('-')\n this.running = false\n this.canceled = false\n this.initialize(url, range, callback);\n }\n initialize(url, range, callback) {\n let xhr = new window.XMLHttpRequest()\n xhr.target = this\n xhr.responseType = 'arraybuffer'\n xhr.withCredentials = this.withCredentials || false\n xhr.open('get', url)\n if(typeof this.xhrSetup === 'function') {\n this.xhrSetup(xhr, url)\n }\n xhr.setRequestHeader('Range', `bytes=${range[0]}-${range[1]}`)\n let self = this;\n xhr.onreadystatechange = function (e) {\n // HEADERS_RECEIVED\n if (xhr.readyState === 2) {\n self.headers = getResponseHeaders(xhr);\n // self.emit('getHeaders', self.headers);\n self.status = xhr.status;\n // self.startDownloadTime = nowTime();\n }\n // OPENED\n if (xhr.readyState === 1) {\n // self.lastTime = nowTime();\n }\n };\n xhr.onload = function () {\n if (xhr.status === 200 || xhr.status === 206) {\n if (callback && callback instanceof Function) {\n callback(xhr.response)\n }\n } else{\n if(xhr.status === 403){\n self.emit(CUSTOM_EVENTS.MEDIA_EXPIRED);\n }else{\n self._emitTaskError(TASK_ERROR_TYPES.CODE_ERROR);\n }\n }\n xhr.target.remove()\n }\n xhr.onerror = function (e) {\n xhr.target.emit('error', new Errors('network', '', {line: 25, handle: '[Task] constructor', msg: e.message, url}))\n xhr.target.remove()\n }\n xhr.onabort = function () {\n xhr.target.remove()\n }\n if (!self.canceled) {\n self.xhr = xhr;\n Task.queue.push(self);\n }\n self.update()\n }\n cancel () {\n this.xhr.abort()\n this._emitTaskError(TASK_ERROR_TYPES.CANCEL);\n this.canceled = true;\n }\n\n _emitTaskError(code){\n this.emit(TASK_ERROR, {code , url: this.uniqueTag, readyState: this.xhr.readyState, status: this.xhr.status})\n }\n\n remove () {\n Task.queue.filter((item, idx) => {\n if (item.url === this.url && item.id === this.id) {\n Task.queue.splice(idx, 1)\n return true\n } else {\n return false\n }\n })\n this.update()\n }\n\n update () {\n let Queue = Task.queue\n let sended = Queue.filter((item) => item.running)\n let wait = Queue.filter(item => !item.running)\n let max = Task.limit - sended.length\n wait.forEach((item, idx) => {\n if (idx < max) {\n item.run()\n }\n })\n }\n\n run () {\n // 兼容有些情况下调用open方法后,readyState为0的问题\n if (this.xhr.readyState === 1 || this.xhr.OPENED === 1) {\n this.running = true\n this.xhr.send()\n } else {\n this.remove()\n }\n }\n\n /***\n * 同时存在多播放器实例,存在问题\n */\n static clear (playerId) {\n let queue = Task.queue;\n for(let i = queue.length - 1; i > -1; i--){\n let item = queue[i];\n if(item.running && item.playerId === playerId){\n item.cancel();\n }\n queue.splice(i, 1)\n }\n }\n}\n\nTask.queue = []\nTask.limit = 2\n\nexport default Task\n","import Player from 'xgplayer'\nimport MP4 from './mp4'\nimport MSE from './media/mse'\nimport Task from './media/task'\nimport { isSupported, isSupportedWithXgmse, isMediaSourceSupported } from './util/isSupport';\nimport ProxyPromise from './util/proxyPromise'\nimport Timer from './util/timer'\nimport { CUSTOM_EVENTS } from './constants'\nimport GapJump from './gap_jump';\n\nconst DESTROYED = 'DESTROYED';\n\nconst sniffer = Player.sniffer;\n\nlet isEnded = (player, mp4) => {\n if (mp4.meta.endTime - player.currentTime < 0.5) {\n // let range = player.getBufferedRange(player.buffered2)\n let offsetTime = player.duration - player.currentTime\n if (offsetTime < 0.5) {\n player.mse.endOfStream()\n player._stopProgress()\n }\n }\n}\n\nclass Mp4Player extends Player {\n constructor (options) {\n let hasStartProgress = true;\n if(options.onlyInit || options.videoInit){\n options.onlyInit = true;\n options.autoplay = false;\n options.videoInit = false;\n hasStartProgress = false;\n }\n super(options);\n\n this._pendingPromises = [];\n this._allInitPromise = new ProxyPromise();\n this._maxBufferLength = options.maxBufferLength || 5\n this._playerId = Mp4Player.uniqueId ++;\n this._onBufferedResetFunc = this._onBufferedReset.bind(this);\n this._onSeekingFunc = this._onSeeking.bind(this);\n this._onMp4InitFunc = this._onMp4Init.bind(this);\n this._onWaitingFunc = this._onWaiting.bind(this);\n this._onEndedFunc = this._onEnded.bind(this);\n this._onDestroyFunc = this._onDestroy.bind(this);\n this._replay = this._onReplay.bind(this);\n this._onOnlineHandlerFunc = this._onOnlineHandler.bind(this);\n this._onOfflineHandlerFunc = this._onOfflineHandler.bind(this);\n this._tickInSeconds = options.tickInSeconds || 0.2;\n this._hasStartProgress = hasStartProgress;\n this._hasStartProgressBack = hasStartProgress;\n this.video.addEventListener(CUSTOM_EVENTS.BUFFERED_RESET, this._onBufferedResetFunc);\n this._bindNetworkStateChange();\n this._initMp4Kernal();\n\n this.once('ready', () => {\n this.gapJumpInst = new GapJump(this, this.config);\n Player.util.on(this, 'addVideoBufferEnd', () => {\n this.gapJumpInst.onSegmentAppend();\n });\n })\n }\n\n _initMp4Kernal(){\n let player = this;\n let rule = player.config.pluginRule || function () { return true }\n if (MSE.isSupported('video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"')) {\n if (!rule.call(player)) {\n return false\n }\n Object.defineProperty(player, 'src', {\n get () {\n return player.currentSrc\n },\n set (url) {\n player.mse.endOfStream()\n player._onDestroy();\n player.config.autoplay = player.autoplay = true\n player.config.url = url\n\n player._init(url).then((result) => {\n let mp4 = result[0]; \n let mse = result[1]\n player.proxyOnce('canplay', () => {\n player.play()\n player.proxyOn('waiting', player._onWaitingFunc)\n })\n player._startProgress();\n player._onSuperStart(mse.url)\n player.mp4 = mp4\n player.mse = mse\n // player.currentTime = 0\n }, err => {\n player._errorHandle(err)\n })\n },\n configurable: true\n })\n \n player.proxyOn('ended', player._onEndedFunc)\n \n player.proxyOnce('destroy', player._onDestroyFunc)\n \n if (player.config.videoInit || player.config.onlyInit){\n player.start(player.config.url)\n }\n }\n }\n\n start(url) {\n let player = this;\n url = url ? url : player.config.url;\n if (player.config.autoplay && Player.sniffer.browser == 'chrome' && !Player.util.hasClass(player.root, 'xgplayer-is-enter')) {\n Player.util.addClass(player.root, 'xgplayer-is-enter')\n }\n player.proxyOnce('error', () => {\n if (Player.util.hasClass(player.root, 'xgplayer-is-enter')) {\n Player.util.removeClass(player.root, 'xgplayer-is-enter')\n }\n })\n player.proxyOn('timeupdate', function () {\n if (Player.util.hasClass(player.root, 'xgplayer-isloading')) {\n Player.util.removeClass(player.root, 'xgplayer-isloading')\n }\n })\n player.proxyOnce('canplay', () => {\n if (Player.util.hasClass(player.root, 'xgplayer-is-enter')) {\n Player.util.removeClass(player.root, 'xgplayer-is-enter')\n }\n // safari decoder time offset\n if (sniffer.browser === 'safari' && player.buffered && player.config.autoplay) {\n let start = player.buffered.start(0)\n player.currentTime = start + 0.1\n }\n })\n\n let initPromise = player._init(url)\n initPromise.id = 'init'\n player._addPendingPromise(initPromise)\n initPromise.then(result => {\n \n player._allInitPromise.resolve();\n player._hasInited = true;\n player._removePendingPromise(initPromise);\n let mp4 = result[0]; let mse = result[1]\n if(player.config.autoplay) {\n player.proxyOnce('canplay', () => {\n player.play()\n })\n }\n player._onSuperStart(mse.url)\n player.mp4 = mp4\n player.mse = mse\n Player.util.on(mp4, 'error', err => {\n player._errorHandle(err)\n })\n player.proxyOn('seeking', player._onSeekingFunc)\n player.proxyOnce('playing', player._onMp4InitFunc)\n player.proxyOn('waiting', player._onWaitingFunc)\n // if(!player.config.onlyInit || player._hasStartProgressBack){\n player._startProgress();\n // }\n }, err => {\n if(err !== DESTROYED){\n player._onSuperStart(url)\n player._errorHandle(err)\n }\n })\n }\n\n switchURL(url){\n let player = this;\n let mp5 = new MP4(url, player.config.xhrSetup, player, player.config.preloadSize, {\n playerId: player._playerId\n })\n let mp4 = player.mp4\n Player.util.on(mp5, 'moovReady', () => {\n let timeRange = mp4.timeRage; \n let curTime = player.currentTime\n timeRange = mp4.timeRage\n let start = timeRange.find(item => item[0] - curTime > 2)[0]\n let end = player.getBufferedRange(player.buffered2)[1]\n if (end - start > 0 && sniffer.browser !== 'safari') {\n player.mse.removeBuffer(start, end)\n }\n if (!Player.util.hasClass(player.root, 'xgplayer-ended')) {\n player.emit('urlchange')\n }\n player.mp4 = mp5\n player.mse.appendBuffer(mp5.packMeta(mp4.meta))\n })\n Player.util.on(mp5, 'error', err => {\n player._errorHandle(err)\n })\n }\n\n _onBufferedReset(){\n if(this.mp4 && this.mp4.timeRage) {\n this.mp4.timeRage.forEach(item => {\n // if(item[0] <= time) item.downloaded = false;\n item.downloaded = false;\n });\n }\n };\n\n _onOnlineHandler(){\n if(!this._hasInited){\n this.src = this.config.url;\n }else{\n if(this._hasStartProgressBack){\n this._startProgress();\n }\n this._hasStartProgressBack = false;\n }\n }\n\n _onOfflineHandler(){\n if(this._hasStartProgress){\n this._stopProgress();\n this._hasStartProgressBack = true;\n }\n }\n\n _bindNetworkStateChange(){\n window.addEventListener('online', this._onOnlineHandlerFunc)\n window.addEventListener('offline', this._onOfflineHandlerFunc)\n }\n\n _unbindNetworkStateChange(){\n window.removeEventListener('online', this._onOnlineHandlerFunc)\n window.removeEventListener('offline', this._onOfflineHandlerFunc)\n }\n\n _onSuperStart(url){\n super.start(url)\n }\n\n _init(url){\n let player = this;\n let promise = new ProxyPromise();\n\n player._initMp4(url, promise);\n return promise;\n }\n\n _initMse(mp4, meta, promise){\n let player = this;\n const isHvc = meta.videoCodec.indexOf('hvc1') > -1 || (meta.encv && meta.encv.data_format.indexOf('hvc1') > -1)\n\n let hasVideo = !!meta.videoCodec\n let hasAudio = !!meta.audioCodec\n let codec\n if(hasVideo && hasAudio){\n codec = isHvc ? 'video/mp4; codecs=\"hev1.1.6.L93.B0, mp4a.40.5\"':'video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"'\n }else if(hasVideo){\n codec = isHvc ? 'video/mp4; codecs=\"hev1.1.6.L93.B0\"':'video/mp4; codecs=\"avc1.64001E\"'\n }else{\n codec = 'video/mp4; codecs=\"mp4a.40.5\"'\n }\n \n let mse = new MSE(codec, player.config.mediaType)\n Player.util.on(mse, 'sourceopen', function () {\n const initSeg = mp4.packMeta(mp4.meta);\n mse.appendBuffer(initSeg)\n Player.util.once(mse, 'updateend', function () {\n player._loadData();\n })\n })\n Player.util.on(mse, 'error', function (e) {\n promise.reject(e)\n })\n promise.resolve([mp4, mse])\n }\n\n _initMp4(url, promise){\n let player = this;\n let mp4 = new MP4(url, player.config.xhrSetup, player, player.config.preloadSize, {\n playerId: player._playerId\n })\n\n Player.util.once(mp4, 'metaReady', meta => {\n this._initMse(mp4, meta, promise)\n })\n \n Player.util.on(mp4, 'error', (e) => {\n promise.reject(e)\n })\n }\n\n _loadData(i = 0, time = null){\n if(!navigator.onLine){\n return;\n }\n let player = this;\n if(!player.mp4){\n return;\n }\n time = time ? time : player.currentTime;\n player.mp4.seek(time + i * 0.1).then(buffer => {\n if (buffer && player.mse) {\n let mse = player.mse\n mse.updating = true\n Player.util.once(mse, 'updateend', () => {\n // if (player.currentTime === 0 && player.video.buffered.length && player.video.buffered.end(player.video.buffered.length - 1) > 0) {\n // player.emit('canplay')\n // }\n mse.updating = false\n player.emit('addVideoBufferEnd');\n })\n mse.appendBuffer(buffer)\n }\n }, () => {\n if (i < 10) {\n setTimeout(function () {\n player._loadData(i + 1)\n }, 2000)\n }\n })\n }\n\n _onTimeUpdate(){\n let player = this;\n let mse = player.mse;\n let mp4 = player.mp4\n if (mse && !mse.updating && mp4 && mp4.canDownload) {\n let timeRage = mp4.timeRage\n let range = player.getBufferedRange(player.buffered2); \n let cacheMaxTime = player.currentTime + player._maxBufferLength\n if (range[1] - cacheMaxTime > 0) {\n return\n }\n timeRage.every((item, idx) => {\n if(item.downloaded) {\n return true;\n } else if (range[1] === 0) { //当前播放时刻无缓存\n if(item[0] <= player.currentTime && (player.currentTime < item[1] || player.duration - item[1] < 0.5)) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n } else { //当前播放时刻有缓存\n if (item[0] >= range[1] || item[1] - 1 >= range[1] || (range[1] >= item[0] && range[1] <= item[0] + 1)) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n }\n })\n isEnded(player, mp4)// hack for older webkit\n }\n }\n\n\n _onWaiting(){\n let player = this;\n let curTime = player.currentTime\n player._onInnerWait(curTime)\n if(curTime + 2 < player.duration) player._onInnerWait(curTime + 2)\n if(curTime - 2 > 0) player._onInnerWait(curTime - 2)\n }\n\n _onEnded(){\n this.off('waiting', this._onWaitingFunc)\n this._stopProgress();\n }\n\n _onReplay() {\n let player = this;\n player._onDestroy();\n player._init(player.config.url).then((result) => {\n let mp4 = result[0]; \n let mse = result[1]\n player._startProgress();\n player._onSuperStart(mse.url)\n player.mp4 = mp4\n player.mse = mse\n // player.currentTime = 0\n player.proxyOnce('canplay', () => {\n player.play()\n player.proxyOn('waiting', player._onWaitingFunc)\n })\n }, err => {\n player._errorHandle(err)\n })\n }\n\n _onDestroy(){\n let player = this;\n player._hasInited = false;\n player._unbindNetworkStateChange();\n Task.clear(player._playerId)\n if (player.mp4) {\n player.mp4.destroy();\n player.mp4 = null;\n }\n if(player.mse){\n player.mse.destroy();\n }\n player.unloadVideo();\n player._stopProgress();\n player.cancelPendingPromises();\n }\n\n _errorHandle(err){\n if(err.errt === 'network' || err.errorType === 'network'){\n return;\n }\n if(err.errt === 'parse' || err.errorType === 'parse'){\n\n return;\n }\n let player = this;\n err.url = player.src\n if (err.errd && typeof err.errd === 'object') {\n if (player.mp4) {\n err.errd.url = player.mp4.url\n err.url = player.mp4.url\n player.mp4.canDownload = false\n }\n }\n player.emit('DATA_REPORT', err)\n Task.clear(player._playerId)\n if (player.mp4 && player.mp4.bufferCache) {\n player.mp4.bufferCache.clear()\n }\n if (player.currentTime) {\n player._currentTime = player.currentTime\n }\n if (player._start) {\n player.start = player._start\n player._start = null\n }\n player.switchURL = null\n player._replay = null\n\n player.off('seeking', player._onSeekingFunc)\n player.off('playing', player._onMp4InitFunc)\n player.off('waiting', player._onWaitingFunc)\n player.off('ended', player._onEndedFunc)\n player.off('destroy', player._onDestroyFunc)\n\n iplayer.emit('error', err)\n player.src = player.config.url\n player.proxyOnce('canplay', () => {\n if (player._currentTime) {\n player.currentTime = player._currentTime\n }\n player.play()\n })\n \n }\n\n _onSeeking() {\n let curTime = this.currentTime\n this._onCheckLoad(curTime);\n isEnded(this, this.mp4)\n }\n\n _onInnerWait(curTime) {\n this._onCheckLoad(curTime);\n }\n\n _onCheckLoad(curTime){\n let player = this;\n let buffered = player.buffered2 || player.buffered; \n let hasBuffered = false; \n let timeRage = player.mp4.timeRage\n if (buffered.length) {\n for (let i = 0, len = buffered.length; i < len; i++) {\n if (curTime >= buffered.start(i) && curTime <= buffered.end(i)) {\n hasBuffered = true\n break\n }\n }\n if (!hasBuffered) {\n timeRage.every((item, idx) => {\n if (item[0] <= curTime && (item[1] > curTime || player.duration - item[1] < 0.5)) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n })\n }\n } else {\n timeRage.every((item, idx) => {\n if (item[0] <= curTime && item[1] > curTime) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n })\n }\n }\n\n _onMp4Init(){\n let player = this;\n if(player.config.mp4Init) {\n player.pause()\n }\n // if(player.config.onlyInit){\n // player._startProgress();\n // }\n }\n\n _stopProgress(){\n let player = this;\n this._hasStartProgress = false;\n if(player._requestTimer){\n player._requestTimer.stop();\n player._requestTimer = null;\n }\n }\n\n _startProgress(){\n let player = this;\n player._stopProgress();\n player._requestTimer = new Timer(()=>{\n if(player._requestTimer) {\n player._onTimeUpdate()\n }\n });\n player._requestTimer.tickEvery(player._tickInSeconds);//200ms\n this._hasStartProgress = true;\n }\n\n unloadVideo() {\n let player = this;\n try {\n if (player.video && player.video.src) {\n player.video.removeAttribute('src'); // empty source\n player.video.load();\n }\n } catch (error) {\n // console.log('unloadVideo error', error)\n }\n }\n\n _addPendingPromise(p){\n this._pendingPromises.push(p);\n }\n\n _removePendingPromise(p){\n let idx = this._pendingPromises.indexOf(p);\n if(idx > -1){\n this._pendingPromises.splice(idx, 1);\n }\n }\n\n onMediaExpired(){\n this._stopProgress();\n this.emit(CUSTOM_EVENTS.MEDIA_EXPIRED);\n }\n\n cancelPendingPromises(){\n if(this._pendingPromises.length > 0){\n this._pendingPromises.forEach(promise => {\n promise.reject(DESTROYED)\n })\n }\n this._pendingPromises = [];\n }\n\n enableAutoBuffer(start){\n if(start){\n if(!this._allInitPromise){\n return;\n }\n this._allInitPromise.then(()=>{\n this._startProgress();\n })\n }else{\n this._stopProgress();\n }\n }\n\n destroy(){\n if(this.mp4){\n this.mp4.destroy();\n }\n if(this.mse){\n this.mse.destroy();\n }\n if(this.video) {\n this.video.removeEventListener(CUSTOM_EVENTS.BUFFERED_RESET, this._onBufferedResetFunc);\n }\n super.destroy();\n }\n\n emitInitFail(reason){\n this.emit(CUSTOM_EVENTS.INIT_FAIL, reason);\n }\n\n emitParseError(){\n this.emit(CUSTOM_EVENTS.PARSE_ERROR);\n }\n\n /***\n * @return Promise\n */\n get ready(){\n return this._allInitPromise;\n }\n}\nMp4Player.uniqueId = 1;\nMp4Player.isSupported = isSupported;\nMp4Player.isSupportedWithXgmse = isSupportedWithXgmse;\nMp4Player.isMediaSourceSupported = isMediaSourceSupported;\nMp4Player.CUSTOM_EVENTS = CUSTOM_EVENTS;\n\nexport default Mp4Player;\n","import EventEmitter from 'event-emitter'\nimport Parser from './parse'\nimport Buffer from './fmp4/buffer'\nimport FMP4 from './fmp4/mp4'\nimport Task from './media/task'\nimport util from './util'\nimport Errors from './error'\nimport {CUSTOM_EVENTS, TASK_ERROR} from './constants'\nimport Player from 'xgplayer'\n\nclass MP4 {\n /**\n * [constructor 构造函数]\n * @param {String} url [视频地址]\n * @param {Number} [chunk_size=Math.pow(25, 4)] [请求的数据块大小,对于长视频设置的较大些可以避免二次请求]\n */\n constructor (url, xhrSetup, player, chunkSize = Math.pow(25, 4), ext = {}) {\n EventEmitter(this)\n this.url = url\n this.xhrSetup = xhrSetup\n this.CHUNK_SIZE = chunkSize\n this.player = player\n this.ext = ext\n this.timeRage = []\n this.canDownload = true\n this.init()\n Player.util.once(this, 'moovReady', this.moovParse.bind(this))\n }\n\n /**\n * [getData 根据字节区间下载二进制数据]\n * @param {Number} [start=0] [起始字节]\n * @param {Number} [end=start + this.CHUNK_SIZE] [截止字节]\n */\n getData (start = 0, end = start + this.CHUNK_SIZE - 1) {\n let self = this\n return new Promise((resolve, reject) => {\n let task = new Task(this.url, [\n start, end\n ], this.xhrSetup, (data)=>{\n if(self.hasDestroyed){\n return;\n }\n resolve(data)\n }, self.ext)\n // Player.util.once(task, 'error', err => {\n // self.emit('error', err)\n // })\n\n Player.util.once(task, CUSTOM_EVENTS.MEDIA_EXPIRED, ()=>{\n self.player && self.player.onMediaExpired();\n });\n\n Player.util.once(task, TASK_ERROR, params => {\n //非403状态或者非200,206状态逻辑\n reject({code: params.code, status: params.status})\n })\n })\n }\n\n /**\n * [moovParse 解析视频信息]\n * @return {[type]} [description]\n */\n moovParse () {\n let self = this\n let moov = this.moovBox\n let mvhd = util.findBox(moov, 'mvhd')\n let traks = util.findBox(moov, 'trak')\n let videoTrak,\n audioTrak\n let videoCodec,\n audioCodec\n let videoTimeScale,\n audioTimeScale\n let sps,\n pps,\n vps,\n profile,\n width,\n height\n let channelCount,\n sampleRate,\n decoderConfig\n let hvc1Data, hvcCData\n let pixelRatio = [1, 1]\n if (!Array.isArray(traks)) {\n traks = [traks]\n }\n traks.forEach(trak => {\n let hdlr = util.findBox(trak, 'hdlr')\n let mdhd = util.findBox(trak, 'mdhd')\n if (!hdlr || !mdhd) {\n self.emit('error', new Errors('parse', '', {line: 101, handle: '[MP4] moovParse', url: self.url}))\n return\n }\n let stsd = util.findBox(trak, 'stsd')\n let codecBox = stsd.subBox[0]\n if (hdlr.handleType === 'vide') {\n let avcC = util.findBox(trak, 'avcC')\n let hvcC\n if(!avcC) {\n hvcC = util.findBox(trak, 'hvcC')\n }\n \n let tkhd = util.findBox(trak, 'tkhd')\n videoTrak = trak\n videoTimeScale = mdhd.timescale\n if (avcC) {\n videoCodec = `${codecBox.type}.` + util.toHex(avcC.profile, avcC.profileCompatibility, avcC.AVCLevelIndication).join('')\n sps = avcC.sequence\n pixelRatio = [avcC.spsInfo.par_ratio.width, avcC.spsInfo.par_ratio.height]\n if (avcC.spsInfo.codec_size) {\n width = avcC.spsInfo.codec_size.width\n height = avcC.spsInfo.codec_size.height\n }\n pps = avcC.pps && avcC.pps.map((item) => Number(`0x${item}`))\n profile = avcC.profile\n } else if(hvcC) {\n hvcCData = hvcC.data\n let hvc1 = util.findBox(trak, 'hvc1')\n if(hvc1) {\n hvc1Data = hvc1.data\n width = hvc1.width\n height = hvc1.height\n }\n videoCodec = `${codecBox.type}.` + util.toHex(hvcC.profile, hvcC.profileCompatibility, hvcC.profileCompatibilityIndications).join('')\n vps = hvcC.vps && hvcC.vps.map((item) => Number(`0x${item}`))\n sps = hvcC.sequence\n // pixelRatio = [hvcC.spsInfo.par_ratio.width, hvcC.spsInfo.par_ratio.height]\n // if (hvcC.spsInfo.codec_size) {\n // width = hvcC.spsInfo.codec_size.width\n // height = hvcC.spsInfo.codec_size.height\n // }\n pps = hvcC.pps && hvcC.pps.map((item) => Number(`0x${item}`))\n profile = hvcC.profile\n } else {\n videoCodec = `${codecBox.type}`\n }\n if (tkhd && !width) {\n width = tkhd.width\n height = tkhd.height\n }\n }\n if (hdlr.handleType === 'soun') {\n audioTrak = trak\n let esds = util.findBox(trak, 'esds')\n let mp4a = util.findBox(trak, 'mp4a')\n let ESDescriptor = util.findBox(trak, 5)\n audioTimeScale = mdhd.timescale\n if (esds) {\n audioCodec = `${codecBox.type}.` + util.toHex(esds.subBox[0].subBox[0].typeID) + `.${esds.subBox[0].subBox[0].subBox[0].type}`\n } else {\n audioCodec = `${codecBox.type}`\n }\n if (ESDescriptor && ESDescriptor.EScode) {\n decoderConfig = ESDescriptor.EScode.map((item) => Number(`0x${item}`))\n }\n if (mp4a) {\n channelCount = mp4a.channelCount\n sampleRate = mp4a.sampleRate\n }\n }\n })\n if (!sps) return\n // this.videoTrak = Merge({}, videoTrak)\n // this.audioTrak = audioTrak ? Merge({}, audioTrak) : null\n this.videoTrak = videoTrak;\n this.audioTrak = audioTrak ? audioTrak : null\n let mdat = this._boxes.find(item => item.type === 'mdat')\n let videoDuration = util.seekTrakDuration(videoTrak, videoTimeScale)\n let audioDuration = audioTrak ? util.seekTrakDuration(audioTrak, audioTimeScale) : videoDuration\n this.mdatStart = mdat.start\n let vf = this.videoKeyFrames\n let videoKeyFramesLength = vf.length - 1\n vf.forEach((item, idx) => {\n if (idx < videoKeyFramesLength) {\n this.timeRage.push([\n item.time.time / videoTimeScale,\n vf[idx + 1].time.time / videoTimeScale\n ])\n } else {\n this.timeRage.push([\n item.time.time / videoTimeScale,\n mvhd.duration / mvhd.timeScale\n ])\n }\n })\n this.meta = {\n videoCodec,\n audioCodec,\n createTime: mvhd.createTime,\n modifyTime: mvhd.modifyTime,\n duration: mvhd.duration / mvhd.timeScale,\n timeScale: mvhd.timeScale,\n videoDuration,\n videoTimeScale,\n audioDuration,\n audioTimeScale,\n endTime: Math.min(videoDuration, audioDuration),\n vps,\n sps,\n pps,\n width,\n height,\n profile,\n pixelRatio,\n channelCount,\n sampleRate,\n audioConfig: decoderConfig,\n hvc1Data,\n hvcCData,\n ext: {\n videoTrak: this.videoTrak,\n audioTrak: this.audioTrak,\n mdatStart: this.mdatStart,\n timeRage: this.timeRage,\n },\n stss: this._stssObj\n }\n this.emit('metaReady', this.meta)\n }\n\n /**\n * [init 实例的初始化,主要是获取视频的MOOV元信息]\n */\n init () {\n let self = this\n self.getData().then(res => {\n let parsed\n let moovStart = 0\n let moov\n let boxes\n try {\n parsed = new Parser(res)\n } catch (e) {\n self.emit('error', e.type ? e : new Errors('parse', '', {line: 176, handle: '[MP4] init', msg: e.message}))\n return false\n }\n self._boxes = boxes = parsed.boxes\n boxes.every(item => {\n moovStart += item.size\n if (item.type === 'moov') {\n moov = item\n self.moovBox = moov\n self.emit('moovReady', moov)\n return false\n } else {\n return true\n }\n })\n if (!moov) {\n let nextBox = parsed.nextBox\n if (nextBox) {\n if (nextBox.type === 'moov') {\n self.getData(moovStart, moovStart + nextBox.size + 28).then(res => {\n let parsed\n // try {\n parsed = new Parser(res)\n // }catch(e) {\n\n // }\n \n self._boxes = self._boxes.concat(parsed.boxes)\n moov = parsed.boxes.filter(box => box.type === 'moov')\n if (moov.length) {\n self.moovBox = moov[0]\n self.emit('moovReady', moov)\n } else {\n self.emit('error', new Errors('parse', '', {line: 203, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n })\n } else {\n self.emit('error', new Errors('parse', '', {line: 207, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n } else {\n self.getData(moovStart, '').then(res => {\n let parsed = new Parser(res)\n if (parsed) {\n self._boxes = self._boxes.concat(parsed.boxes)\n parsed.boxes.every(item => {\n if (item.type === 'moov') {\n moov = item\n self.moovBox = moov\n self.emit('moovReady', moov)\n return false\n } else {\n return true\n }\n })\n } else {\n self.emit('error', new Errors('parse', '', {line: 225, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n })\n }\n }\n }).catch(() => {\n self.emit('error', new Errors('network', '', {line: 231, handle: '[MP4] getData', msg: 'getData failed'}))\n })\n }\n\n getSamplesByOrders (type = 'video', start, end) {\n let trak = type === 'video'\n ? this.videoTrak\n : this.audioTrak\n let stsc = util.findBox(trak, 'stsc') // chunk~samples\n let stsz = util.findBox(trak, 'stsz') // sample-size\n let stts = util.findBox(trak, 'stts') // sample-time\n let stco = util.findBox(trak, 'stco') // chunk-offset\n let cttsObj = type === 'video' ? this._cttsObj : null;\n let stscObj = type === 'video' ? this._stscVideoObj : this._stscAudioObj;\n let mdatStart = this.mdatStart\n let samples = []\n end = end !== undefined\n ? end\n : stsz.entries.length\n if (start instanceof Array) {\n start.forEach((item, idx) => {\n samples.push({\n idx: item,\n size: stsz.entries[item],\n time: util.seekSampleTime(stts, cttsObj, item),\n offset: util.seekSampleOffset(stsc, stco, stsz, item, mdatStart, stscObj)\n })\n })\n } else if (end !== 0) {\n for (let i = start; i < end; i++) {\n samples.push({\n idx: i,\n size: stsz.entries[i],\n time: util.seekSampleTime(stts, cttsObj, i),\n offset: util.seekSampleOffset(stsc, stco, stsz, i, mdatStart, stscObj)\n })\n }\n } else {\n let offset = util.seekSampleOffset(stsc, stco, stsz, start, mdatStart, stscObj)\n samples = {\n idx: start,\n size: stsz.entries[start],\n time: util.seekSampleTime(stts, cttsObj, start),\n offset: offset\n }\n }\n return samples\n }\n\n get videoKeyFrames () {\n if (this._videoFrames) {\n return this._videoFrames\n }\n let videoTrak = this.videoTrak\n let stss = util.findBox(videoTrak, 'stss')\n let stsc = util.findBox(videoTrak, 'stsc') // chunk~samples\n let ctts = util.findBox(videoTrak, 'ctts') // offset-compositime\n this._cttsObj = null;\n if(ctts){\n this._cttsObj = {};\n let count = 0;\n for(let i = 0; i < ctts.entry.length; i++){\n let entry = ctts.entry[i];\n for(let j = 0; j < entry.count; j++){\n this._cttsObj[count] = entry.offset;\n count += 1;\n }\n }\n }\n\n this._stscVideoObj = {};\n let sampleCount = 0;\n for(let i = 0; i < stsc.count - 1; i++){\n let entry = stsc.entries[i];\n for(let j = 0; j < entry.chunk_count * entry.samples_per_chunk; j++){\n sampleCount ++;\n this._stscVideoObj[sampleCount] = entry;\n }\n }\n\n let frames = this.getSamplesByOrders('video', stss.entries.map(item => item - 1))\n this._stssObj = stss;\n this._videoFrames = frames\n return frames\n }\n\n get audioKeyFrames () {\n if (this._audioFrames) {\n return this._audioFrames\n }\n let videoScale = util.findBox(this.videoTrak, 'mdhd').timescale\n let audioScale = util.findBox(this.audioTrak, 'mdhd').timescale\n let audioStts = util.findBox(this.audioTrak, 'stts').entry\n let stsc = util.findBox(this.audioTrak, 'stsc') // chunk~samples\n this._stscAudioObj = {};\n let sampleCount = 0;\n for(let i = 0; i < stsc.count - 1; i++){\n let entry = stsc.entries[i];\n for(let j = 0; j < entry.chunk_count * entry.samples_per_chunk; j++){\n sampleCount ++;\n this._stscAudioObj[sampleCount] = entry;\n }\n }\n let videoFrames = this.videoKeyFrames\n let audioIndex = []\n audioIndex = videoFrames.map(item => {\n return util.seekOrderSampleByTime(audioStts, audioScale, item.time.time / videoScale)\n })\n this._audioFrames = audioIndex\n return this._audioFrames\n }\n\n packMeta() {\n if (!this.meta) {\n return\n }\n let buffer = new Buffer()\n buffer.write(FMP4.ftyp())\n buffer.write(FMP4.moov(this.meta))\n // this.cache.write(buffer.buffer)\n return buffer.buffer\n }\n\n getRangeFromTime(time){\n let fragIndex = this.getFragmentIdx(time);\n let range = this.getFragRange(fragIndex)\n if(range === [0, 0]) return null;\n return {\n range,\n fragIndex,\n }\n }\n\n getFragmentIdx(time){\n let timeStart = Math.round(time * this.meta.videoTimeScale)\n let fragIndex\n let videoFrames = this.videoKeyFrames\n videoFrames.every((item, idx) => {\n let nowTime = item.time.time\n let nextTime = videoFrames[idx + 1]\n ? videoFrames[idx + 1].time.time\n : Number.MAX_SAFE_INTEGER\n if (nowTime <= timeStart && timeStart < nextTime) {\n fragIndex = idx\n return false\n } else {\n return true\n }\n })\n if (this.audioTrak) {\n let audioFrames = this.audioKeyFrames\n audioFrames.every((item, idx) => {\n let nowTime = item.startTime\n let nextTime = audioFrames[idx + 1]\n ? audioFrames[idx + 1].startTime\n : Number.MAX_SAFE_INTEGER\n if (nowTime <= timeStart && timeStart < nextTime) {\n fragIndex = Math.min(idx, fragIndex)\n return false\n } else {\n return true\n }\n })\n }\n return fragIndex;\n }\n\n seek (time) {\n let fragIndex = this.getFragmentIdx(time);\n this.timeRage[fragIndex].downloaded = true;\n return this.loadFragment(fragIndex)\n }\n\n getFragRange (fragIndex) {\n let videoFrame = this.videoKeyFrames[fragIndex]\n let start = videoFrame.offset\n let end\n if (this.audioTrak) {\n let audioFrame = this.getSamplesByOrders('audio', this.audioKeyFrames[fragIndex].order, 0)\n start = Math.min(start, audioFrame.offset)\n }\n if (fragIndex < this.videoKeyFrames.length - 1) {\n let videoNextFrame = this.videoKeyFrames[fragIndex + 1]\n end = videoNextFrame.offset\n if (this.audioTrak) {\n let audioNextFrame = this.getSamplesByOrders('audio', this.audioKeyFrames[fragIndex + 1].order, 0)\n end = Math.max(end, audioNextFrame.offset || 0)\n }\n }\n if (window.isNaN(start) || (end !== undefined && window.isNaN(end))) {\n this.emit('error', new Errors('parse', '', { line: 366, handle: '[MP4] loadFragment', url: this.url }))\n return [0, 0]\n }\n return [start + this.mdatStart, end ? this.mdatStart + end : '']\n }\n loadFragment (fragIndex) {\n let self = this\n let range = this.getFragRange(fragIndex)\n if(range === [0, 0]) {\n debugger\n return false;\n }\n return this.getData(range[0], range[1]).then((dat) => {\n return self.createFragment(new Uint8Array(dat), range[0] - this.mdatStart, fragIndex)\n })\n .then(buf => {\n return buf\n })\n }\n addFragment (data) {\n let buffer = new Buffer()\n return new Promise(resolve => {\n buffer.write(FMP4.moof(data))\n buffer.write(FMP4.mdat(data))\n // this.cache.write(buffer.buffer)\n resolve(buffer.buffer)\n })\n }\n getVideoBuffer(mdatData, start, fragIndex) {\n let self = this\n let videoFlags = 0xf01\n let framesIndex = self.videoKeyFrames.map((item) => item.idx)\n let _samples = self.getSamplesByOrders('video', framesIndex[fragIndex], framesIndex[fragIndex + 1])\n let samples = _samples.map((item, idx) => {\n return {\n size: item.size,\n duration: item.time.duration,\n offset: item.time.offset,\n buffer: new Uint8Array(mdatData.slice(item.offset - start, item.offset - start + item.size)),\n key: idx === 0,\n idx: item.idx\n }\n })\n return this.addFragment({\n id: 1,\n time: _samples[0].time.time,\n firstFlags: 0x2000000,\n flags: videoFlags,\n samples,\n sampleOffset: _samples[0].idx,\n fragIndex\n })\n }\n getAudioBuffer(mdatData, start, fragIndex) {\n\n let self = this\n let audioFlags = 0x701\n\n let _samples = this.getSamplesByOrders(\n 'audio', this.audioKeyFrames[fragIndex].order, this.audioKeyFrames[fragIndex + 1]\n ? this.audioKeyFrames[fragIndex + 1].order\n : undefined)\n let samples = _samples.map((item, idx) => {\n return {\n size: item.size,\n duration: item.time.duration,\n offset: item.time.offset,\n buffer: new Uint8Array(mdatData.slice(item.offset - start, item.offset - start + item.size)),\n key: idx === 0\n }\n })\n return this.addFragment({\n id: 2,\n time: _samples[0].time.time,\n firstFlags: 0x00,\n flags: audioFlags,\n samples,\n sampleOffset: _samples[0].idx,\n fragIndex\n })\n }\n createFragment (mdatData, start, fragIndex) {\n let self = this\n\n let resBuffers = []\n let promises = [\n self.getVideoBuffer(mdatData, start, fragIndex)\n ]\n if (this.audioTrak) {\n promises.push(self.getAudioBuffer(mdatData, start, fragIndex))\n }\n return Promise.all(promises)\n .then(buffers => {\n resBuffers.push(buffers[0])\n if (buffers && buffers[1]) {\n resBuffers.push(buffers[1])\n }\n let bufferSize = 0\n resBuffers.every(item => {\n bufferSize += item.byteLength\n return true\n })\n let buffer = new Uint8Array(bufferSize)\n let offset = 0\n resBuffers.every(item => {\n buffer.set(item, offset)\n offset += item.byteLength\n return true\n })\n return buffer\n })\n }\n\n update(url){\n this.url = url;\n }\n\n destroy(){\n if(this.hasDestroyed){\n return;\n }\n for (let k in this) {\n delete this[k]\n }\n this.hasDestroyed = true;\n }\n}\n\nexport default MP4\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 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\";\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 isObject = require(\"../object/is\");\n\nmodule.exports = function (value) {\n\tif (!isObject(value)) return false;\n\ttry {\n\t\tif (!value.constructor) return false;\n\t\treturn value.constructor.prototype === value;\n\t} catch (error) {\n\t\treturn false;\n\t}\n};\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\nmodule.exports = require(\"./is-implemented\")() ? Object.assign : require(\"./shim\");\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\";\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\nmodule.exports = require(\"./is-implemented\")() ? Object.keys : require(\"./shim\");\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 keys = Object.keys;\n\nmodule.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };\n","\"use strict\";\n\n// eslint-disable-next-line no-empty-function\nmodule.exports = function () {};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) throw new TypeError(\"Cannot use null or undefined\");\n\treturn value;\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\nmodule.exports = require(\"./is-implemented\")() ? String.prototype.contains : require(\"./shim\");\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","\"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 = function (fn) {\n\tif (typeof fn !== \"function\") throw new TypeError(fn + \" is not a function\");\n\treturn fn;\n};\n","import Box from './box'\nimport Concat from 'concat-typed-array'\nimport Stream from './stream'\nimport * as SubBox from './box/*.js'\n\nclass Parse {\n constructor (buffer) {\n this.buffer = null\n this.boxes = []\n this.nextBox = null\n this.start = 0\n let self = this\n if (self.buffer) {\n Concat(Uint8Array, self.buffer, buffer)\n } else {\n self.buffer = buffer\n }\n let bufferLength = buffer.byteLength\n buffer.position = 0\n let stream = new Stream(buffer)\n while (bufferLength - stream.position >= 8) {\n let box = new Box()\n box.readHeader(stream)\n if (box.size - 8 <= (bufferLength - stream.position)) {\n box.readBody(stream)\n self.boxes.push(box)\n } else {\n if (box.type === 'mdat') {\n box.readBody(stream)\n self.boxes.push(box)\n } else {\n self.nextBox = box\n stream.position -= 8\n break\n }\n }\n }\n self.buffer = new Uint8Array(self.buffer.slice(stream.position))\n }\n}\n\nexport default Parse\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (ResultConstructor) {\n var totalLength = 0;\n\n for (var _len = arguments.length, arrays = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n arrays[_key - 1] = arguments[_key];\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = arrays[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var arr = _step.value;\n\n totalLength += arr.length;\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 var result = new ResultConstructor(totalLength);\n var offset = 0;\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = arrays[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _arr = _step2.value;\n\n result.set(_arr, offset);\n offset += _arr.length;\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return result;\n};","import Box from '../box'\nimport Stream from '../stream'\n\nBox.vmhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = [stream.readUint8(), stream.readUint8(), stream.readUint8()]\n this.graphicsmode = stream.readUint16()\n this.opcolor = [stream.readUint16(), stream.readUint16(), stream.readUint16()]\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox['url '] = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = [stream.readUint8(), stream.readUint8(), stream.readUint8()]\n let location = []; let length = stream.buffer.byteLength\n while (stream.position < length) {\n location.push(stream.readUint8())\n }\n this.location = location\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nBox.udta = function () {\n delete this.subBox\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport UTC from '../date'\n\nBox.tkhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3, 0)\n if (this.version === 1) {\n this.create = stream.readUint64()\n this.modify = stream.readUint64()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.trackID = stream.readUint32()\n this.reserverd = stream.readUint32()\n this.duration = stream.readUint64()\n } else {\n this.create = stream.readUint32()\n this.modify = stream.readUint32()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.trackID = stream.readUint32()\n this.reserverd = stream.readUint32()\n this.duration = stream.readUint32()\n }\n stream.readUint64()\n this.layer = stream.readInt16()\n this.alternate_group = stream.readInt16()\n this.volume = stream.readInt16() >> 8\n stream.readUint16()\n // 视频转换矩阵\n let matrix = []\n for (let i = 0; i < 9; i++) {\n matrix.push(stream.readUint16() + '.' + stream.readUint16())\n }\n this.matrix = matrix\n this.width = stream.readUint16() + '.' + stream.readUint16()\n this.height = stream.readUint16() + '.' + stream.readUint16()\n delete this.data\n delete this.subBox\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.tfhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n\n // trackId: view.getUint32(4)\n this.track_id = stream.readUint32();\n\n let baseDataOffsetPresent = (this.flag & 0xff) & 0x01;\n let sampleDescriptionIndexPresent = (this.flag & 0xff) & 0x02;\n let defaultSampleDurationPresent = (this.flag & 0xff) & 0x08;\n let defaultSampleSizePresent = (this.flag & 0xff) & 0x10;\n let defaultSampleFlagsPresent = (this.flag & 0xff) & 0x20;\n\n let i = 8;\n if (baseDataOffsetPresent) {\n i += 4; // truncate top 4 bytes\n this.baseDataOffset = stream.readUint32();\n i += 4;\n }\n if (sampleDescriptionIndexPresent) {\n this.sampleDescriptionIndex = stream.readUint32();\n i += 4;\n }\n if (defaultSampleDurationPresent) {\n this.defaultSampleDuration = stream.readUint32();\n i += 4;\n }\n if (defaultSampleSizePresent) {\n this.defaultSampleSize = stream.readUint32();\n i += 4;\n }\n if (defaultSampleFlagsPresent) {\n this.defaultSampleFlags = stream.readUint32();\n }\n\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stts = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entry = []\n for (let i = 0, count = this.count; i < count; i++) {\n entry.push({\n sampleCount: stream.readUint32(),\n sampleDuration: stream.readUint32()\n })\n }\n this.entry = entry\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stsz = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.sampleSize = stream.readUint32()\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n if (this.sampleSize) {\n entries.push(this.sampleSize)\n }\n else {\n entries.push(stream.readUint32())\n }\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stss = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push(stream.readUint32())\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.stsd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.entryCount = stream.readUint32()\n let box = new Box()\n box.readHeader(stream)\n this.subBox.push(box)\n box.readBody(stream)\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stsc = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push({\n first_chunk: stream.readUint32(),\n samples_per_chunk: stream.readUint32(),\n sample_desc_index: stream.readUint32()\n })\n }\n for (let i = 0, count = this.count, entry, preEntry; i < count - 1; i++) {\n entry = entries[i]\n preEntry = entries[i - 1]\n entry.chunk_count = entries[i + 1].first_chunk - entry.first_chunk\n entry.first_sample = i === 0 ? 1 : preEntry.first_sample + preEntry.chunk_count * preEntry.samples_per_chunk\n }\n if (this.count === 1) {\n let entry = entries[0]\n entry.first_sample = 1\n entry.chunk_count = 0\n } else if (this.count > 1) {\n let last = entries[this.count - 1]; let pre = entries[this.count - 2]\n last.first_sample = pre.first_sample + pre.chunk_count * pre.samples_per_chunk\n last.chunk_count = 0\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stco = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push(stream.readUint32())\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.smhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.balance = stream.readInt8() + '.' + stream.readInt8()\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\n\nBox.SLConfigDescriptor = function (stream) {\n let box = new Box()\n let size\n box.type = stream.readUint8()\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n } else {\n size += 2\n }\n box.size = size\n box.SL = stream.readUint8()\n delete box.subBox\n return box\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\n\nBox.schm = function () {\n let stream = new Stream(this.data)\n\tthis.scheme_version = stream.readUint32();\n this.scheme_type = '';\n for (var i = 0; i < 4; i++) {\n this.scheme_type += String.fromCharCode(stream.readUint8());\n }\n\tif (this.flags & 0x000001) {\n this.scheme_uri = '';\n for (var i = 0; i < this.size - this.hdr_size - 8; i++) {\n this.scheme_uri += String.fromCharCode(stream.readUint8());\n }\n\t}\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.pasp = function () {\n let stream = new Stream(this.data)\n\tthis.hSpacing = stream.readUint32();\n\tthis.vSpacing = stream.readUint32();\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport UTC from '../date'\n\nBox.mvhd = function () {\n let stream = new Stream(this.data)\n\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.create = stream.readUint32()\n this.modify = stream.readUint32()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.timeScale = stream.readUint32()\n this.duration = stream.readUint32()\n this.rate = stream.readUint16() + '.' + stream.readUint16()\n this.volume = stream.readUint8() + '.' + stream.readUint8()\n // 越过保留的10字节\n Stream.readByte(stream.dataview, 8)\n Stream.readByte(stream.dataview, 2)\n // 视频转换矩阵\n let matrix = []\n for (let i = 0; i < 9; i++) {\n matrix.push(stream.readUint16() + '.' + stream.readUint16())\n }\n this.matrix = matrix\n Stream.readByte(stream.dataview, 24)\n this.nextTrackID = stream.readUint32()\n delete this.subBox\n delete this.data\n}\n","import Box from '../box'\n\nBox.MP4ESDescrTag = function (stream) {\n let box = new Box()\n let size\n box.type = stream.readUint8()\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n } else {\n size += 2\n }\n box.size = size\n box.esID = stream.readUint16()\n box.priority = stream.readUint8()\n box.subBox.push(Box.MP4DecConfigDescrTag(stream))\n box.subBox.push(Box.SLConfigDescriptor(stream))\n return box\n}\n","import Box from '../box'\n\nBox.MP4DecSpecificDescrTag = function (stream) {\n let box = new Box()\n let size, dataSize\n box.type = stream.readUint8()\n if (box.type !== 5) {\n stream.position = stream.position - 1\n return box\n }\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n dataSize = size - 5\n } else {\n dataSize = size\n size += 2\n }\n box.size = size\n let EScode = []\n for (let i = 0; i < dataSize; i++) {\n EScode.push(Number(stream.readUint8()).toString(16).padStart(2, '0'))\n }\n box.EScode = EScode\n delete box.subBox\n return box\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.MP4DecConfigDescrTag = function (stream) {\n let box = new Box()\n let size\n box.type = stream.readUint8()\n if (box.type !== 4) {\n return box\n }\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n } else {\n size += 2\n }\n box.size = size\n box.typeID = stream.readUint8()\n // 6 bits stream type,1 bit upstream flag,1 bit reserved flag\n box.streamUint = stream.readUint8()\n box.bufferSize = Stream.readByte(stream.dataview, 3)\n box.maximum = stream.readUint32()\n box.average = stream.readUint32()\n box.subBox.push(Box.MP4DecSpecificDescrTag(stream))\n return box\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.mp4a = function () {\n let stream = new Stream(this.data)\n stream.skip(6)\n this.dataReferenceIndex = stream.readUint16()\n stream.skip(8)\n this.channelCount = stream.readUint16()\n this.sampleSize = stream.readUint16()\n stream.skip(4)\n this.sampleRate = stream.readUint32() >> 16\n let box = new Box()\n box.readHeader(stream)\n this.subBox.push(box)\n box.readBody(stream)\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport UTC from '../date'\n\nBox.mdhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n if (this.version === 1) {\n this.create = stream.readUint64()\n this.modify = stream.readUint64()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.timescale = stream.readUint32()\n this.duration = stream.readUint64()\n } else {\n this.create = stream.readUint32()\n this.modify = stream.readUint32()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.timescale = stream.readUint32()\n this.duration = stream.readUint32()\n }\n this.language = stream.readUint16()\n stream.readUint16()\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\n\nBox.mdat = function () {\n delete this.subBox\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.iods = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let content = []\n let length = stream.buffer.byteLength\n while (stream.position < length) {\n content.push(stream.readUint8())\n }\n this.content = content\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport SpsParser from './sps'\n\nBox.hvcC = function () {\n let stream = new Stream(this.data)\n this.configVersion = stream.readUint8()\n this.profile = stream.readUint8()\n this.profileCompatibility = stream.readUint32()\n this.constraintIndicatorFlags = []\n for (let i = 0; i < 6; i++) {\n this.constraintIndicatorFlags.push(Number(stream.readUint8()).toString(16))\n }\n this.levelIdc = stream.readUint8()\n this.profileCompatibilityIndications = stream.readUint32()\n this.bitDepthLumaMinus8 = stream.readUint8()\n this.bitDepthChromaMinus8 = stream.readUint8()\n this.avgFrameRate = stream.readUint16()\n this.constantFrameRate = stream.readUint8()\n this.numOfArrays = stream.readUint8()\n\n this.vpsHeader = stream.readUint24()\n this.vpsLength = stream.readUint16()\n let vps = []\n for (let i = 0; i < this.vpsLength; i++) {\n vps.push(Number(stream.readUint8()).toString(16))\n }\n this.vps = vps\n\n this.spsHeader = stream.readUint24()\n this.spsLength = stream.readUint16()\n let sps = []\n for (let i = 0; i < this.spsLength; i++) {\n sps.push(Number(stream.readUint8()).toString(16))\n }\n // this.spsInfo = SpsParser.parseSPS(new Uint8Array(sps))\n this.sequence = sps\n\n this.ppsHeader = stream.readUint24()\n this.ppsLength = stream.readUint16()\n let pps = []\n for (let i = 0; i < this.ppsLength; i++) {\n pps.push(Number(stream.readUint8()).toString(16))\n }\n this.pps = pps\n\n let last = []; let dataviewLength = stream.dataview.byteLength\n while (stream.position < dataviewLength) {\n last.push(stream.readUint8())\n }\n this.last = last\n delete this.subBox\n // delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.hvc1 = function () {\n let stream = new Stream(this.data)\n let self = this\n stream.skip(6)\n this.dataReferenceIndex = stream.readUint16()\n stream.skip(16)\n this.width = stream.readUint16()\n this.height = stream.readUint16()\n this.horizresolution = stream.readUint32()\n this.vertresolution = stream.readUint32()\n stream.skip(4)\n this.frameCount = stream.readUint16()\n stream.skip(1)\n for (let i = 0; i < 31; i++) {\n String.fromCharCode(stream.readUint8())\n }\n this.depth = stream.readUint16()\n stream.skip(2)\n while (stream.position < stream.buffer.byteLength) {\n let box = new Box()\n box.readHeader(stream)\n self.subBox.push(box)\n box.readBody(stream)\n }\n // delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.hdlr = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n stream.skip(4)\n this.handleType = `${String.fromCharCode(stream.readUint8())}${String.fromCharCode(stream.readUint8())}${String.fromCharCode(stream.readUint8())}${String.fromCharCode(stream.readUint8())}`\n stream.skip(12)\n let name = []\n while (stream.position < this.size - 8) {\n name.push(String.fromCharCode(stream.readUint8()))\n }\n this.name = name.join('')\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.ftyp = function () {\n let stream = new Stream(this.data)\n this.major_brand = String.fromCharCode(stream.readUint8(), stream.readUint8(), stream.readUint8(), stream.readUint8())\n this.minor_version = stream.readUint32()\n let compatibleBrands = []\n for (let i = 0, len = Math.floor((stream.buffer.byteLength - 8) / 4); i < len; i++) {\n compatibleBrands.push(String.fromCharCode(stream.readUint8(), stream.readUint8(), stream.readUint8(), stream.readUint8()))\n }\n this.compatible_brands = compatibleBrands\n stream = null\n delete this.subBox\n delete this.data\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.frma = function () {\n let stream = new Stream(this.data)\n this.data_format = '';\n for (var i = 0; i < 4; i++) {\n this.data_format += String.fromCharCode(stream.readUint8());\n }\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.esds = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n try {\n let box = Box.MP4ESDescrTag(stream)\n this.subBox.push(box)\n delete this.data\n stream = null\n }catch(e) {\n console.error(e)\n }\n \n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.elst = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let entries = []\n let entry_count = stream.readUint32()\n this.entries = entries\n for (let i = 0; i < entry_count; i++) {\n let entry = {}\n entries.push(entry)\n if (this.version === 1) {\n entry.segment_duration = stream.readUint64()\n entry.media_time = stream.readUint64()\n } else {\n entry.segment_duration = stream.readUint32()\n entry.media_time = stream.readInt32()\n }\n entry.media_rate_integer = stream.readInt16()\n entry.media_rate_fraction = stream.readInt16()\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.dref = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let entryCount = stream.readUint32()\n this.entryCount = entryCount\n let self = this\n // 暂时不支持离散视频,视频的部分内容由url指定\n for (let i = 0; i < entryCount; i++) {\n let box = new Box()\n self.subBox.push(box)\n box.read(stream)\n }\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.ctts = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n\n this.entryCount = stream.readUint32()\n let entry = []\n this.entry = entry\n for (let i = 0, count = this.entryCount; i < count; i++) {\n entry.push({\n count: stream.readUint32(),\n offset: stream.readUint32()\n })\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.co64 = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push(stream.readUint64())\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.btrt = function () {\n let stream = new Stream(this.data)\n this.bufferSizeDB = stream.readUint32()\n this.maxBitrate = stream.readUint32()\n this.avgBitrate = stream.readUint32()\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport SpsParser from './sps'\n\nBox.avcC = function () {\n let stream = new Stream(this.data)\n this.configVersion = stream.readUint8()\n this.profile = stream.readUint8()\n this.profileCompatibility = stream.readUint8()\n this.AVCLevelIndication = stream.readUint8()\n this.lengthSizeMinusOne = (stream.readUint8() & 3) + 1\n this.numOfSequenceParameterSets = stream.readUint8() & 31\n let sequenceLength = stream.readUint16()\n this.sequenceLength = sequenceLength\n let sequence = []\n for (let i = 0; i < sequenceLength; i++) {\n sequence.push(stream.readUint8())\n }\n this.spsInfo = SpsParser.parseSPS(new Uint8Array(sequence))\n this.ppsCount = stream.readUint8()\n let ppsLength = stream.readUint16()\n this.ppsLength = ppsLength\n let pps = []\n for (let i = 0; i < ppsLength; i++) {\n pps.push(Number(stream.readUint8()).toString(16))\n }\n this.pps = pps\n this.sequence = sequence\n let last = []; let dataviewLength = stream.dataview.byteLength\n while (stream.position < dataviewLength) {\n last.push(stream.readUint8())\n }\n this.last = last\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.avc1 = function () {\n let stream = new Stream(this.data)\n let self = this\n stream.skip(6)\n this.dataReferenceIndex = stream.readUint16()\n stream.skip(16)\n this.width = stream.readUint16()\n this.height = stream.readUint16()\n this.horizresolution = stream.readUint32()\n this.vertresolution = stream.readUint32()\n stream.skip(4)\n this.frameCount = stream.readUint16()\n stream.skip(1)\n for (let i = 0; i < 31; i++) {\n String.fromCharCode(stream.readUint8())\n }\n this.depth = stream.readUint16()\n stream.skip(2)\n while (stream.position < stream.buffer.byteLength) {\n let box = new Box()\n box.readHeader(stream)\n self.subBox.push(box)\n box.readBody(stream)\n }\n delete this.data\n stream = null\n}\n","import Buffer from './buffer'\nconst UINT32_MAX = Math.pow(2, 32) - 1\n\nclass FMP4 {\n static type (name) {\n return new Uint8Array([name.charCodeAt(0), name.charCodeAt(1), name.charCodeAt(2), name.charCodeAt(3)])\n }\n static size (value) {\n return Buffer.writeUint32(value)\n }\n static extension (version, flag) {\n return new Uint8Array([\n version,\n (flag >> 16) & 0xff,\n (flag >> 8) & 0xff,\n flag & 0xff\n ])\n }\n static ftyp () {\n let buffer = new Buffer()\n buffer.write(FMP4.size(24), FMP4.type('ftyp'), new Uint8Array([\n 0x69, 0x73, 0x6F, 0x36, // isom,\n 0x0, 0x0, 0x00, 0x01, // minor_version: 0x01\n 0x69, 0x73, 0x6F, 0x36, // isom\n 0x64, 0x61, 0x73, 0x68 // avc1\n ]))\n return buffer.buffer\n }\n static moov (data) {\n let buffer = new Buffer(); let size = 8\n let mvhd = FMP4.mvhd(data.duration, data.timeScale)\n let mvex = FMP4.mvex(data.duration, data.timeScale)\n let trak1 = FMP4.videoTrak(data)\n let trak2 = new Uint8Array([])\n if (data.channelCount) {\n trak2 = FMP4.audioTrak(data);\n }\n [mvhd, mvex, trak1, trak2].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('moov'), mvhd, mvex, trak1, trak2)\n return buffer.buffer\n }\n static mvhd (duration, timescale) {\n let buffer = new Buffer()\n duration *= timescale\n // const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1))\n // const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1))\n let bytes = new Uint8Array([\n 0x00, // version 1\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >> 24) & 0xff,\n (timescale >> 16) & 0xff,\n (timescale >> 8) & 0xff,\n timescale & 0xff, // timescale\n (duration >> 24) & 0xff,\n (duration >> 16) & 0xff,\n (duration >> 8) & 0xff,\n duration & 0xff, // duration\n 0x00, 0x01, 0x00, 0x00, // 1.0 rate\n 0x01, 0x00, // 1.0 volume\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x00, 0x00, 0x00, 0x03 // next_track_ID\n ])\n buffer.write(FMP4.size(8 + bytes.length), FMP4.type('mvhd'), new Uint8Array(bytes))\n return buffer.buffer\n }\n static videoTrak (data) {\n let buffer = new Buffer(); let size = 8\n let tkhd = FMP4.tkhd({\n id: 1,\n duration: data.videoDuration,\n timescale: data.videoTimeScale,\n width: data.width,\n height: data.height,\n type: 'video'\n })\n let mdia = FMP4.mdia({\n type: 'video',\n timescale: data.videoTimeScale,\n duration: data.videoDuration,\n vps: data.vps,\n sps: data.sps,\n pps: data.pps,\n pixelRatio: data.pixelRatio,\n width: data.width,\n height: data.height,\n videoCodec: data.videoCodec,\n hvc1Data: data.hvc1Data,\n hvcCData: data.hvcCData,\n stss: data.stss\n });\n [tkhd, mdia].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('trak'), tkhd, mdia)\n return buffer.buffer\n }\n static audioTrak (data) {\n let buffer = new Buffer(); let size = 8\n let tkhd = FMP4.tkhd({\n id: 2,\n duration: data.audioDuration,\n timescale: data.audioTimeScale,\n width: 0,\n height: 0,\n type: 'audio'\n })\n let channelCount = data.channelCount\n let sampleRate = data.sampleRate\n let mdia = FMP4.mdia({\n type: 'audio',\n timescale: data.audioTimeScale,\n duration: data.audioDuration,\n channelCount,\n sampleRate,\n audioConfig: data.audioConfig\n });\n [tkhd, mdia].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('trak'), tkhd, mdia)\n return buffer.buffer\n }\n static tkhd (data) {\n let buffer = new Buffer()\n let id = data.id\n\n let duration = data.duration * data.timeScale\n\n let width = data.width\n\n let height = data.height\n\n let type = data.type\n\n // let upperWordDuration = Math.floor(duration / (UINT32_MAX + 1))\n\n // let lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1))\n let content = new Uint8Array([\n 0x00, // version 1\n 0x00, 0x00, 0x03, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0xD9, 0xAC, 0xEC, 0x56, // modification_time\n (id >> 24) & 0xff,\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n id & 0xff, // track_ID\n 0x00, 0x00, 0x00, 0x00, // reserved\n (duration >> 24) & 0xff,\n (duration >> 16) & 0xff,\n (duration >> 8) & 0xff,\n duration & 0xff, // duration\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, // layer\n 0x00, type === 'video' ? 0x01 : 0x00, // alternate_group\n type === 'audio' ? 0x01 : 0x00, 0x00, // non-audio track volume\n 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n (width >> 8) & 0xff,\n width & 0xff,\n 0x00, 0x00, // width\n (height >> 8) & 0xff,\n height & 0xff,\n 0x00, 0x00 // height\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('tkhd'), content)\n return buffer.buffer\n }\n static edts (data) {\n let buffer = new Buffer(); let duration = data.duration; let mediaTime = data.mediaTime\n buffer.write(FMP4.size(36), FMP4.type('edts'))\n // elst\n buffer.write(FMP4.size(28), FMP4.type('elst'))\n buffer.write(new Uint8Array([\n 0x00, 0x00, 0x00, 0x01, // entry count\n (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff,\n (mediaTime >> 24) & 0xff, (mediaTime >> 16) & 0xff, (mediaTime >> 8) & 0xff, mediaTime & 0xff,\n 0x00, 0x00, 0x00, 0x01 // media rate\n ]))\n return buffer.buffer\n }\n static mdia (data) {\n let buffer = new Buffer(); let size = 8\n let mdhd = FMP4.mdhd(data.timescale)\n let hdlr = FMP4.hdlr(data.type)\n let minf = FMP4.minf(data);\n [mdhd, hdlr, minf].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('mdia'), mdhd, hdlr, minf)\n return buffer.buffer\n }\n static mdhd (timescale, duration = 0) {\n let buffer = new Buffer()\n duration *= timescale\n const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1))\n const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1))\n let content = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0xD9, 0x14, 0x25, 0x5A, // modification_time\n (timescale >> 24) & 0xff, (timescale >> 16) & 0xff, (timescale >> 8) & 0xff, timescale & 0xff,\n 0x00, 0x00, 0x00, 0x00, // duration\n 0x15, 0xC7, // 'und' language\n 0x00, 0x00\n ])\n buffer.write(FMP4.size(12 + content.byteLength), FMP4.type('mdhd'), FMP4.extension(0, 0), content)\n return buffer.buffer\n }\n static hdlr (type) {\n let buffer = new Buffer()\n let value = [0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x56, 0x69, 0x64, 0x65,\n 0x6f, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ]\n if (type === 'audio') {\n value.splice(8, 4, ...[0x73, 0x6f, 0x75, 0x6e])\n value.splice(24, 13, ...[0x53, 0x6f, 0x75, 0x6e,\n 0x64, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00])\n }\n buffer.write(FMP4.size(8 + value.length), FMP4.type('hdlr'), new Uint8Array(value))\n return buffer.buffer\n }\n static minf (data) {\n let buffer = new Buffer(); let size = 8\n let vmhd = data.type === 'video' ? FMP4.vmhd() : FMP4.smhd()\n let dinf = FMP4.dinf()\n let stbl = FMP4.stbl(data);\n [vmhd, dinf, stbl].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('minf'), vmhd, dinf, stbl)\n return buffer.buffer\n }\n static vmhd () {\n let buffer = new Buffer()\n buffer.write(FMP4.size(20), FMP4.type('vmhd'), new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x01, // flags\n 0x00, 0x00, // graphicsmode\n 0x00, 0x00,\n 0x00, 0x00,\n 0x00, 0x00 // opcolor\n ]))\n return buffer.buffer\n }\n static smhd () {\n let buffer = new Buffer()\n buffer.write(FMP4.size(16), FMP4.type('smhd'), new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, // balance\n 0x00, 0x00 // reserved\n ]))\n return buffer.buffer\n }\n static dinf () {\n let buffer = new Buffer()\n let dref = [0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01, // entry_count\n 0x00, 0x00, 0x00, 0x0c, // entry_size\n 0x75, 0x72, 0x6c, 0x20, // 'url' type\n 0x00, // version 0\n 0x00, 0x00, 0x01 // entry_flags\n ]\n buffer.write(FMP4.size(36), FMP4.type('dinf'), FMP4.size(28), FMP4.type('dref'), new Uint8Array(dref))\n return buffer.buffer\n }\n static stbl (data) {\n let buffer = new Buffer(); let size = 8\n let stsd = FMP4.stsd(data)\n let stts = FMP4.stts()\n let stsc = FMP4.stsc()\n let stsz = FMP4.stsz()\n let stco = FMP4.stco();\n if(data.type === 'video') {\n let stss = FMP4.stss(data.stss);\n [stsd, stts, stss, stsc, stsz, stco].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('stbl'), stsd, stts, stss, stsc, stsz, stco)\n } else {\n [stsd, stts, stsc, stsz, stco].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('stbl'), stsd, stts, stsc, stsz, stco)\n }\n \n return buffer.buffer\n }\n static stsd (data) {\n let buffer = new Buffer(); let content\n if (data.type === 'audio') {\n content = FMP4.mp4a(data)\n } else if (data.videoCodec.indexOf('hvc1') > -1) {\n content = FMP4.hvc1(data)\n } else {\n content = FMP4.avc1(data)\n }\n buffer.write(\n FMP4.size(16 + content.byteLength), \n FMP4.type('stsd'), \n FMP4.extension(0, 0), \n new Uint8Array([0x00, 0x00, 0x00, 0x01]),\n content\n )\n return buffer.buffer\n }\n static mp4a (data) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, data.channelCount, // channelcount\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00, // reserved2\n (data.sampleRate >> 8) & 0xff,\n data.sampleRate & 0xff, //\n 0x00, 0x00\n ])\n let esds = FMP4.esds(data.audioConfig)\n buffer.write(FMP4.size(8 + content.byteLength + esds.byteLength), FMP4.type('mp4a'), content, esds)\n return buffer.buffer\n }\n static esds (config = [43, 146, 8, 0]) {\n const configlen = config.length\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n\n 0x03, // descriptor_type\n 0x17 + configlen, // length\n 0x00, 0x01, // es_id\n 0x00, // stream_priority\n\n 0x04, // descriptor_type\n 0x0f + configlen, // length\n 0x40, // codec : mpeg4_audio\n 0x15, // stream_type\n 0x00, 0x00, 0x00, // buffer_size\n 0x00, 0x00, 0x00, 0x00, // maxBitrate\n 0x00, 0x00, 0x00, 0x00, // avgBitrate\n\n 0x05 // descriptor_type\n ].concat([configlen]).concat(config).concat([0x06, 0x01, 0x02]))\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('esds'), content)\n return buffer.buffer\n }\n static avc1 (data) {\n let buffer = new Buffer(); let size = 40// 8(avc1)+8(avcc)+8(btrt)+16(pasp)\n let sps = data.sps; let pps = data.pps; let width = data.width; let height = data.height; let hSpacing = data.pixelRatio[0]; let vSpacing = data.pixelRatio[1]\n let avcc = new Uint8Array([\n 0x01, // version\n sps[1], // profile\n sps[2], // profile compatible\n sps[3], // level\n 0xfc | 3,\n 0xE0 | 1 // 目前只处理一个sps\n ].concat([sps.length >>> 8 & 0xff, sps.length & 0xff]).concat(sps).concat(1).concat([pps.length >>> 8 & 0xff, pps.length & 0xff]).concat(pps))\n let avc1 = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n (width >> 8) & 0xff,\n width & 0xff, // width\n (height >> 8) & 0xff,\n height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n 0x12,\n 0x64, 0x61, 0x69, 0x6C, // dailymotion/hls.js\n 0x79, 0x6D, 0x6F, 0x74,\n 0x69, 0x6F, 0x6E, 0x2F,\n 0x68, 0x6C, 0x73, 0x2E,\n 0x6A, 0x73, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0x11, 0x11]) // pre_defined = -1\n let btrt = new Uint8Array([\n 0x00, 0x1c, 0x9c, 0x80, // bufferSizeDB\n 0x00, 0x2d, 0xc6, 0xc0, // maxBitrate\n 0x00, 0x2d, 0xc6, 0xc0 // avgBitrate\n ])\n let pasp = new Uint8Array([\n (hSpacing >> 24), // hSpacing\n (hSpacing >> 16) & 0xff,\n (hSpacing >> 8) & 0xff,\n hSpacing & 0xff,\n (vSpacing >> 24), // vSpacing\n (vSpacing >> 16) & 0xff,\n (vSpacing >> 8) & 0xff,\n vSpacing & 0xff\n ])\n\n buffer.write(\n FMP4.size(size + avc1.byteLength + avcc.byteLength + btrt.byteLength), FMP4.type('avc1'), avc1,\n FMP4.size(8 + avcc.byteLength), FMP4.type('avcC'), avcc,\n FMP4.size(20), FMP4.type('btrt'), btrt,\n FMP4.size(16), FMP4.type('pasp'), pasp\n )\n return buffer.buffer\n }\n static hvc1 (data) {\n const buffer = new Buffer()\n const content = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n (data.width >> 8) & 0xFF,\n data.width & 0xff, // width\n (data.height >> 8) & 0xFF,\n data.height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n 0x00,\n 0x00, 0x00, 0x00, 0x00, // dailymotion/hls.js\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0xFF, 0xFF,\n ]);\n\n buffer.write(\n FMP4.size(8 + content.byteLength + 8 + data.hvcCData.byteLength + 10), FMP4.type('hvc1'), content,\n FMP4.size(8 + data.hvcCData.byteLength), FMP4.type('hvcC'), new Uint8Array(data.hvcCData),\n FMP4.size(10), FMP4.type('fiel'), new Uint8Array([0x01, 0x00])\n )\n return buffer.buffer\n }\n static stts () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n buffer.write(FMP4.size(16), FMP4.type('stts'), content)\n return buffer.buffer\n }\n static stss (stssObj) {\n let buffer = new Buffer()\n let entries = [];\n stssObj.entries.forEach(item => {\n entries.push(item >> 24)\n entries.push((item >> 16) & 0xff)\n entries.push((item >> 8) & 0xff)\n entries.push(item & 0xff)\n })\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n (stssObj.count >> 24), // entry_count\n (stssObj.count >> 16) & 0xff,\n (stssObj.count >> 8) & 0xff,\n stssObj.count & 0xff,\n ].concat(entries))\n buffer.write(FMP4.size(8+8+4*stssObj.count), FMP4.type('stss'), content)\n return buffer.buffer\n }\n static stsc () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n buffer.write(FMP4.size(16), FMP4.type('stsc'), content)\n return buffer.buffer\n }\n static stco () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n buffer.write(FMP4.size(16), FMP4.type('stco'), content)\n return buffer.buffer\n }\n static stsz () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // sample_size\n 0x00, 0x00, 0x00, 0x00 // sample_count\n ])\n buffer.write(FMP4.size(20), FMP4.type('stsz'), content)\n return buffer.buffer\n }\n static mvex (duration, timeScale) {\n let buffer = new Buffer()\n let mehd = Buffer.writeUint32(duration * timeScale)\n buffer.write(FMP4.size(88), FMP4.type('mvex'), FMP4.size(16), FMP4.type('mehd'), FMP4.extension(0, 0), mehd, FMP4.trex1(1), FMP4.trex2(2))\n return buffer.buffer\n }\n static trex (id) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('trex'), content)\n return buffer.buffer\n }\n static trex1 (id) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x02, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x00 // default_sample_flags\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('trex'), content)\n return buffer.buffer\n }\n static trex2 (id) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x04, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x02, 0x00, 0x00, 0x00 // default_sample_flags\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('trex'), content)\n return buffer.buffer\n }\n static moof (data) {\n let buffer = new Buffer(); let size = 8\n let mfhd = FMP4.mfhd(data)\n let traf = FMP4.traf(data);\n [mfhd, traf].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('moof'), mfhd, traf)\n return buffer.buffer\n }\n static mfhd (data) {\n let buffer = new Buffer()\n let content = null;\n if (data.id === 1) {\n content = Buffer.writeUint32((data.fragIndex || 0) + 1)\n }\n else {\n content = Buffer.writeUint32((data.fragIndex || 0) + 1)\n }\n buffer.write(FMP4.size(16), FMP4.type('mfhd'), FMP4.extension(0, 0), content)\n return buffer.buffer\n }\n static traf (data) {\n let buffer = new Buffer(); let size = 8\n let tfhd = FMP4.tfhd(data.id)\n let tfdt = FMP4.tfdt(data, data.time)\n let sdtp = FMP4.sdtp(data)\n let trun = FMP4.trun(data, sdtp.byteLength);\n [tfhd, tfdt, sdtp, trun].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('traf'), tfhd, tfdt, sdtp, trun)\n return buffer.buffer\n }\n static tfhd (id) {\n let buffer = new Buffer()\n let content = Buffer.writeUint32(id)\n buffer.write(FMP4.size(16), FMP4.type('tfhd'), new Uint8Array([\n 0x00, 0x02, 0x00, 0x00\n ]), content)\n return buffer.buffer\n }\n static tfdt (data, time) {\n let buffer = new Buffer()\n let upper = Math.floor(time / (UINT32_MAX + 1))\n let lower = Math.floor(time % (UINT32_MAX + 1))\n buffer.write(FMP4.size(20), FMP4.type('tfdt'), FMP4.extension(1, 0), Buffer.writeUint32(upper), Buffer.writeUint32(lower))\n return buffer.buffer\n }\n static trun (data, sdtpLength) {\n let id = data.id\n let ceil = id === 1 ? 16 : 12\n let buffer = new Buffer()\n let sampleCount = Buffer.writeUint32(data.samples.length)\n // mdat-header 8\n // moof-header 8\n // mfhd 16\n // traf-header 8\n // thhd 16\n // tfdt 20\n // trun-header 12\n // sampleCount 4\n // data-offset 4\n // samples.length\n let offset = Buffer.writeUint32(8 + 8 + 16 + 8 + 16 + 20 + 12 + 4 + 4 + ceil * data.samples.length + sdtpLength)\n buffer.write(FMP4.size(20 + ceil * data.samples.length), FMP4.type('trun'), FMP4.extension(0, data.flags), sampleCount, offset)\n data.samples.forEach((item, idx) => {\n buffer.write(Buffer.writeUint32(item.duration))\n buffer.write(Buffer.writeUint32(item.size))\n if (id === 1) {\n buffer.write(Buffer.writeUint32(item.key ? 0x02000000 : 0x01010000))\n buffer.write(Buffer.writeUint32(item.offset))\n } else {\n buffer.write(Buffer.writeUint32(0x1000000))\n }\n })\n return buffer.buffer\n }\n static sdtp (data) {\n let buffer = new Buffer()\n buffer.write(FMP4.size(12 + data.samples.length), FMP4.type('sdtp'), FMP4.extension(0, 0))\n data.samples.forEach(item => {\n buffer.write(new Uint8Array(data.id === 1 ? [item.key ? 32 : 16] : [16]))\n })\n return buffer.buffer\n }\n static mdat (data) {\n let buffer = new Buffer(); \n let size = 8;\n data.samples.forEach(item => {\n size += item.size\n })\n buffer.write(FMP4.size(size), FMP4.type('mdat'))\n data.samples.forEach(item => {\n buffer.write(item.buffer)\n })\n return buffer.buffer\n }\n}\n\nexport default FMP4","export default function getResponseHeaders(xhr) {\n const headerMap = {};\n if (xhr instanceof window.XMLHttpRequest) {\n try {\n const headers = xhr.getAllResponseHeaders();\n\n const arr = headers.trim().split(/[\\r\\n]+/);\n arr.forEach(function (line) {\n const parts = line.split(': ');\n const header = parts.shift();\n const value = parts.join(': ');\n headerMap[header] = value;\n });\n } catch (error) {\n }\n }\n return headerMap;\n}","let util = {}\n\n/**\n * [使用递归查询指定type的box]\n * var mimeCodec = 'video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"';\n * @param {Object} root [JSON对象]\n * @param {String} type [box的类型]\n * @param {?Array} type [box]\n * @return {Object|Array<Object>|undefined} [box]\n */\nutil.findBox = function (root, type, result = []) {\n if (root.type !== type) {\n if (root && root.subBox) {\n let box = root.subBox.filter(item => item.type === type)\n if (box.length) {\n box.forEach(item => result.push(item))\n } else {\n root.subBox.forEach(item => util.findBox(item, type, result))\n }\n }\n } else {\n result.push(root)\n }\n result = [].concat(result)\n return result.length > 1 ? result : result[0]\n}\n\nutil.padStart = function (str, length, pad) {\n let charstr = String(pad); let len = length >> 0; let maxlen = Math.ceil(len / charstr.length)\n let chars = []; let r = String(str)\n while (maxlen--) {\n chars.push(charstr)\n }\n return chars.join('').substring(0, len - r.length) + r\n}\n\n/**\n * [十进制转十六进制]\n * @param {Number} value [要转换的十进制数字]\n * @return {String} [十六进制]\n */\nutil.toHex = function (...value) {\n let hex = []\n value.forEach(item => {\n hex.push(util.padStart(Number(item).toString(16), 2, 0))\n })\n return hex\n}\n\n/**\n * [求和计算]\n * @param {[type]} rst [description]\n * @return {[type]} [description]\n */\nutil.sum = function (...rst) {\n let count = 0\n rst.forEach(item => { count += item })\n return count\n}\n\n/**\n * [计算音视频数据在Mdat中的偏移量]\n * @param {Array} stsc [块偏移量]\n * @param {Number} sample_order [帧次序]\n * @return {Object} [块的位置和当前帧的偏移数]\n */\nutil.stscOffset = function (stsc, sample_order, stscObj) {\n let chunk_index; let samples_offset = ''\n // let chunk_start = stsc.entries.filter((item) => {\n // return item.first_sample <= sample_order && sample_order < item.first_sample + item.chunk_count * item.samples_per_chunk\n // })[0]\n let chunk_start = stscObj[sample_order];\n if (!chunk_start) {\n let last_chunk = stsc.entries.pop()\n stsc.entries.push(last_chunk)\n let chunk_offset = Math.floor((sample_order - last_chunk.first_sample) / last_chunk.samples_per_chunk)\n let last_chunk_index = last_chunk.first_chunk + chunk_offset\n let last_chunk_first_sample = last_chunk.first_sample + last_chunk.samples_per_chunk * chunk_offset\n return {\n chunk_index: last_chunk_index,\n samples_offset: [last_chunk_first_sample, sample_order]\n }\n } else {\n let chunk_offset = Math.floor((sample_order - chunk_start.first_sample) / chunk_start.samples_per_chunk)\n let chunk_offset_sample = chunk_start.first_sample + chunk_offset * chunk_start.samples_per_chunk\n chunk_index = chunk_start.first_chunk + chunk_offset\n samples_offset = [chunk_offset_sample, sample_order]\n return {\n chunk_index: chunk_index,\n samples_offset\n }\n }\n}\n\nutil.seekSampleOffset = function (stsc, stco, stsz, order, mdatStart, stscObj) {\n let chunkOffset = util.stscOffset(stsc, order + 1, stscObj)\n let sum = util.sum.apply(null, stsz.entries.slice(chunkOffset.samples_offset[0] - 1, chunkOffset.samples_offset[1] - 1))\n let ss = stco.entries[chunkOffset.chunk_index - 1]\n let result = ss + sum - mdatStart\n if (result === undefined) {\n throw `result=${result},stco.length=${stco.entries.length},sum=${util.sum.apply(null, stsz.entries.slice(0, order))}`\n } else if (result < 0) {\n throw `result=${result},stco.length=${stco.entries.length},sum=${util.sum.apply(null, stsz.entries.slice(0, order))}`\n }\n return result\n}\n\nutil.seekSampleTime = function (stts, cttsObj, order) {\n let time; let duration; let count = 0; let startTime = 0; let offset = 0\n stts.entry.every(item => {\n duration = item.sampleDuration\n if (order < count + item.sampleCount) {\n time = startTime + (order - count) * item.sampleDuration\n return false\n } else {\n count += item.sampleCount\n startTime += item.sampleCount * duration\n return true\n }\n })\n if (cttsObj) {\n if(cttsObj[order]){\n offset = cttsObj[order]\n }\n }\n if (!time) {\n time = startTime + (order - count) * duration\n }\n return {time, duration, offset}\n}\n\nutil.seekOrderSampleByTime = function (stts, timeScale, time) {\n let startTime = 0; let order = 0; let count = 0; let itemDuration\n stts.every((item, idx) => {\n itemDuration = item.sampleCount * item.sampleDuration / timeScale\n if (time <= startTime + itemDuration) {\n order = count + Math.ceil((time - startTime) * timeScale / item.sampleDuration)\n startTime = startTime + Math.ceil((time - startTime) * timeScale / item.sampleDuration) * item.sampleDuration / timeScale\n return false\n } else {\n startTime += itemDuration\n count += item.sampleCount\n return true\n }\n })\n return {order, startTime}\n}\n\nutil.seekTrakDuration = function (trak, timeScale) {\n let stts = util.findBox(trak, 'stts'); let duration = 0\n stts.entry.forEach(item => {\n duration += item.sampleCount * item.sampleDuration\n })\n return Number(duration / timeScale).toFixed(4)\n}\n\nutil.StringToArrayBuffer = function (str) {\n let arr = new ArrayBuffer(str.length)\n let view = new Uint8Array(arr)\n for (let i = 0; i < str.length; i++) {\n view[i] = str.charCodeAt(i)\n }\n return arr\n}\n/**\n * Convert a hex string to a Uint8Array.\n * @param {string} str\n * @return {!Uint8Array}\n * @export\n */\nutil.fromHex = function (str) {\n let arr = new Uint8Array(str.length / 2)\n for (let i = 0; i < str.length; i += 2) {\n arr[i / 2] = window.parseInt(str.substr(i, 2), 16)\n }\n return arr\n}\nutil.fromCharCode = function (array) {\n let max = 16000\n let ret = ''\n for (let i = 0; i < array.length; i += max) {\n let subArray = array.subarray(i, i + max)\n ret += String.fromCharCode.apply(null, subArray)\n }\n\n return ret\n}\nutil.ArrayBufferToString = function (arr) {\n let str = ''\n let view = new Uint8Array(arr)\n for (let i = 0; i < view.length; i++) {\n str += String.fromCharCode(view[i])\n }\n return str\n}\nutil.Base64ToHex = function (str) {\n let bin = window.atob(str.replace(/-/g, '+').replace(/_/g, '/'))\n let res = ''\n for (let i = 0; i < bin.length; i++) {\n res += ('0' + bin.charCodeAt(i).toString(16)).substr(-2)\n }\n return res\n}\n\n/**\n * Convert a Uint8Array to a base64 string. The output will always use the\n * alternate encoding/alphabet also known as \"base64url\".\n * @param {!Uint8Array} arr\n * @param {boolean=} padding If true, pad the output with equals signs.\n * Defaults to true.\n * @return {string}\n * @export\n */\nutil.toBase64 = function (arr, padding) {\n // btoa expects a \"raw string\" where each character is interpreted as a byte.\n let bytes = util.fromCharCode(arr)\n padding = (padding === undefined) ? true : padding\n let base64 = window.btoa(bytes).replace(/\\+/g, '-').replace(/\\//g, '_')\n return padding ? base64 : base64.replace(/=*$/, '')\n}\n\nutil.toUTF8 = function (str) {\n // http://stackoverflow.com/a/13691499\n // Converts the given string to a URI encoded string. If a character falls\n // in the ASCII range, it is not converted; otherwise it will be converted to\n // a series of URI escape sequences according to UTF-8.\n // Example: 'g#€' -> 'g#%E3%82%AC'\n let encoded = encodeURIComponent(str)\n // Convert each escape sequence individually into a character. Each escape\n // sequence is interpreted as a code-point, so if an escape sequence happens\n // to be part of a multi-byte sequence, each byte will be converted to a\n // single character.\n // Example: 'g#%E3%82%AC' -> '\\x67\\x35\\xe3\\x82\\xac'\n let utf8 = unescape(encoded)\n\n let result = new Uint8Array(utf8.length)\n for (let i = 0; i < utf8.length; ++i) {\n result[i] = utf8.charCodeAt(i)\n }\n return result.buffer\n}\n\nutil.bufferToString = function (value) {\n return (\"0\"+(Number(value).toString(16))).slice(-2).toUpperCase()\n}\nutil.strToBuf = function (str) {\n let buffer = []\n for(let i = 0; i < str.length; i = i + 2) {\n buffer.push(\n parseInt(str[i] + str[i + 1], 16)\n )\n }\n return new Uint8Array(buffer)\n}\nutil.str2hex = function (str) {\n if(str === \"\") {\n return \"\"\n }\n let arr = [];\n for(let i = 0; i < str.length; i++) {\n arr.push(str.charCodeAt(i))\n }\n return arr\n}\nutil.parse = function (a) {\n if (!Array.isArray(a)) {\n let arr = [];\n let value = '';\n for(let i = 0; i < a.length; i++) {\n if (i % 2) {\n value = a[i - 1] + a[ i ]\n arr.push(parseInt(value, 16))\n value = ''\n }\n }\n return arr\n }\n return a.map(item => {return parseInt(item, 16)})\n}\nexport default util\n","import EventEmitter from 'event-emitter'\nimport Errors from '../error'\n\nclass MSE {\n constructor (codecs = 'video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"', mediaType) {\n EventEmitter(this)\n this.codecs = codecs\n this.mediaSource = new window.MediaSource(mediaType)\n this.url = window.URL.createObjectURL(this.mediaSource)\n this.queue = []\n this.updating = false\n this._hasDestroyed = false;\n this._hasEndOfStream = false;\n this._hasEndOfStreamSuccess = false;\n this._onSourceOpen = this._onSourceOpen.bind(this);\n this._onMediaSourceClose = this._onMediaSourceClose.bind(this);\n this._onSourceBufferError = this._onSourceBufferError.bind(this);\n this._onSourceBufferUpdateEnd = this._onSourceBufferUpdateEnd.bind(this);\n this.mediaSource.addEventListener('sourceopen', this._onSourceOpen);\n this.mediaSource.addEventListener('sourceclose', this._onMediaSourceClose);\n }\n\n _onSourceOpen(){\n let self = this;\n self.sourceBuffer = self.mediaSource.addSourceBuffer(self.codecs);\n self.sourceBuffer.addEventListener('error', this._onSourceBufferError);\n self.sourceBuffer.addEventListener('updateend', this._onSourceBufferUpdateEnd);\n self.emit('sourceopen')\n }\n\n _onSourceBufferError(e){\n this.emit('error', new Errors('mse', '', {line: 16, handle: '[MSE] constructor sourceopen', msg: e.message}))\n }\n\n _onSourceBufferUpdateEnd(){\n let self = this;\n self.emit('updateend');\n if(this._hasEndOfStream && !this._hasEndOfStreamSuccess){\n this._endOfStream();\n return;\n }\n let buffer = self.queue.shift()\n if (buffer && self.sourceBuffer && self.sourceBuffer.updating === false && self.state === 'open') {\n self.sourceBuffer.appendBuffer(buffer)\n } else if(buffer) {\n self.queue.unshift(buffer);\n }\n }\n\n _onMediaSourceClose(){\n this.emit('sourceclose')\n }\n\n get state () {\n return this.mediaSource.readyState\n }\n\n get duration () {\n return this.mediaSource.duration\n }\n\n set duration (value) {\n this.mediaSource.duration = value\n }\n\n appendBuffer (buffer) {\n if(!buffer) return;\n \n let sourceBuffer = this.sourceBuffer\n if (sourceBuffer && !sourceBuffer.updating && this.state === 'open') {\n sourceBuffer.appendBuffer(buffer)\n return true\n } else {\n this.queue.push(buffer)\n return false\n }\n }\n\n removeBuffer (start, end) {\n let sourceBuffer = this.sourceBuffer\n if (sourceBuffer && sourceBuffer.updating === false && this.state === 'open') {\n sourceBuffer.remove(start, end)\n }\n }\n\n endOfStream () {\n this._hasEndOfStream = true;\n if (this.mediaSource.readyState === 'open') {\n if(this.sourceBuffer && !this.sourceBuffer.updating){\n this._hasEndOfStreamSuccess = true;\n this._endOfStream();\n }\n \n }\n }\n\n _endOfStream(){\n this.queue = [];\n if(this.mediaSource.readyState === 'open'){\n this.mediaSource.endOfStream()\n }\n }\n\n static isSupported (codecs) {\n return window.MediaSource && window.MediaSource.isTypeSupported(codecs)\n }\n\n destroy(){\n if(this._hasDestroyed){\n return;\n }\n this._hasDestroyed = true;\n window.URL.revokeObjectURL(this.url);\n if(this.mediaSource) {\n this.mediaSource.removeEventListener('sourceclose', this._onMediaSourceClose);\n this.mediaSource.removeEventListener('sourceopen', this._onSourceOpen);\n }\n if(this.sourceBuffer) {\n this.sourceBuffer.removeEventListener('error', this._onSourceBufferError);\n this.sourceBuffer.removeEventListener('updateend', this._onSourceBufferUpdateEnd);\n }\n }\n}\n\nexport default MSE\n","exports.isMSBrowser = function () {\n let ua = window.navigator.userAgent\n let msie = ua.indexOf('MSIE ')\n let trident = ua.indexOf('Trident/')\n return msie > 0 || trident > 0\n}\n\nexports.isMediaSourceSupported = function () {\n const mediaSource = (window.MediaSource = window.MediaSource || window.WebKitMediaSource)\n return mediaSource && typeof mediaSource.isTypeSupported === 'function'\n}\n\nexports.isSupported = function () {\n return exports.isMediaSourceSupported()\n && !exports.isMSBrowser() \n}\n\nexports.isSupportedWithXgmse = function () {\n return !exports.isMSBrowser() \n}\n","\nexport default class ProxyPromise {\n \n constructor() {\n let resolvePromise;\n let rejectPromise;\n\n const promise = new Promise(((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n }));\n\n const publicPromise = promise\n publicPromise.resolve = resolvePromise;\n publicPromise.reject = rejectPromise;\n\n return publicPromise;\n }\n\n\n /** @param {T=} value */\n resolve(value) {}\n\n\n /** @param {*=} reason */\n reject(reason) {}\n};\n","export default class Timer{\n \n constructor(onTick) {\n this.onTick_ = onTick;\n this.cancelPending_ = null;\n }\n\n tickAfter(delayInSeconds, callback = null) {\n \n this.stop();\n let alive = true;\n let timeoutId = null;\n \n this.cancelPending_ = () => {\n window.clearTimeout(timeoutId);\n alive = false;\n };\n \n const onTick = () => {\n if (alive) {\n this.onTick_();\n if(callback){\n callback();\n }\n }\n };\n \n timeoutId = window.setTimeout(onTick, delayInSeconds * 1000);\n \n return this;\n }\n\n tickEvery(seconds){\n this.tickAfter(seconds, ()=>{\n this.tickEvery(seconds);\n })\n }\n\n\n stop() {\n if (this.cancelPending_) {\n this.cancelPending_();\n this.cancelPending_ = null;\n }\n }\n }\n","/***\n * 音视频源数据不对齐或者 关键视频帧存在cts,导致浏览器播不动场景下\n *\n * reference shakaplayer, 借鉴shakaplayer,根据项目逻辑进行改造\n */\n\nimport IntervalTimer from './util/intervalTimer';\nexport default class GapJump {\n \n constructor(player, config) {\n this.player = player;\n this.mediaElem = player.video;\n this.config = config;\n this.timer = new IntervalTimer();\n\n this.prevReadyState = this.mediaElem.readyState;\n this.didFireLargeGap = false;\n this.seekingEventReceived = false;\n this.segmentAppended = false;\n this.onWaitFunc = this._onWaiting.bind(this);\n this.onPlayFunc = this._onPlay.bind(this);\n this.isSafari = /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n if (this.config.useGapJump !== false) {\n this._start();\n }\n\n this.hasPlayed = false;\n }\n _onWaiting() {\n this.onGapJump('_onWaiting');\n }\n\n _onPlay() {\n this.hasPlayed = true;\n }\n\n _start() {\n this.mediaElem.addEventListener('waiting', this.onWaitFunc);\n this.mediaElem.addEventListener('play', this.onPlayFunc);\n //250ms\n this.timer.repeat(() => {\n this.onGapJump('repeat');\n }, 250);\n }\n\n onSegmentAppend() {\n this.segmentAppended = true;\n this.onGapJump('onSegmentAppend');\n }\n \n onSeeking() {\n this.seekingEventReceived = true;\n this.segmentAppended = false;\n this.didFireLargeGap = false;\n }\n \n onGapJump(type) {\n if (this.mediaElem.readyState === HTMLMediaElement.HAVE_NOTHING) {\n return;\n }\n if (this.mediaElem.seeking) {\n if (!this.seekingEventReceived) { return; }\n } else {\n this.seekingEventReceived = false;\n }\n\n if (this.mediaElem.paused && this.mediaElem.currentTime !== 0 && this.hasPlayed) {\n return;\n }\n if (this.mediaElem.readyState !== this.prevReadyState) {\n this.didFireLargeGap = false;\n this.prevReadyState = this.mediaElem.readyState;\n }\n\n const buffered = this.mediaElem.buffered;\n const smallGapLimit = this.config.smallGapLimit || 0.5;\n const gapDetectionThreshold = this.config.gapDetectionThreshold || 0.1;\n const currentTime = this.mediaElem.currentTime;\n const idx = this._getIndex(buffered, currentTime, gapDetectionThreshold);\n if (idx === null) {\n return;\n }\n if (idx === 0 && !this.segmentAppended) {\n return;\n }\n\n const jumpTo = buffered.start(idx) + 0.1;\n const seekEnd = this.mediaElem.duration;\n\n if (jumpTo > seekEnd) {\n return;\n }\n const jumpSize = jumpTo - currentTime;\n const isGapSmall = jumpSize <= smallGapLimit;\n let jumpLargeGap = false;\n if (jumpSize < GapJump.BROWSER_GAP_TOLERANCE) {\n return;\n }\n //对于分片缺失,目前未处理\n if (isGapSmall) {\n if (this.config.disableGapSetPosition !== true) {\n this.mediaElem.currentTime = this.isSafari ? jumpTo + 0.1 : jumpTo;\n }\n this.player && this.player.emit('detectGap');\n }\n\n }\n \n _getIndex(buffered, time, threshold) {\n if (!buffered || !buffered.length) {\n return null;\n }\n if (buffered.length === 1 && buffered.end(0) - buffered.start(0) < 1e-6) {\n return null;\n }\n const bufferedInfo = this._getBuffered(buffered);\n let idx = null;\n for (let i = 0; i < bufferedInfo.length; i++) {\n let item = bufferedInfo[i];\n if (item.start > time && (i === 0 || bufferedInfo[i - 1].end - time <= threshold)) {\n idx = i;\n break;\n }\n }\n return idx;\n }\n \n _getBuffered(b) {\n if (!b) {\n return [];\n }\n const ret = [];\n for (let i = 0; i < b.length; i++) {\n ret.push({\n start: b.start(i),\n end: b.end(i)\n });\n }\n return ret;\n }\n\n destroy() {\n this.mediaElem.removeEventListener('waiting', this.onWaitFunc);\n this.mediaElem.removeEventListener('play', this.onPlayFunc);\n this.timer.clear();\n this.timer = null;\n }\n }\n \n GapJump.BROWSER_GAP_TOLERANCE = 0.001;\n ","// 替代setInterval\nclass IntervalTimer {\n constructor() {\n this.timeID = null;\n this.func = null;\n }\n\n repeat(func, ms) {\n this.timeID = 1;\n this.repeatInterval(func, ms);\n }\n\n repeatInterval(func, ms) {\n if (!this.timeID) return;\n if (this.func === null) {\n this.func = func;\n }\n\n if (this.func !== func) {\n return;\n }\n if (this.timeID) clearTimeout(this.timeID);\n this.timeID = null;\n this.timeID = setTimeout(() => {\n func();\n this.repeatInterval(func, ms);\n }, ms);\n }\n\n clear() {\n clearTimeout(this.timeID);\n this.timeID = null;\n }\n}\n\nexport default IntervalTimer;\n"],"sourceRoot":""}