S&&(O=t[F=C[S]],t[F]=t[S],t[S]=O,O=s[F],s[F]=s[S],s[S]=O)};var p=t>>1;return i.unpack=function(e,s,d,h){e[0]=i.m_re[0],d[0]=i.m_im[0],s[0]=h[0]=0,e[p]=i.m_re[p],d[p]=i.m_im[p],s[p]=h[p]=0;for(var u=1;u{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=class Bisector{constructor(e){this.lower=e.start,this.upper=e.end,this.onprocess=e.process,this.position=0,this.n=0}iterate(){return this.n++,this.position=Math.floor((this.lower+this.upper)/2),this.onprocess(this.lower,this.upper,this.position)}start(){return this.iterate(),this}left(){return this.upper=this.position,this.iterate()}right(){return this.lower=this.position,this.iterate()}};t.default=i},523:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=new class{hasTypedArrays(){return!!window.Uint32Array}hasWebAssembly(){return!!window.WebAssembly}hasWebAudio(){return!(!window.AudioContext&&!window.webkitAudioContext)}hasFlash(){return!1}hasAudio(){return this.hasWebAudio()}isBlacklisted(e){return!1}isSlow(){return!1}isTooSlow(){return!1}supported(e){return"OGVDecoder"===e?this.hasWebAssembly():"OGVPlayer"===e&&(this.supported("OGVDecoder")&&this.hasAudio())}};t.default=i},408:(e,t,i)=>{"use strict";var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(580));class OGVDecoderAudioProxy extends((0,d.default)({loadedMetadata:!1,audioFormat:null,audioBuffer:null,cpuTime:0})){init(e){this.proxy("init",[],e)}processHeader(e,t){this.proxy("processHeader",[e],t,[e])}processAudio(e,t){this.proxy("processAudio",[e],t,[e])}close(){this.terminate()}}var h=OGVDecoderAudioProxy;t.default=h},319:(e,t,i)=>{"use strict";var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(580));class OGVDecoderVideoProxy extends((0,d.default)({loadedMetadata:!1,videoFormat:null,frameBuffer:null,cpuTime:0})){init(e){this.proxy("init",[],e)}processHeader(e,t){this.proxy("processHeader",[e],t,[e])}processFrame(e,t){this.proxy("processFrame",[e],t,[e])}close(){this.terminate()}sync(){this.proxy("sync",[],(()=>{}))}recycleFrame(e){this.proxy("recycleFrame",[e],(()=>{}),[e.y.bytes.buffer,e.u.bytes.buffer,e.v.bytes.buffer])}}var h=OGVDecoderVideoProxy;t.default=h},445:(e,t,i)=>{"use strict";var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(539)),h="1.8.6-20220111172545-1f60d9d",u={OGVDemuxerOggW:"ogv-demuxer-ogg-wasm.js",OGVDemuxerWebMW:"ogv-demuxer-webm-wasm.js",OGVDecoderAudioOpusW:"ogv-decoder-audio-opus-wasm.js",OGVDecoderAudioVorbisW:"ogv-decoder-audio-vorbis-wasm.js",OGVDecoderVideoTheoraW:"ogv-decoder-video-theora-wasm.js",OGVDecoderVideoVP8W:"ogv-decoder-video-vp8-wasm.js",OGVDecoderVideoVP8MTW:"ogv-decoder-video-vp8-mt-wasm.js",OGVDecoderVideoVP9W:"ogv-decoder-video-vp9-wasm.js",OGVDecoderVideoVP9SIMDW:"ogv-decoder-video-vp9-simd-wasm.js",OGVDecoderVideoVP9MTW:"ogv-decoder-video-vp9-mt-wasm.js",OGVDecoderVideoVP9SIMDMTW:"ogv-decoder-video-vp9-simd-mt-wasm.js",OGVDecoderVideoAV1W:"ogv-decoder-video-av1-wasm.js",OGVDecoderVideoAV1SIMDW:"ogv-decoder-video-av1-simd-wasm.js",OGVDecoderVideoAV1MTW:"ogv-decoder-video-av1-mt-wasm.js",OGVDecoderVideoAV1SIMDMTW:"ogv-decoder-video-av1-simd-mt-wasm.js"};var c=class OGVLoaderBase{constructor(){this.base=this.defaultBase()}defaultBase(){}wasmSupported(){return d.default.wasmSupported()}scriptForClass(e){return u[e]}urlForClass(e){var t=this.scriptForClass(e);if(t)return this.urlForScript(t);throw new Error("asked for URL for unknown class "+e)}urlForScript(e){if(e){var t=this.base;return void 0===t?t="":t+="/",t+e+"?version="+encodeURIComponent(h)}throw new Error("asked for URL for unknown script "+e)}loadClass(e,t,i){i=i||{};var s=this.getGlobal(),d=this.urlForClass(e),classWrapper=t=>((t=t||{}).locateFile=e=>"data:"===e.slice(0,5)?e:this.urlForScript(e),t.mainScriptUrlOrBlob=this.scriptForClass(e)+"?version="+encodeURIComponent(h),s[e](t));"function"==typeof s[e]?t(classWrapper):this.loadScript(d,(()=>{t(classWrapper)}))}};t.default=c},964:(e,t,i)=>{"use strict";var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(408)),h=s(i(319)),u=s(i(445)),c={audio:{proxy:d.default,worker:"ogv-worker-audio.js"},video:{proxy:h.default,worker:"ogv-worker-video.js"}},l={OGVDecoderAudioOpusW:"audio",OGVDecoderAudioVorbisW:"audio",OGVDecoderVideoTheoraW:"video",OGVDecoderVideoVP8W:"video",OGVDecoderVideoVP9W:"video",OGVDecoderVideoVP9SIMDW:"video",OGVDecoderVideoAV1W:"video",OGVDecoderVideoAV1SIMDW:"video"};class OGVLoaderWeb extends u.default{constructor(){super(),this.scriptStatus={},this.scriptCallbacks={}}getGlobal(){return window}defaultBase(){for(var e,t,i=document.querySelectorAll("script"),s=/^(?:|(.*)\/)ogv(?:-support|-es2017)?\.js(?:\?|#|$)/,d=0;d{var i=this.scriptCallbacks[e];delete this.scriptCallbacks[e],this.scriptStatus[e]="done",i.forEach((e=>{e()}))};i.addEventListener("load",done),i.addEventListener("error",done),i.src=e,document.querySelector("head").appendChild(i)}}workerProxy(e,t){var i=c[l[e]];if(!i)throw new Error("Requested worker for class with no proxy: "+e);var s,d=i.proxy,h=i.worker,u=this.urlForScript(this.scriptForClass(e)),_=this.urlForScript(h),p=function construct(t){return new d(s,e,t)};if(_.match(/^https?:|\/\//i)){var m,g,v,y,b,T=!1,k=!1;function completionCheck(){if(1==T&&1==k){var e=v+" "+y+"\nOGVLoader.base = "+JSON.stringify(f.base);try{b=new Blob([e],{type:"application/javascript"})}catch(t){window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,(b=new BlobBuilder).append(e),b=b.getBlob()}s=new Worker(URL.createObjectURL(b)),t((function(e){return Promise.resolve(new p(e))}))}}(m=new XMLHttpRequest).open("GET",u,!0),m.onreadystatechange=function(){4==m.readyState&&200==m.status&&(v=m.responseText,T=!0,completionCheck())},m.send(),(g=new XMLHttpRequest).open("GET",_,!0),g.onreadystatechange=function(){4==g.readyState&&200==g.status&&(y=g.responseText,k=!0,completionCheck())},g.send()}else s=new Worker(_),t((function(e){return Promise.resolve(new p(e))}))}}var f=new OGVLoaderWeb,_=f;t.default=_},759:(e,t,i)=>{"use strict";var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(309)),h={MEDIA_ERR_ABORTED:1,MEDIA_ERR_NETWORK:2,MEDIA_ERR_DECODE:3,MEDIA_ERR_SRC_NOT_SUPPORTED:4};class OGVMediaError{constructor(e,t){this.code=e,this.message=t}}(0,d.default)(OGVMediaError,h),(0,d.default)(OGVMediaError.prototype,h);var u=OGVMediaError;t.default=u},278:(e,t)=>{"use strict";function split(e,t,i){var s=e.split(t,i).map((e=>function trim(e){return e.replace(/^\s+/,"").replace(/\s+$/,"")}(e)));if("number"==typeof i)for(;s.length{"use strict";var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d,h=s(i(731)),u=s(i(936)),c=s(i(848)),l=s(i(964)),f=s(i(893)),_=s(i(309)),p=s(i(759)),m=s(i(278)),g=s(i(168)),v=s(i(625)),y=(()=>{if("function"==typeof setImmediate)return setImmediate;var e=new MessageChannel,t=[];return e.port1.onmessage=e=>{t.shift()()},function nextTick(i){t.push(i),e.port2.postMessage({})}})(),b={NETWORK_EMPTY:0,NETWORK_IDLE:1,NETWORK_LOADING:2,NETWORK_NO_SOURCE:3,HAVE_NOTHING:0,HAVE_METADATA:1,HAVE_CURRENT_DATA:2,HAVE_FUTURE_DATA:3,HAVE_ENOUGH_DATA:4},T="INITIAL",k="SEEKING_END",w="LOADED",P="PRELOAD",E="READY",x="PLAYING",A="SEEKING",R="ERROR",F="NOT_SEEKING",O="BISECT_TO_TARGET",C="BISECT_TO_KEYPOINT",S="LINEAR_TO_TARGET",B="exact",D="fast";function OGVJSElement(){var e=document.createElement("ogvjs");return Object.setPrototypeOf?Object.setPrototypeOf(e,Object.getPrototypeOf(this)):e.__proto__=this.__proto__,e}d="undefined"==typeof performance||void 0===typeof performance.now?Date.now:performance.now.bind(performance),OGVJSElement.prototype=Object.create(HTMLElement.prototype,{});class OGVPlayer extends OGVJSElement{constructor(e){if(super(),(e=e||{}).base=e.base||l.default.base,this._options=e,this._instanceId="ogvjs"+ ++OGVPlayer.instanceCount,void 0!==e.worker?this._enableWorker=!!e.worker:this._enableWorker=!!window.Worker,!l.default.wasmSupported())throw new Error("WebAssembly not supported");this._enableThreading=!!e.threading,this._enableSIMD=!!e.simd,this._state=T,this._seekState=F,this._detectedType=null,this._canvas=document.createElement("canvas"),this._frameSink=null,this.className=this._instanceId,(0,_.default)(this,b),this._view=this._canvas,this._view.style.position="absolute",this._view.style.top="0",this._view.style.left="0",this._view.style.width="100%",this._view.style.height="100%",this._view.style.objectFit="contain",this.appendChild(this._view),this._startTime=d(),this._codec=null,this._audioInfo=null,this._videoInfo=null,this._actionQueue=[],this._audioFeeder=null,this._muted=!1,this._initialPlaybackPosition=0,this._initialPlaybackOffset=0,this._prebufferingAudio=!1,this._initialSeekTime=0,this._currentSrc="",this._streamEnded=!1,this._mediaError=null,this._dataEnded=!1,this._byteLength=0,this._duration=null,this._lastSeenTimestamp=null,this._nextProcessingTimer,this._nextFrameTimer=null,this._loading=!1,this._started=!1,this._paused=!0,this._ended=!1,this._startedPlaybackInDocument=!1,this._stream=void 0,this._framesProcessed=0,this._targetPerFrameTime=1e3/60,this._actualPerFrameTime=0,this._totalFrameTime=0,this._totalFrameCount=0,this._playTime=0,this._bufferTime=0,this._drawingTime=0,this._proxyTime=0,this._totalJitter=0,this._droppedAudio=0,this._delayedAudio=0,this._lateFrames=0,this._poster="",this._thumbnail=null,this._frameEndTimestamp=0,this._audioEndTimestamp=0,this._decodedFrames=[],this._pendingFrames=[],this._lastFrameDecodeTime=0,this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0,this._lastFrameDrawingTime=0,this._lastFrameBufferTime=0,this._lastFrameProxyTime=0,this._lastVideoCpuTime=0,this._lastAudioCpuTime=0,this._lastDemuxerCpuTime=0,this._lastBufferTime=0,this._lastProxyTime=0,this._lastDrawingTime=0,this._lastFrameTimestamp=0,this._currentVideoCpuTime=0,this._lastTimeUpdate=0,this._timeUpdateInterval=250,this._seekTargetTime=0,this._bisectTargetTime=0,this._seekMode=null,this._lastSeekPosition=null,this._seekBisector=null,this._didSeek=null,this._depth=0,this._needProcessing=!1,this._pendingFrame=0,this._pendingAudio=0,this._framePipelineDepth=8,this._frameParallelism=this._enableThreading?Math.min(16,navigator.hardwareConcurrency)||1:0,this._audioPipelineDepth=12,this._videoInfo=null,this._audioInfo=null,this._width=0,this._height=0,this._volume=1,this._playbackRate=1,Object.defineProperties(this,{src:{get:function getSrc(){return this.getAttribute("src")||""},set:function setSrc(e){this.setAttribute("src",e),this._loading=!1,this._prepForLoad("interactive")}},buffered:{get:function getBuffered(){var e;return e=this._stream&&this._byteLength&&this._duration?this._stream.getBufferedRanges().map((e=>e.map((e=>e/this._stream.length*this._duration)))):[[0,0]],new g.default(e)}},seekable:{get:function getSeekable(){return this.duration<1/0&&this._stream&&this._stream.seekable&&this._codec&&this._codec.seekable?new g.default([[0,this._duration]]):new g.default([])}},currentTime:{get:function getCurrentTime(){return this._state==A?this._seekTargetTime:this._codec?this._state!=x||this._paused?this._initialPlaybackOffset:this._getPlaybackTime():this._initialSeekTime},set:function setCurrentTime(e){this._seek(e,B)}},duration:{get:function getDuration(){return this._codec&&this._codec.loadedMetadata?null!==this._duration?this._duration:1/0:NaN}},paused:{get:function getPaused(){return this._paused}},ended:{get:function getEnded(){return this._ended}},seeking:{get:function getSeeking(){return this._state==A}},muted:{get:function getMuted(){return this._muted},set:function setMuted(e){this._muted=e,this._audioFeeder?this._audioFeeder.muted=this._muted:this._started&&!this._muted&&this._codec&&this._codec.hasAudio&&(this._log("unmuting: switching from timer to audio clock"),this._initAudioFeeder(),this._startPlayback(this._audioEndTimestamp)),this._fireEventAsync("volumechange")}},poster:{get:function getPoster(){return this._poster},set:function setPoster(e){if(this._poster=e,!this._started){this._thumbnail&&this.removeChild(this._thumbnail);var t=new Image;t.src=this._poster,t.className="ogvjs-poster",t.style.position="absolute",t.style.top="0",t.style.left="0",t.style.width="100%",t.style.height="100%",t.style.objectFit="contain",t.style.visibility="hidden",t.addEventListener("load",(()=>{this._thumbnail===t&&(OGVPlayer.styleManager.appendRule("."+this._instanceId,{width:t.naturalWidth+"px",height:t.naturalHeight+"px"}),t.style.visibility="visible")})),this._thumbnail=t,this.appendChild(t)}}},videoWidth:{get:function getVideoWidth(){return this._videoInfo?this._videoInfo.displayWidth:0}},videoHeight:{get:function getVideoHeight(){return this._videoInfo?this._videoInfo.displayHeight:0}},ogvjsVideoFrameRate:{get:function getOgvJsVideoFrameRate(){return this._videoInfo?0==this._videoInfo.fps?this._totalFrameCount/(this._totalFrameTime/1e3):this._videoInfo.fps:0}},ogvjsAudioChannels:{get:function getOgvJsAudioChannels(){return this._audioInfo?this._audioInfo.channels:0}},ogvjsAudioSampleRate:{get:function getOgvJsAudioChannels(){return this._audioInfo?this._audioInfo.rate:0}},width:{get:function getWidth(){return this._width},set:function setWidth(e){this._width=parseInt(e,10),this.style.width=this._width+"px"}},height:{get:function getHeight(){return this._height},set:function setHeight(e){this._height=parseInt(e,10),this.style.height=this._height+"px"}},autoplay:{get:function getAutoplay(){return!1},set:function setAutoplay(e){}},controls:{get:function getControls(){return!1},set:function setControls(e){}},loop:{get:function getLoop(){return!1},set:function setLoop(e){}},crossOrigin:{get:function getCrossOrigin(){return null},set:function setCrossOrigin(e){}},currentSrc:{get:function getCurrentSrc(){return this._currentSrc}},defaultMuted:{get:function getDefaultMuted(){return!1}},defaultPlaybackRate:{get:function getDefaultPlaybackRate(){return 1}},error:{get:function getError(){return this._state===R?this._mediaError?this._mediaError:new p.default("unknown error occurred in media procesing"):null}},preload:{get:function getPreload(){return this.getAttribute("preload")||""},set:function setPreload(e){this.setAttribute("preload",e)}},readyState:{get:function getReadyState(){return this._stream&&this._codec&&this._codec.loadedMetadata?OGVPlayer.HAVE_ENOUGH_DATA:OGVPlayer.HAVE_NOTHING}},networkState:{get:function getNetworkState(){return this._stream?this._stream.waiting?OGVPlayer.NETWORK_LOADING:OGVPlayer.NETWORK_IDLE:this.readyState==OGVPlayer.HAVE_NOTHING?OGVPlayer.NETWORK_EMPTY:OGVPlayer.NETWORK_NO_SOURCE}},playbackRate:{get:function getPlaybackRate(){return this._playbackRate},set:function setPlaybackRate(e){var t=Number(e)||1;this._audioFeeder?this._audioFeeder.tempo=t:this._paused||(this._initialPlaybackOffset=this._getPlaybackTime(),this._initialPlaybackPosition=t*d()/1e3),this._playbackRate=t,this._fireEventAsync("ratechange")}},played:{get:function getPlayed(){return new g.default([[0,this.currentTime]])}},volume:{get:function getVolume(){return this._volume},set:function setVolume(e){this._volume=+e,this._audioFeeder&&(this._audioFeeder.volume=this._volume),this._fireEventAsync("volumechange")}}}),this.onframecallback=null,this.onloadstate=null,this.onprogress=null,this.onsuspend=null,this.onabort=null,this.onemptied=null,this.onstalled=null,this.onloadedmetadata=null,this.onloadeddata=null,this.oncanplay=null,this.oncanplaythrough=null,this.onplaying=null,this.onwaiting=null,this.onseeking=null,this.onseeked=null,this.onended=null,this.ondurationchange=null,this.ontimeupdate=null,this.onplay=null,this.onpause=null,this.onratechange=null,this.onresize=null,this.onvolumechange=null,this.onaudiofeedercreated=null}_time(e){var t=d();e();var i=d()-t;return this._lastFrameDecodeTime+=i,i}_log(e){var t=this._options;if(t.debug){var i=d()-this._startTime;t.debugFilter&&!e.match(t.debugFilter)||console.log("["+Math.round(10*i)/10+"ms] "+e)}}_fireEvent(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._log("fireEvent "+e);var i,s="function"==typeof Event;for(var d in s?i=new CustomEvent(e):(i=document.createEvent("Event")).initEvent(e,!1,!1),t)t.hasOwnProperty(d)&&(i[d]=t[d]);var h=this.dispatchEvent(i);!s&&"resize"===e&&this.onresize&&h&&this.onresize.call(this,i)}_fireEventAsync(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._log("fireEventAsync "+e),y((()=>{this._fireEvent(e,t)}))}static initSharedAudioContext(){c.default.initSharedAudioContext()}_initAudioFeeder(){var e=this._options,t={bufferSize:8192};e.audioContext&&(t.audioContext=e.audioContext),e.audioDestination&&(t.output=e.audioDestination),e.audioBackendFactory&&(t.backendFactory=e.audioBackendFactory);var i=this._audioFeeder=new c.default(t);i.init(this._audioInfo.channels,this._audioInfo.rate),this.onaudiofeedercreated&&this.onaudiofeedercreated(this._audioFeeder),i.bufferThreshold=1,i.volume=this.volume,i.muted=this.muted,i.tempo=this.playbackRate,i.onbufferlow=()=>{this._log("onbufferlow"),this._stream&&(this._stream.buffering||this._stream.seeking)||this._pendingAudio||this._pingProcessing()},i.onstarved=()=>{this._dataEnded?this._log("onstarved: appear to have reached end of audio"):(this._log("onstarved: halting audio due to starvation"),this._stopPlayback(),this._prebufferingAudio=!0),this._isProcessing()||this._pingProcessing(0)}}_startPlayback(e){if(this._audioFeeder){this._audioFeeder.start();var t=this._audioFeeder.getPlaybackState();this._initialPlaybackPosition=t.playbackPosition}else this._initialPlaybackPosition=this._playbackRate*d()/1e3;void 0!==e&&(this._initialPlaybackOffset=e),this._prebufferingAudio=!1,this._log("continuing at "+this._initialPlaybackPosition+", "+this._initialPlaybackOffset)}_stopPlayback(){this._initialPlaybackOffset=this._getPlaybackTime(),this._log("pausing at "+this._initialPlaybackOffset),this._audioFeeder&&this._audioFeeder.stop()}_getPlaybackTime(e){return this._prebufferingAudio||this._paused?this._initialPlaybackOffset:(this._audioFeeder?(e=e||this._audioFeeder.getPlaybackState()).playbackPosition:this._playbackRate*d()/1e3)-this._initialPlaybackPosition+this._initialPlaybackOffset}_stopVideo(){this._log("STOPPING"),this._state=T,this._seekState=F,this._started=!1,this._ended=!1,this._frameEndTimestamp=0,this._audioEndTimestamp=0,this._lastFrameDecodeTime=0,this._prebufferingAudio=!1,this._actionQueue.splice(0,this._actionQueue.length),this._stream&&(this._stream.abort(),this._stream=null,this._streamEnded=!1),this._codec&&(this._codec.close(),this._codec=null,this._pendingFrame=0,this._pendingAudio=0,this._dataEnded=!1),this._videoInfo=null,this._audioInfo=null,this._audioFeeder&&(this._audioFeeder.close(),this._audioFeeder=null),this._nextProcessingTimer&&(clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null),this._nextFrameTimer&&(clearTimeout(this._nextFrameTimer),this._nextFrameTimer=null),this._frameSink&&(this._frameSink.clear(),this._frameSink=null),this._decodedFrames&&(this._decodedFrames=[]),this._pendingFrames&&(this._pendingFrames=[]),this._initialSeekTime=0,this._initialPlaybackPosition=0,this._initialPlaybackOffset=0,this._duration=null}_doFrameComplete(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._startedPlaybackInDocument&&!document.body.contains(this)&&y((()=>{this.stop()}));var t=d(),i=t-this._lastFrameTimestamp,s=this._actualPerFrameTime-this._targetPerFrameTime;this._totalJitter+=Math.abs(s),this._playTime+=i;var h={cpuTime:this._lastFrameDecodeTime,drawingTime:this._drawingTime-this._lastFrameDrawingTime,bufferTime:this._bufferTime-this._lastFrameBufferTime,proxyTime:this._proxyTime-this._lastFrameProxyTime,demuxerTime:0,videoTime:0,audioTime:0,clockTime:this._actualPerFrameTime,late:e.dropped,dropped:e.dropped};function n(e){return Math.round(10*e)/10}this._codec&&(h.demuxerTime=this._codec.demuxerCpuTime-this._lastFrameDemuxerCpuTime,h.videoTime+=this._currentVideoCpuTime-this._lastFrameVideoCpuTime,h.audioTime+=this._codec.audioCpuTime-this._lastFrameAudioCpuTime),h.cpuTime+=h.demuxerTime,this._lastFrameDecodeTime=0,this._lastFrameTimestamp=t,this._codec?(this._lastFrameVideoCpuTime=this._currentVideoCpuTime,this._lastFrameAudioCpuTime=this._codec.audioCpuTime,this._lastFrameDemuxerCpuTime=this._codec.demuxerCpuTime):(this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0),this._lastFrameDrawingTime=this._drawingTime,this._lastFrameBufferTime=this._bufferTime,this._lastFrameProxyTime=this._proxyTime,this._log("drew frame "+e.frameEndTimestamp+": clock time "+n(i)+" (jitter "+n(s)+") cpu: "+n(h.cpuTime)+" (mux: "+n(h.demuxerTime)+" buf: "+n(h.bufferTime)+" draw: "+n(h.drawingTime)+" proxy: "+n(h.proxyTime)+") vid: "+n(h.videoTime)+" aud: "+n(h.audioTime)),this._fireEventAsync("framecallback",h),(!this._lastTimeUpdate||t-this._lastTimeUpdate>=this._timeUpdateInterval)&&(this._lastTimeUpdate=t,this._fireEventAsync("timeupdate")),this._codec&&e.yCbCrBuffer&&this._codec.recycleFrame(e.yCbCrBuffer)}_seekStream(e){this._stream.seeking&&this._stream.abort(),this._stream.buffering&&this._stream.abort(),this._streamEnded=!1,this._dataEnded=!1,this._ended=!1,this._stream.seek(e).then((()=>{this._readBytesAndWait()})).catch((e=>{this._onStreamError(e)}))}_onStreamError(e){"AbortError"===e.name?this._log("i/o promise canceled; ignoring"):(this._log("i/o error: "+e),this._mediaError=new p.default(p.default.MEDIA_ERR_NETWORK,String(e)),this._state=R,this._stopPlayback())}_seek(e,t){if(this._log("requested seek to "+e+", mode "+t),this.readyState==this.HAVE_NOTHING)return this._log("not yet loaded; saving seek position for later"),void(this._initialSeekTime=e);if(this._stream&&!this._stream.seekable)throw new Error("Cannot seek a non-seekable stream");if(this._codec&&!this._codec.seekable)throw new Error("Cannot seek in a non-seekable file");var prepForSeek=i=>{this._stream&&this._stream.buffering&&this._stream.abort(),this._stream&&this._stream.seeking&&this._stream.abort(),this._actionQueue.splice(0,this._actionQueue.length),this._stopPlayback(),this._prebufferingAudio=!1,this._audioFeeder&&this._audioFeeder.flush(),this._state=A,this._seekTargetTime=e,this._seekMode=t,this._codec?this._codec.flush(i):i()};prepForSeek((()=>{this._isProcessing()||this._pingProcessing(0)})),this._actionQueue.push((()=>{prepForSeek((()=>{this._doSeek(e)}))}))}_doSeek(e){this._streamEnded=!1,this._dataEnded=!1,this._ended=!1,this._state=A,this._seekTargetTime=e,this._lastSeekPosition=-1,this._decodedFrames=[],this._pendingFrames=[],this._pendingFrame=0,this._pendingAudio=0,this._didSeek=!1,this._codec.seekToKeypoint(e,(t=>{if(t)return this._seekState=S,this._fireEventAsync("seeking"),this._didSeek?void 0:void this._pingProcessing();this._codec.getKeypointOffset(e,(e=>{e>0?(this._seekState=S,this._seekStream(e)):(this._seekState=O,this._startBisection(this._seekTargetTime)),this._fireEventAsync("seeking")}))}))}_startBisection(e){var t=Math.max(0,this._stream.length-65536);this._bisectTargetTime=e,this._seekBisector=new f.default({start:0,end:t,process:(e,t,i)=>i!=this._lastSeekPosition&&(this._lastSeekPosition=i,this._codec.flush((()=>{this._seekStream(i)})),!0)}),this._seekBisector.start()}_continueSeekedPlayback(){this._seekState=F,this._state=E,this._frameEndTimestamp=this._codec.frameTimestamp,this._audioEndTimestamp=this._codec.audioTimestamp,this._codec.hasAudio?this._seekTargetTime=this._codec.audioTimestamp:this._seekTargetTime=this._codec.frameTimestamp,this._initialPlaybackOffset=this._seekTargetTime;var finishedSeeking=()=>{this._lastTimeUpdate=this._seekTargetTime,this._fireEventAsync("timeupdate"),this._fireEventAsync("seeked"),this._isProcessing()||this._pingProcessing()};if(this._codec.hasVideo&&this._decodedFrames.length){var e=this._decodedFrames.shift();this._drawFrame(e.yCbCrBuffer),finishedSeeking()}else{if(this._codec.hasVideo&&this._codec.frameReady)return this._codec.decodeFrame((e=>{e&&this._drawFrame(this._codec.frameBuffer),finishedSeeking()})),void this._codec.sync();finishedSeeking()}}_drawFrame(e){this._thumbnail&&(this.removeChild(this._thumbnail),this._thumbnail=null),this._frameSink.drawFrame(e)}_doProcessLinearSeeking(){var e;if(e=this._codec.hasVideo?this._targetPerFrameTime/1e3:1/256,this._codec.hasVideo){if(this._pendingFrame)return;if(!this._codec.frameReady)return void this._codec.process((e=>{e?this._pingProcessing():this._streamEnded?(this._log("stream ended during linear seeking on video"),this._dataEnded=!0,this._continueSeekedPlayback()):this._readBytesAndWait()}));if(this._seekMode===D&&this._codec.keyframeTimestamp==this._codec.frameTimestamp)return void this._continueSeekedPlayback();if(this._codec.frameTimestamp<=this._seekTargetTime){var t=this._codec.frameTimestamp;return this._pendingFrame++,this._pendingFrames.push({frameEndTimestamp:t}),this._decodedFrames.splice(0,this._decodedFrames.length),this._codec.decodeFrame((e=>{this._pendingFrame--,this._pendingFrames.shift(),this._decodedFrames.push({yCbCrBuffer:this._codec.frameBuffer,videoCpuTime:this._codec.videoCpuTime,frameEndTimestamp:t}),this._pingProcessing()})),void this._codec.sync()}if(!this._codec.hasAudio)return void this._continueSeekedPlayback()}if(this._codec.hasAudio){if(this._pendingAudio)return;return this._codec.audioReady?this._codec.audioTimestamp+e{this._pingProcessing()})):void this._continueSeekedPlayback():void this._codec.process((e=>{e?this._pingProcessing():this._streamEnded?(this._log("stream ended during linear seeking on audio"),this._dataEnded=!0,this._continueSeekedPlayback()):this._readBytesAndWait()}))}}_doProcessBisectionSeek(){var e,t;if(this._codec.hasVideo)t=this._codec.frameTimestamp,e=this._targetPerFrameTime/1e3;else{if(!this._codec.hasAudio)throw new Error("Invalid seek state; no audio or video track available");t=this._codec.audioTimestamp,e=1/256}t<0?this._codec.process((e=>{if(e)this._pingProcessing();else if(this._streamEnded){if(this._log("stream ended during bisection seek"),!this._seekBisector.right())throw this._log("failed going back"),new Error("not sure what to do")}else this._readBytesAndWait()})):t-e/2>this._bisectTargetTime?this._seekBisector.left()||(this._log("close enough (left)"),this._seekTargetTime=t,this._continueSeekedPlayback()):t+e/20?this._targetPerFrameTime=1e3/this._videoInfo.fps:this._targetPerFrameTime=16.667,this._canvas.width=this._videoInfo.displayWidth,this._canvas.height=this._videoInfo.displayHeight,OGVPlayer.styleManager.appendRule("."+this._instanceId,{width:this._videoInfo.displayWidth+"px",height:this._videoInfo.displayHeight+"px"});var e={};void 0!==this._options.webGL&&(e.webGL=this._options.webGL),this._options.forceWebGL&&(e.webGL="required"),this._frameSink=h.default.attach(this._canvas,e)}_doProcessing(){if(this._didSeek&&(this._didSeek=!1),this._nextProcessingTimer=null,this._isProcessing(),this._depth>0)throw new Error("REENTRANCY FAIL: doProcessing recursing unexpectedly");var e=0;do{if(this._needProcessing=!1,this._depth++,this._doProcessingLoop(),this._depth--,this._needProcessing&&this._isProcessing())throw new Error("REENTRANCY FAIL: waiting on input or codec but asked to keep processing");++e>500&&(this._log("stuck in processing loop; breaking with timer"),this._needProcessing=0,this._pingProcessing(0))}while(this._needProcessing)}_doProcessingLoop(){if(this._actionQueue.length)this._actionQueue.shift()();else if(this._state==T)this._doProcessInitial();else if(this._state==k)this._doProcessSeekingEnd();else if(this._state==w)this._doProcessLoaded();else if(this._state==P)this._doProcessPreload();else if(this._state==E)this._doProcessReady();else if(this._state==A)this._doProcessSeeking();else if(this._state==x)this._doProcessPlay();else{if(this._state!=R)throw new Error("Unexpected OGVPlayer state "+this._state);this._doProcessError()}}_doProcessInitial(){if(this._codec.loadedMetadata){if(!this._codec.hasVideo&&!this._codec.hasAudio)throw new Error("No audio or video found, something is wrong");this._codec.hasAudio&&(this._audioInfo=this._codec.audioFormat),this._codec.hasVideo&&(this._videoInfo=this._codec.videoFormat,this._setupVideo()),isNaN(this._codec.duration)||(this._duration=this._codec.duration),null===this._duration&&this._stream.seekable&&"video/ogg"==this._detectedType?(this._state=k,this._lastSeenTimestamp=-1,this._codec.flush((()=>{this._seekStream(Math.max(0,this._stream.length-131072))}))):(this._state=w,this._pingProcessing())}else this._codec.process((e=>{if(e)this._pingProcessing();else{if(this._streamEnded)throw new Error("end of file before headers found");this._log("reading more cause we are out of data"),this._readBytesAndWait()}}))}_doProcessSeekingEnd(){this._codec.frameReady?(this._log("saw frame with "+this._codec.frameTimestamp),this._lastSeenTimestamp=Math.max(this._lastSeenTimestamp,this._codec.frameTimestamp),this._codec.discardFrame((()=>{this._pingProcessing()}))):this._codec.audioReady?(this._log("saw audio with "+this._codec.audioTimestamp),this._lastSeenTimestamp=Math.max(this._lastSeenTimestamp,this._codec.audioTimestamp),this._codec.discardAudio((()=>{this._pingProcessing()}))):this._codec.process((e=>{e?this._pingProcessing():this._stream.eof?(this._log("seek-duration: we are at the end: "+this._lastSeenTimestamp),this._lastSeenTimestamp>0&&(this._duration=this._lastSeenTimestamp),this._state=w,this._codec.flush((()=>{this._streamEnded=!1,this._dataEnded=!1,this._seekStream(0)}))):this._readBytesAndWait()}))}_doProcessLoaded(){this._state=P,this._fireEventAsync("loadedmetadata"),this._fireEventAsync("durationchange"),this._codec.hasVideo&&this._fireEventAsync("resize"),this._pingProcessing(0)}_doProcessPreload(){!this._codec.frameReady&&this._codec.hasVideo||!this._codec.audioReady&&this._codec.hasAudio?this._codec.process((e=>{e?this._pingProcessing():this._streamEnded?this._ended=!0:this._readBytesAndWait()})):(this._state=E,this._fireEventAsync("loadeddata"),this._pingProcessing())}_doProcessReady(){if(this._log("initial seek to "+this._initialSeekTime),this._initialSeekTime>0){var e=this._initialSeekTime;this._initialSeekTime=0,this._log("initial seek to "+e),this._doSeek(e)}else if(this._paused)this._log("paused while in ready");else{var finishStartPlaying=()=>{this._log("finishStartPlaying"),this._state=x,this._lastFrameTimestamp=d(),this._codec.hasAudio&&this._audioFeeder?this._prebufferingAudio=!0:this._startPlayback(),this._pingProcessing(0),this._fireEventAsync("play"),this._fireEventAsync("playing")};!this._codec.hasAudio||this._audioFeeder||this._muted?finishStartPlaying():(this._initAudioFeeder(),this._audioFeeder.waitUntilReady(finishStartPlaying))}}_doProcessSeeking(){if(this._seekState==F)throw new Error("seeking in invalid state (not seeking?)");if(this._seekState==O)this._doProcessBisectionSeek();else if(this._seekState==C)this._doProcessBisectionSeek();else{if(this._seekState!=S)throw new Error("Invalid seek state "+this._seekState);this._doProcessLinearSeeking()}}_doProcessPlay(){var e=this._codec;if(this._paused)this._log("paused during playback; stopping loop");else if((!e.hasAudio||e.audioReady||this._pendingAudio||this._dataEnded)&&(!e.hasVideo||e.frameReady||this._pendingFrame||this._decodedFrames.length||this._dataEnded)){var t,i,s,d=null,h=0,u=!1,c=0;if(e.hasAudio&&this._audioFeeder?(d=this._audioFeeder.getPlaybackState(),h=this._getPlaybackTime(d),u=this._dataEnded&&0==this._audioFeeder.durationBuffered,this._prebufferingAudio&&(this._audioFeeder.durationBuffered>=2*this._audioFeeder.bufferThreshold&&(!e.hasVideo||this._decodedFrames.length>=this._framePipelineDepth)||this._dataEnded)&&(this._log("prebuffering audio done; buffered to "+this._audioFeeder.durationBuffered),this._startPlayback(h),this._prebufferingAudio=!1),d.dropped!=this._droppedAudio&&this._log("dropped "+(d.dropped-this._droppedAudio)),d.delayed!=this._delayedAudio&&this._log("delayed "+(d.delayed-this._delayedAudio)),this._droppedAudio=d.dropped,this._delayedAudio=d.delayed,(t=this._audioFeeder.durationBuffered<=2*this._audioFeeder.bufferThreshold)&&(this._codec.audioReady?this._pendingAudio>=this._audioPipelineDepth&&(this._log("audio decode disabled: "+this._pendingAudio+" packets in flight"),t=!1):t=!1)):(h=this._getPlaybackTime(),t=this._codec.audioReady&&this._audioEndTimestamp0,s=this._pendingFrame+this._decodedFrames.length=l){for(var f=-1,_=0;_=0)for(;f-- >=0;){this._lateFrames++;var p=this._decodedFrames.shift();this._log("skipping already-decoded late frame at "+p.frameEndTimestamp),c=1e3*(p.frameEndTimestamp-h),this._frameEndTimestamp=p.frameEndTimestamp,this._actualPerFrameTime=this._targetPerFrameTime-c,this._framesProcessed++,p.dropped=!0,this._doFrameComplete(p)}var m=this._codec.nextKeyframeTimestamp,g=m-this._targetPerFrameTime/1e3*(this._framePipelineDepth+this._pendingFrame);if(m>=0&&m!=this._codec.frameTimestamp&&h>=g){this._log("skipping late frame at "+this._decodedFrames[0].frameEndTimestamp+" vs "+h+", expect to see keyframe at "+m);for(var v=0;v{})),this._framesProcessed++,this._doFrameComplete(k)}return void(this._isProcessing()||this._pingProcessing())}}else i&&c<=4||(i=!1)}if(s){this._log("play loop: ready to decode frame; thread depth: "+this._pendingFrame+", have buffered: "+this._decodedFrames.length),0==this._videoInfo.fps&&this._codec.frameTimestamp-this._frameEndTimestamp>0&&(this._targetPerFrameTime=1e3*(this._codec.frameTimestamp-this._frameEndTimestamp)),this._totalFrameTime+=this._targetPerFrameTime,this._totalFrameCount++;var w=this._frameEndTimestamp=this._codec.frameTimestamp;this._pendingFrame++,this._pendingFrames.push({frameEndTimestamp:w});var P=this._pendingFrames,E=!1,x=this._time((()=>{this._codec.decodeFrame((e=>{P===this._pendingFrames?(this._log("play loop callback: decoded frame"),this._pendingFrame--,this._pendingFrames.shift(),e?this._decodedFrames.push({yCbCrBuffer:this._codec.frameBuffer,videoCpuTime:this._codec.videoCpuTime,frameEndTimestamp:w}):this._log("Bad video packet or something"),this._codec.process((()=>{this._isProcessing()||this._pingProcessing(E?void 0:0)}))):this._log("play loop callback after flush, discarding")}))}));this._pendingFrame&&(E=!0,this._proxyTime+=x,this._pingProcessing(),this._dataEnded&&this._codec.sync())}else if(t){this._log("play loop: ready for audio; depth: "+this._pendingAudio),this._pendingAudio++;var A=this._codec.audioTimestamp,R=this._time((()=>{this._codec.decodeAudio((e=>{if(this._pendingAudio--,this._log("play loop callback: decoded audio"),this._audioEndTimestamp=A,e){var t=this._codec.audioBuffer;if(t&&(this._bufferTime+=this._time((()=>{this._audioFeeder&&this._audioFeeder.bufferData(t)})),!this._codec.hasVideo)){this._framesProcessed++;var i={frameEndTimestamp:this._audioEndTimestamp};this._doFrameComplete(i)}}this._isProcessing()||this._pingProcessing()}))}));this._pendingAudio&&(this._proxyTime+=R,this._codec.audioReady?this._pingProcessing():this._doProcessPlayDemux())}else if(i){this._log("play loop: ready to draw frame"),this._nextFrameTimer&&(clearTimeout(this._nextFrameTimer),this._nextFrameTimer=null),this._thumbnail&&(this.removeChild(this._thumbnail),this._thumbnail=null);var F=this._decodedFrames.shift();this._currentVideoCpuTime=F.videoCpuTime,this._drawingTime+=this._time((()=>{this._drawFrame(F.yCbCrBuffer)})),this._framesProcessed++,this._doFrameComplete(F),this._pingProcessing()}else if(!this._decodedFrames.length||this._nextFrameTimer||this._prebufferingAudio)if(this._dataEnded&&!(this._pendingAudio||this._pendingFrame||this._decodedFrames.length)){this._log("play loop: playback reached end of data "+[this._pendingAudio,this._pendingFrame,this._decodedFrames.length]);var O=0;this._codec.hasAudio&&this._audioFeeder&&(O=1e3*this._audioFeeder.durationBuffered),O>0?(this._log("play loop: ending pending "+O+" ms"),this._pingProcessing(Math.max(0,O))):(this._log("play loop: ENDING NOW: playback time "+this._getPlaybackTime()+"; frameEndTimestamp: "+this._frameEndTimestamp),this._stopPlayback(),this._prebufferingAudio=!1,this._initialPlaybackOffset=Math.max(this._audioEndTimestamp,this._frameEndTimestamp),this._ended=!0,this._paused=!0,this._fireEventAsync("pause"),this._fireEventAsync("ended"))}else this._prebufferingAudio&&(e.hasVideo&&!e.frameReady||e.hasAudio&&!e.audioReady)?(this._log("play loop: prebuffering demuxing"),this._doProcessPlayDemux()):this._log("play loop: waiting on async/timers");else{var C=c;this._log("play loop: setting a timer for drawing "+C),this._nextFrameTimer=setTimeout((()=>{this._nextFrameTimer=null,this._pingProcessing()}),C)}}else this._log("play loop: demuxing"),this._doProcessPlayDemux()}_doProcessPlayDemux(){var e=this._codec.frameReady,t=this._codec.audioReady;this._codec.process((i=>{this._codec.frameReady&&!e||this._codec.audioReady&&!t?(this._log("demuxer has packets"),this._pingProcessing()):i?(this._log("demuxer processing to find more packets"),this._pingProcessing()):(this._log("demuxer ran out of data"),this._streamEnded?(this._log("demuxer reached end of data stream"),this._dataEnded=!0,this._pingProcessing()):(this._log("demuxer loading more data"),this._readBytesAndWait()))}))}_doProcessError(){}_isProcessing(){return this._stream&&(this._stream.buffering||this._stream.seeking)||this._codec&&this._codec.processing}_readBytesAndWait(){if(this._stream.buffering||this._stream.seeking)this._log("readBytesAndWait during i/o");else{this._stream.read(32768).then((e=>{this._log("got input "+[e.byteLength]),e.byteLength&&this._actionQueue.push((()=>{this._codec.receiveInput(e,(()=>{this._pingProcessing()}))})),this._stream.eof&&(this._log("stream is at end!"),this._streamEnded=!0),this._isProcessing()||this._pingProcessing()})).catch((e=>{this._onStreamError(e)}))}}_pingProcessing(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;if(this._stream&&this._stream.waiting)this._log("waiting on input");else{this._nextProcessingTimer&&(this._log("canceling old processing timer"),clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null);e>-1/256?this._nextProcessingTimer=setTimeout((()=>{this._pingProcessing()}),e):this._depth?this._needProcessing=!0:this._doProcessing()}}_startProcessingVideo(e){if(!this._started&&!this._codec){this._framesProcessed=0,this._bufferTime=0,this._drawingTime=0,this._proxyTime=0,this._started=!0,this._ended=!1;var t={base:this._options.base,worker:this._enableWorker,threading:this._enableThreading,simd:this._enableSIMD};this._detectedType&&(t.type=this._detectedType),this._codec=new v.default(t),this._lastVideoCpuTime=0,this._lastAudioCpuTime=0,this._lastDemuxerCpuTime=0,this._lastBufferTime=0,this._lastDrawingTime=0,this._lastProxyTime=0,this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0,this._lastFrameBufferTime=0,this._lastFrameProxyTime=0,this._lastFrameDrawingTime=0,this._currentVideoCpuTime=0,this._codec.onseek=e=>{this._didSeek=!0,this._stream&&this._seekStream(e)},this._codec.init((()=>{this._codec.receiveInput(e,(()=>{this._readBytesAndWait()}))}))}}_loadCodec(e){this._stream.read(1024).then((t=>{var i=new Uint8Array(t);i.length>4&&i[0]=="O".charCodeAt(0)&&i[1]=="g".charCodeAt(0)&&i[2]=="g".charCodeAt(0)&&i[3]=="S".charCodeAt(0)?this._detectedType="video/ogg":i.length>4&&26==i[0]&&69==i[1]&&223==i[2]&&163==i[3]?this._detectedType="video/webm":this._detectedType="video/ogg",e(t)}))}_prepForLoad(e){this._stopVideo();var doLoad=()=>{this._options.stream?this._stream=this._options.stream:this._stream=new u.default({url:this.src,cacheSize:16777216,progressive:!1}),this._stream.load().then((()=>{this._loading=!1,this._currentSrc=this.src,this._byteLength=this._stream.seekable?this._stream.length:0;var e=this._stream.headers["x-content-duration"];"string"==typeof e&&(this._duration=parseFloat(e)),this._loadCodec((e=>{this._startProcessingVideo(e)}))})).catch((e=>{this._onStreamError(e)}))};this._currentSrc="",this._loading=!0,this._actionQueue.push((()=>{e&&"none"===this.preload?this._loading=!1:doLoad()})),this._pingProcessing(0)}load(){this._prepForLoad()}canPlayType(e){var t=new m.default(e);function checkTypes(e){if(t.codecs){var i=0,s=0;return t.codecs.forEach((t=>{e.indexOf(t)>=0?i++:s++})),0===i||s>0?"":"probably"}return"maybe"}return"ogg"!==t.minor||"audio"!==t.major&&"video"!==t.major&&"application"!==t.major?"webm"!==t.minor||"audio"!==t.major&&"video"!==t.major?"":checkTypes(["vorbis","opus","vp8","vp9"]):checkTypes(["vorbis","opus","theora"])}play(){this._muted||this._options.audioContext||OGVPlayer.initSharedAudioContext(),this._paused&&(this._startedPlaybackInDocument=document.body.contains(this),this._paused=!1,this._state==A||(this._started&&this._codec&&this._codec.loadedMetadata?(this._ended&&this._stream&&this._byteLength?(this._log(".play() starting over after end"),this._seek(0)):this._log(".play() while already started"),this._state=E,this._isProcessing()||this._pingProcessing()):this._loading?this._log(".play() while loading"):(this._log(".play() before started"),this._stream||this.load())))}getPlaybackStats(){return{targetPerFrameTime:this._targetPerFrameTime,framesProcessed:this._framesProcessed,videoBytes:this._codec?this._codec.videoBytes:0,audioBytes:this._codec?this._codec.audioBytes:0,playTime:this._playTime,demuxingTime:this._codec?this._codec.demuxerCpuTime-this._lastDemuxerCpuTime:0,videoDecodingTime:this._codec?this._codec.videoCpuTime-this._lastVideoCpuTime:0,audioDecodingTime:this._codec?this._codec.audioCpuTime-this._lastAudioCpuTime:0,bufferTime:this._bufferTime-this._lastBufferTime,drawingTime:this._drawingTime-this._lastDrawingTime,proxyTime:this._proxyTime-this._lastProxyTime,droppedAudio:this._droppedAudio,delayedAudio:this._delayedAudio,jitter:this._totalJitter/this._framesProcessed,lateFrames:this._lateFrames}}resetPlaybackStats(){this._framesProcessed=0,this._playTime=0,this._codec&&(this._lastDemuxerCpuTime=this._codec.demuxerCpuTime,this._lastVideoCpuTime=this._codec.videoCpuTime,this._lastAudioCpuTime=this._codec.audioCpuTime,this._codec.videoBytes=0,this._codec.audioBytes=0),this._lastBufferTime=this._bufferTime,this._lastDrawingTime=this._drawingTime,this._lastProxyTime=this._proxyTime,this._totalJitter=0,this._totalFrameTime=0,this._totalFrameCount=0}getVideoFrameSink(){return this._frameSink}getCanvas(){return this._canvas}getVideo(){return null}pause(){this._paused||(this._nextProcessingTimer&&(clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null),this._stopPlayback(),this._prebufferingAudio=!1,this._paused=!0,this._fireEvent("pause"))}stop(){this._stopVideo(),this._paused=!0}fastSeek(e){this._seek(+e,D)}}(0,_.default)(OGVPlayer,b),OGVPlayer.instanceCount=0,OGVPlayer.styleManager=new function StyleManager(){var e=document.createElement("style");e.type="text/css",e.textContent="ogvjs { display: inline-block; position: relative; -webkit-user-select: none; -webkit-tap-highlight-color: rgba(0,0,0,0); ",document.head.appendChild(e);var t=e.sheet;this.appendRule=function(e,i){var s=[];for(var d in i)i.hasOwnProperty(d)&&s.push(d+":"+i[d]);var h=e+"{"+s.join(";")+"}";t.insertRule(h,t.cssRules.length-1)}};var M=OGVPlayer;t.default=M},580:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=function OGVProxyClass(e){return class{constructor(t,i,s){for(var d in s=s||{},this.worker=t,this.transferables=function(){var e=new ArrayBuffer(1024),i=new Uint8Array(e);try{return t.postMessage({action:"transferTest",bytes:i},[e]),!e.byteLength}catch(e){return!1}}(),e)e.hasOwnProperty(d)&&(this[d]=e[d]);this.processingQueue=0,Object.defineProperty(this,"processing",{get:function get(){return this.processingQueue>0}}),this.messageCount=0,this.pendingCallbacks={},this.worker.addEventListener("message",(e=>{this.handleMessage(e)})),this.proxy("construct",[i,s],(()=>{}))}proxy(e,t,i){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(!this.worker)throw'Tried to call "'+e+'" method on closed proxy object';var d="callback-"+ ++this.messageCount+"-"+e;i&&(this.pendingCallbacks[d]=i);var h={action:e,callbackId:d,args:t||[]};this.processingQueue++,this.transferables?this.worker.postMessage(h,s):this.worker.postMessage(h)}terminate(){this.worker&&(this.worker.terminate(),this.worker=null,this.processingQueue=0,this.pendingCallbacks={})}handleMessage(e){if(this.processingQueue--,"callback"===e.data.action){var t=e.data,i=t.callbackId,s=t.args,d=this.pendingCallbacks[i];if(t.props)for(var h in t.props)t.props.hasOwnProperty(h)&&(this[h]=t.props[h]);d&&(delete this.pendingCallbacks[i],d.apply(this,s))}}}};t.default=i},168:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=class OGVTimeRanges{constructor(e){this._ranges=e,this.length=e.length}start(e){if(e<0||e>this.length||e!==(0|e))throw new RangeError("Invalid index");return this._ranges[e][0]}end(e){if(e<0||e>this.length||e!==(0|e))throw new RangeError("Invalid index");return this._ranges[e][1]}};t.default=i},625:(e,t,i)=>{"use strict";var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(964));var h=class OGVWrapperCodec{constructor(e){return this.options=e||{},this.demuxer=null,this.videoDecoder=null,this.audioDecoder=null,this.flushIter=0,this.loadedMetadata=!1,this.processing=!1,Object.defineProperties(this,{duration:{get:function get(){return this.loadedMetadata?this.demuxer.duration:NaN}},hasAudio:{get:function get(){return this.loadedMetadata&&!!this.audioDecoder}},audioReady:{get:function get(){return this.hasAudio&&this.demuxer.audioReady}},audioTimestamp:{get:function get(){return this.demuxer.audioTimestamp}},audioFormat:{get:function get(){return this.hasAudio?this.audioDecoder.audioFormat:null}},audioBuffer:{get:function get(){return this.hasAudio?this.audioDecoder.audioBuffer:null}},hasVideo:{get:function get(){return this.loadedMetadata&&!!this.videoDecoder}},frameReady:{get:function get(){return this.hasVideo&&this.demuxer.frameReady}},frameTimestamp:{get:function get(){return this.demuxer.frameTimestamp}},keyframeTimestamp:{get:function get(){return this.demuxer.keyframeTimestamp}},nextKeyframeTimestamp:{get:function get(){return this.demuxer.nextKeyframeTimestamp}},videoFormat:{get:function get(){return this.hasVideo?this.videoDecoder.videoFormat:null}},frameBuffer:{get:function get(){return this.hasVideo?this.videoDecoder.frameBuffer:null}},seekable:{get:function get(){return this.demuxer.seekable}},demuxerCpuTime:{get:function get(){return this.demuxer?this.demuxer.cpuTime:0}},audioCpuTime:{get:function get(){return this.audioDecoder?this.audioDecoder.cpuTime:0}},videoCpuTime:{get:function get(){return this.videoDecoder?this.videoDecoder.cpuTime:0}}}),this.loadedDemuxerMetadata=!1,this.loadedAudioMetadata=!1,this.loadedVideoMetadata=!1,this.loadedAllMetadata=!1,this.onseek=null,this.videoBytes=0,this.audioBytes=0,this}flushSafe(e){var t=this.flushIter;return i=>{this.flushIter<=t&&e(i)}}init(e){var t;this.processing=!0,t="video/webm"===this.options.type||"audio/webm"===this.options.type?"OGVDemuxerWebMW":"OGVDemuxerOggW",d.default.loadClass(t,(t=>{t().then((t=>{this.demuxer=t,t.onseek=e=>{this.onseek&&this.onseek(e)},t.init((()=>{this.processing=!1,e()}))}))}))}close(){this.demuxer&&(this.demuxer.close(),this.demuxer=null),this.videoDecoder&&(this.videoDecoder.close(),this.videoDecoder=null),this.audioDecoder&&(this.audioDecoder.close(),this.audioDecoder=null)}receiveInput(e,t){this.demuxer.receiveInput(e,t)}process(e){if(this.processing)throw new Error("reentrancy fail on OGVWrapperCodec.process");this.processing=!0;var finish=t=>{this.processing=!1,e(t)},doProcessData=()=>{this.demuxer.process(finish)};this.demuxer.loadedMetadata&&!this.loadedDemuxerMetadata?this.loadAudioCodec((()=>{this.loadVideoCodec((()=>{this.loadedDemuxerMetadata=!0,this.loadedAudioMetadata=!this.audioDecoder,this.loadedVideoMetadata=!this.videoDecoder,this.loadedAllMetadata=this.loadedAudioMetadata&&this.loadedVideoMetadata,finish(!0)}))})):this.loadedDemuxerMetadata&&!this.loadedAudioMetadata?this.audioDecoder.loadedMetadata?(this.loadedAudioMetadata=!0,this.loadedAllMetadata=this.loadedAudioMetadata&&this.loadedVideoMetadata,finish(!0)):this.demuxer.audioReady?this.demuxer.dequeueAudioPacket(((e,t)=>{this.audioBytes+=e.byteLength,this.audioDecoder.processHeader(e,(e=>{finish(!0)}))})):doProcessData():this.loadedAudioMetadata&&!this.loadedVideoMetadata?this.videoDecoder.loadedMetadata?(this.loadedVideoMetadata=!0,this.loadedAllMetadata=this.loadedAudioMetadata&&this.loadedVideoMetadata,finish(!0)):this.demuxer.frameReady?(this.processing=!0,this.demuxer.dequeueVideoPacket((e=>{this.videoBytes+=e.byteLength,this.videoDecoder.processHeader(e,(()=>{finish(!0)}))}))):doProcessData():this.loadedVideoMetadata&&!this.loadedMetadata&&this.loadedAllMetadata?(this.loadedMetadata=!0,finish(!0)):!this.loadedMetadata||this.hasAudio&&!this.demuxer.audioReady||this.hasVideo&&!this.demuxer.frameReady?doProcessData():finish(!0)}decodeFrame(e){var t=this.flushSafe(e),i=this.frameTimestamp,s=this.keyframeTimestamp;this.demuxer.dequeueVideoPacket((e=>{this.videoBytes+=e.byteLength,this.videoDecoder.processFrame(e,(e=>{var d=this.videoDecoder.frameBuffer;d&&(d.timestamp=i,d.keyframeTimestamp=s),t(e)}))}))}decodeAudio(e){var t=this.flushSafe(e);this.demuxer.dequeueAudioPacket(((e,i)=>{this.audioBytes+=e.byteLength,this.audioDecoder.processAudio(e,(e=>{if(i){var s=this.audioDecoder.audioBuffer,d=[];for(var h of s){var u=Math.round(i*this.audioFormat.rate/1e9);u>0?d.push(h.subarray(0,h.length-Math.min(u,h.length))):d.push(h.subarray(Math.min(Math.abs(u),h.length),h.length))}this.audioDecoder.audioBuffer=d}return t(e)}))}))}discardFrame(e){this.demuxer.dequeueVideoPacket((t=>{this.videoBytes+=t.byteLength,e()}))}discardAudio(e){this.demuxer.dequeueAudioPacket(((t,i)=>{this.audioBytes+=t.byteLength,e()}))}flush(e){this.flushIter++,this.demuxer.flush(e)}sync(){this.videoDecoder&&this.videoDecoder.sync()}recycleFrame(e){this.videoDecoder&&this.videoDecoder.recycleFrame(e)}getKeypointOffset(e,t){this.demuxer.getKeypointOffset(e,t)}seekToKeypoint(e,t){this.demuxer.seekToKeypoint(e,this.flushSafe(t))}loadAudioCodec(e){if(this.demuxer.audioCodec){var t={vorbis:"OGVDecoderAudioVorbisW",opus:"OGVDecoderAudioOpusW"}[this.demuxer.audioCodec];this.processing=!0,d.default.loadClass(t,(t=>{var i={};this.demuxer.audioFormat&&(i.audioFormat=this.demuxer.audioFormat),t(i).then((t=>{this.audioDecoder=t,t.init((()=>{this.loadedAudioMetadata=t.loadedMetadata,this.processing=!1,e()}))}))}),{worker:this.options.worker})}else e()}loadVideoCodec(e){if(this.demuxer.videoCodec){var t=!!this.options.simd,i=!!this.options.threading,s={theora:"OGVDecoderVideoTheoraW",vp8:i?"OGVDecoderVideoVP8MTW":"OGVDecoderVideoVP8W",vp9:i?t?"OGVDecoderVideoVP9SIMDMTW":"OGVDecoderVideoVP9MTW":t?"OGVDecoderVideoVP9SIMDW":"OGVDecoderVideoVP9W",av1:i?t?"OGVDecoderVideoAV1SIMDMTW":"OGVDecoderVideoAV1MTW":t?"OGVDecoderVideoAV1SIMDW":"OGVDecoderVideoAV1W"}[this.demuxer.videoCodec];this.processing=!0,d.default.loadClass(s,(t=>{var s={};this.demuxer.videoFormat&&(s.videoFormat=this.demuxer.videoFormat),i&&delete window.ENVIRONMENT_IS_PTHREAD,t(s).then((t=>{this.videoDecoder=t,t.init((()=>{this.loadedVideoMetadata=t.loadedMetadata,this.processing=!1,e()}))}))}),{worker:this.options.worker&&!this.options.threading})}else e()}};t.default=h},539:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=new class WebAssemblyChecker{constructor(){this.tested=!1,this.testResult=void 0}wasmSupported(){if(!this.tested){try{"object"==typeof WebAssembly?this.testResult=function testSafariWebAssemblyBug(){var e=new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11]),t=new WebAssembly.Module(e);return 0!==new WebAssembly.Instance(t,{}).exports.test(4)}():this.testResult=!1}catch(e){console.log("Exception while testing WebAssembly",e),this.testResult=!1}this.tested=!0}return this.testResult}};t.default=i},309:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=function extend(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])};t.default=i},431:(e,t,i)=>{"use strict";var s=function(){function defineProperties(e,t){for(var i=0;i{"use strict";var s=function(){function defineProperties(e,t){for(var i=0;i=200&&e.xhr.status<300?(e.length=getXHRLength(e.xhr),e.headers=function getXHRHeaders(e){var t={};return e.getAllResponseHeaders().split(/\r?\n/).forEach((function(e){var i=e.split(/:\s*/,2);i.length>1&&(t[i[0].toLowerCase()]=i[1])})),t}(e.xhr),e.onXHRStart()):(s(),i(new Error("HTTP error "+e.xhr.status)))}},h=function checkError(){s(),i(new Error("network error"))},u=function checkBackendOpen(){s(),t()};s=function oncomplete(){e.xhr.removeEventListener("readystatechange",d),e.xhr.removeEventListener("error",h),e.off("open",u),e._onAbort=null},e.initXHR(),e.xhr.addEventListener("readystatechange",d),e.xhr.addEventListener("error",h),e.on("open",u),e.xhr.send()}))}},{key:"bufferToOffset",value:function bufferToOffset(e){return Promise.reject(new Error("abstract"))}},{key:"abort",value:function abort(){if(this.xhr.abort(),this._onAbort){var e=this._onAbort;this._onAbort=null;var t=new Error("Aborted");t.name="AbortError",e(t)}}},{key:"initXHR",value:function initXHR(){var e=this.url;this.cachever&&(e+="?buggy_cachever="+this.cachever),this.xhr.open("GET",e);var t=null;(this.offset||this.length)&&(t="bytes="+this.offset+"-"),this.length&&(t+=this.offset+this.length-1),null!==t&&this.xhr.setRequestHeader("Range",t)}},{key:"onXHRStart",value:function onXHRStart(){throw new Error("abstract")}}]),Backend}(i(566));e.exports=d},810:(e,t,i)=>{"use strict";var s=function(){function defineProperties(e,t){for(var i=0;i0&&(this.bytesRead+=e.length,this.emit("buffer",e))}},{key:"onXHRLoad",value:function onXHRLoad(){this.onXHRProgress(),d(BinaryStringBackend.prototype.__proto__||Object.getPrototypeOf(BinaryStringBackend.prototype),"onXHRLoad",this).call(this)}}]),BinaryStringBackend}(i(828));h.supported=function(){try{return!!(new XMLHttpRequest).overrideMimeType}catch(e){return!1}},e.exports=h},828:(e,t,i)=>{"use strict";var s=function(){function defineProperties(e,t){for(var i=0;i=e)i();else{var d=null;t._onAbort=function(e){d(),s(e)};var h=function checkBuffer(){t.offset>=e&&!t.eof&&(d(),i())},u=function checkDone(){d(),i()},c=function checkError(){d(),s(new Error("error streaming"))};d=function oncomplete(){t.buffering=!1,t.off("buffer",h),t.off("done",u),t.off("error",c),t._onAbort=null},t.buffering=!0,t.on("buffer",h),t.on("done",u),t.on("error",c)}}))}},{key:"initXHR",value:function initXHR(){d(DownloadBackend.prototype.__proto__||Object.getPrototypeOf(DownloadBackend.prototype),"initXHR",this).call(this)}},{key:"onXHRStart",value:function onXHRStart(){var e=this;this.xhr.addEventListener("progress",(function(){return e.onXHRProgress()})),this.xhr.addEventListener("error",(function(){return e.onXHRError()})),this.xhr.addEventListener("load",(function(){return e.onXHRLoad()})),this.emit("open")}},{key:"onXHRProgress",value:function onXHRProgress(){throw new Error("abstract")}},{key:"onXHRError",value:function onXHRError(){this.emit("error")}},{key:"onXHRLoad",value:function onXHRLoad(){this.eof=!0,this.emit("done")}}]),DownloadBackend}(i(306));e.exports=h},761:(e,t,i)=>{"use strict";var s=i(855),d=i(810),h=i(431);var u=null;e.exports=function instantiate(e){if(!1===e.progressive)return new h(e);if(u||(u=function autoselect(){return s.supported()?s:d.supported()?d:null}()),!u)throw new Error("No supported backend class");return new u(e)}},855:(e,t,i)=>{"use strict";var s=function(){function defineProperties(e,t){for(var i=0;i{"use strict";var t=function(){function defineProperties(e,t){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},t=e.buffer,i=void 0===t?void 0:t,s=e.string,d=void 0===s?void 0:s,h=e.start,u=void 0===h?0:h,c=e.end,l=void 0===c?u+(i?i.byteLength:d?d.length:0):c,f=e.prev,_=void 0===f?null:f,p=e.next,m=void 0===p?null:p,g=e.eof,v=void 0!==g&&g,y=e.empty,b=void 0===y?!(i||d):y,T=e.timestamp,k=void 0===T?Date.now():T;_classCallCheck(this,CacheItem),this.start=u,this.end=l,this.prev=_,this.next=m,this.eof=v,this.empty=b,this.timestamp=k,this.buffer=i,this.string=d,Object.defineProperty(this,"length",{get:function get(){return this.end-this.start}})}return t(CacheItem,[{key:"contains",value:function contains(e){return e>=this.start&&(e{"use strict";var s=function(){function defineProperties(e,t){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},t=e.cacheSize,i=void 0===t?0:t;_classCallCheck(this,CachePool);var s=new d({eof:!0});this.head=s,this.tail=s,this.readOffset=0,this.readCursor=s,this.writeOffset=0,this.writeCursor=s,this.cacheSize=i}return s(CachePool,[{key:"bytesReadable",value:function bytesReadable(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0,t=this.readOffset,i=this.readCursor,s=i.last((function(i){return!i.empty&&i.start<=t+e}));return s?Math.min(e,s.end-t):0}},{key:"bytesWritable",value:function bytesWritable(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0,t=this.writeOffset,i=this.writeCursor;if(i.eof)return e;var s=i.last((function(i){return i.empty&&i.start<=t+e}));return s?Math.min(e,s.end-t):0}},{key:"seekRead",value:function seekRead(e){var t=this.head.first((function(t){return t.contains(e)}));if(!t)throw new Error("read seek out of range");this.readOffset=e,this.readCursor=t}},{key:"seekWrite",value:function seekWrite(e){var t=this.head.first((function(t){return t.contains(e)}));if(!t)throw new Error("write seek out of range");this.writeOffset=e,this.writeCursor=t}},{key:"readBytes",value:function readBytes(e){for(var t=e.byteLength,i=this.bytesReadable(t),s=this.readOffset,d=s+i,h=s,u=this.readCursor;u&&!u.empty&&!(u.start>=d);u=u.next){var c=Math.min(d,u.end),l=e.subarray(h-s,c-s);u.readBytes(l,h,c),h=c}return this.readOffset=h,this.readCursor=this.readCursor.first((function(e){return e.contains(h)})),i}},{key:"write",value:function write(e){var t=this.bufferItem(e),i=this.writeCursor;if(!i.empty)throw new Error("write cursor not empty");if(!i.contains(t.end)&&i.end!==t.end)throw new Error("write cursor too small");i.startthis.readOffset+this.chunkSize)&&t.push(i));if(e>this.cacheSize){t.sort((function(e,t){return e.timestamp-t.timestamp}));for(var s=0;s{"use strict";e.exports=i(91)},566:e=>{"use strict";var t=function(){function defineProperties(e,t){for(var i=0;i=0&&i.splice(s,1)}},{key:"emit",value:function emit(e,t){(this._e[e]||[]).slice().forEach((function(e){return e(t)}))}}]),TinyEvents}();e.exports=i},936:(e,t,i)=>{"use strict";var s=function(){function defineProperties(e,t){for(var i=0;i=0&&c>=e.length)return void t(null);var l=e._clampToLength(s.writeOffset+s.bytesWritable(d))-s.writeOffset;if(0===l)t(null);else{var f=e._backend=new h({url:e.url,offset:e._cache.writeOffset,length:l,cachever:e._cachever,progressive:e.progressive}),_=null,p=function checkOpen(){f!==e._backend?(_(),i(new Error("invalid state"))):(f.on("buffer",(function(t){f===e._backend&&e._cache.write(t)})),f.on("done",(function(){f===e._backend&&(-1===e.length&&(e.length=e._backend.offset+e._backend.bytesRead),e._backend=null)})),t(f))},m=function checkError(t){f!==e._backend?i(new Error("invalid state")):(e._backend=null,i(t))};_=function oncomplete(){f.off("open",p),f.off("error",m)},f.on("open",p),f.on("error",m),f.on("cachever",(function(){e._cachever++})),f.load()}}}))}},{key:"_readAhead",value:function _readAhead(){var e=this;return new Promise((function(t,i){e._backend||e.eof?t():e._openBackend().then((function(){t()})).catch((function(e){i(e)}))}))}},{key:"seek",value:function seek(e){var t=this;return new Promise((function(i,s){if(!t.loaded||t.buffering||t.seeking)throw new Error("invalid state");if(e!==(0|e)||e<0)throw new Error("invalid input");if(t.length>=0&&e>t.length)throw new Error("seek past end of file");if(!t.seekable)throw new Error("seek on non-seekable stream");t._backend&&t.abort(),t._cache.seekRead(e),t._cache.seekWrite(e),t._readAhead().then(i).catch(s)}))}},{key:"read",value:function read(e){var t=this;return this.buffer(e).then((function(e){return t.readSync(e)}))}},{key:"readSync",value:function readSync(e){var t=this.bytesAvailable(e),i=new Uint8Array(t);if(this.readBytes(i)!==t)throw new Error("failed to read expected data");return i.buffer}},{key:"readBytes",value:function readBytes(e){if(!this.loaded||this.buffering||this.seeking)throw new Error("invalid state");if(!(e instanceof Uint8Array))throw new Error("invalid input");var t=this._cache.readBytes(e);return this._readAhead(),t}},{key:"buffer",value:function buffer(e){var t=this;return new Promise((function(i,s){if(!t.loaded||t.buffering||t.seeking)throw new Error("invalid state");if(e!==(0|e)||e<0)throw new Error("invalid input");var d=t._clampToLength(t.offset+e),h=d-t.offset,u=t.bytesAvailable(h);u>=h?i(u):(t.buffering=!0,t._openBackend().then((function(i){return i?i.bufferToOffset(d).then((function(){return t.buffering=!1,t.buffer(e)})):Promise.resolve(u)})).then((function(e){t.buffering=!1,i(e)})).catch((function(e){"AbortError"!==e.name&&(t.buffering=!1),s(e)})))}))}},{key:"bytesAvailable",value:function bytesAvailable(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0;return this._cache.bytesReadable(e)}},{key:"abort",value:function abort(){this.loading&&(this.loading=!1),this.buffering&&(this.buffering=!1),this.seeking&&(this.seeking=!1),this._backend&&(this._backend.abort(),this._backend=null)}},{key:"getBufferedRanges",value:function getBufferedRanges(){return this._cache.ranges()}},{key:"_clampToLength",value:function _clampToLength(e){return this.length<0?e:Math.min(this.length,e)}}]),StreamFile}();e.exports=u},826:e=>{e.exports={vertex:"precision lowp float;\n\nattribute vec2 aPosition;\nattribute vec2 aLumaPosition;\nattribute vec2 aChromaPosition;\nvarying vec2 vLumaPosition;\nvarying vec2 vChromaPosition;\nvoid main() {\n gl_Position = vec4(aPosition, 0, 1);\n vLumaPosition = aLumaPosition;\n vChromaPosition = aChromaPosition;\n}\n",fragment:"// inspired by https://github.com/mbebenita/Broadway/blob/master/Player/canvas.js\n\nprecision lowp float;\n\nuniform sampler2D uTextureY;\nuniform sampler2D uTextureCb;\nuniform sampler2D uTextureCr;\nvarying vec2 vLumaPosition;\nvarying vec2 vChromaPosition;\nvoid main() {\n // Y, Cb, and Cr planes are uploaded as LUMINANCE textures.\n float fY = texture2D(uTextureY, vLumaPosition).x;\n float fCb = texture2D(uTextureCb, vChromaPosition).x;\n float fCr = texture2D(uTextureCr, vChromaPosition).x;\n\n // Premultipy the Y...\n float fYmul = fY * 1.1643828125;\n\n // And convert that to RGB!\n gl_FragColor = vec4(\n fYmul + 1.59602734375 * fCr - 0.87078515625,\n fYmul - 0.39176171875 * fCb - 0.81296875 * fCr + 0.52959375,\n fYmul + 2.017234375 * fCb - 1.081390625,\n 1\n );\n}\n",vertexStripe:"precision lowp float;\n\nattribute vec2 aPosition;\nattribute vec2 aTexturePosition;\nvarying vec2 vTexturePosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 0, 1);\n vTexturePosition = aTexturePosition;\n}\n",fragmentStripe:"// extra 'stripe' texture fiddling to work around IE 11's poor performance on gl.LUMINANCE and gl.ALPHA textures\n\nprecision lowp float;\n\nuniform sampler2D uStripe;\nuniform sampler2D uTexture;\nvarying vec2 vTexturePosition;\nvoid main() {\n // Y, Cb, and Cr planes are mapped into a pseudo-RGBA texture\n // so we can upload them without expanding the bytes on IE 11\n // which doesn't allow LUMINANCE or ALPHA textures\n // The stripe textures mark which channel to keep for each pixel.\n // Each texture extraction will contain the relevant value in one\n // channel only.\n\n float fLuminance = dot(\n texture2D(uStripe, vTexturePosition),\n texture2D(uTexture, vTexturePosition)\n );\n\n gl_FragColor = vec4(fLuminance, fLuminance, fLuminance, 1);\n}\n"}},487:e=>{!function(){"use strict";function FrameSink(e,t){throw new Error("abstract")}FrameSink.prototype.drawFrame=function(e){throw new Error("abstract")},FrameSink.prototype.clear=function(){throw new Error("abstract")},e.exports=FrameSink}()},926:(e,t,i)=>{!function(){"use strict";var t=i(487),s=i(627);function SoftwareFrameSink(e){var t=this,i=e.getContext("2d"),d=null,h=null,u=null;return t.drawFrame=function drawFrame(t){var c=t.format;e.width===c.displayWidth&&e.height===c.displayHeight||(e.width=c.displayWidth,e.height=c.displayHeight),null!==d&&d.width==c.width&&d.height==c.height||function initImageData(e,t){for(var s=(d=i.createImageData(e,t)).data,h=e*t*4,u=0;u{!function(){"use strict";var t=i(487),s=i(826);function WebGLFrameSink(e){var t,i,d=this,h=WebGLFrameSink.contextForCanvas(e);if(null===h)throw new Error("WebGL unavailable");function compileShader(e,t){var i=h.createShader(e);if(h.shaderSource(i,t),h.compileShader(i),!h.getShaderParameter(i,h.COMPILE_STATUS)){var s=h.getShaderInfoLog(i);throw h.deleteShader(i),new Error("GL shader compilation for "+e+" failed: "+s)}return i}var u,c,l,f,_,p,m,g,v,y,b=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),T={},k={},w={};function createOrReuseTexture(e,t){return T[e]&&!t||(T[e]=h.createTexture()),T[e]}function uploadTexture(e,t,i,s,d){var u=createOrReuseTexture(e,t);if(h.activeTexture(h.TEXTURE0),WebGLFrameSink.stripe){var c=!T[e+"_temp"]||t,l=createOrReuseTexture(e+"_temp",t);h.bindTexture(h.TEXTURE_2D,l),c?(h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.NEAREST),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.NEAREST),h.texImage2D(h.TEXTURE_2D,0,h.RGBA,i/4,s,0,h.RGBA,h.UNSIGNED_BYTE,d)):h.texSubImage2D(h.TEXTURE_2D,0,0,0,i/4,s,h.RGBA,h.UNSIGNED_BYTE,d);var f=T[e+"_stripe"],_=!f||t;_&&(f=createOrReuseTexture(e+"_stripe",t)),h.bindTexture(h.TEXTURE_2D,f),_&&(h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.NEAREST),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.NEAREST),h.texImage2D(h.TEXTURE_2D,0,h.RGBA,i,1,0,h.RGBA,h.UNSIGNED_BYTE,function buildStripe(e){if(w[e])return w[e];for(var t=e,i=new Uint32Array(t),s=0;s{!function(){"use strict";var t=i(877);e.exports={convertYCbCr:function convertYCbCr(e,i){var s=0|e.format.width,d=0|e.format.height,h=0|t(e.format.width/e.format.chromaWidth),u=0|t(e.format.height/e.format.chromaHeight),c=e.y.bytes,l=e.u.bytes,f=e.v.bytes,_=0|e.y.stride,p=0|e.u.stride,m=0|e.v.stride,g=s<<2,v=0,y=0,b=0,T=0,k=0,w=0,P=0,E=0,x=0,A=0,R=0,F=0,O=0,C=0,S=0,B=0,D=0,M=0;if(1==h&&1==u)for(P=0,E=g,M=0,B=0;B>8,i[P+1]=R-O>>8,i[P+2]=R+C>>8,P+=4,R=298*c[y++]|0,i[P]=R+F>>8,i[P+1]=R-O>>8,i[P+2]=R+C>>8,P+=4,R=298*c[b++]|0,i[E]=R+F>>8,i[E+1]=R-O>>8,i[E+2]=R+C>>8,E+=4,R=298*c[b++]|0,i[E]=R+F>>8,i[E+1]=R-O>>8,i[E+2]=R+C>>8,E+=4;P+=g,E+=g,M++}else for(w=0,B=0;B>u)*p|0,k=M*m|0,S=0;S>h)],F=(409*(A=0|f[k+D])|0)-57088|0,O=(100*x|0)+(208*A|0)-34816|0,C=(516*x|0)-70912|0,R=298*c[v++]|0,i[w]=R+F>>8,i[w+1]=R-O>>8,i[w+2]=R+C>>8,w+=4}}}()},877:e=>{!function(){"use strict";e.exports=function depower(e){for(var t=0,i=e>>1;0!=i;)i>>=1,t++;if(e!==1<{!function(){"use strict";var t=i(487),s=i(926),d=i(895),h={FrameSink:t,SoftwareFrameSink:s,WebGLFrameSink:d,attach:function(e,t){return("webGL"in(t=t||{})?t.webGL:d.isAvailable())?new d(e,t):new s(e,t)}};e.exports=h}()}},t={};function __webpack_require__(i){var s=t[i];if(void 0!==s)return s.exports;var d=t[i]={exports:{}};return e[i](d,d.exports,__webpack_require__),d.exports}var i={};return(()=>{"use strict";var e=i,t=__webpack_require__(318);Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"OGVCompat",{enumerable:!0,get:function get(){return s.default}}),Object.defineProperty(e,"OGVLoader",{enumerable:!0,get:function get(){return d.default}}),Object.defineProperty(e,"OGVMediaError",{enumerable:!0,get:function get(){return h.default}}),Object.defineProperty(e,"OGVMediaType",{enumerable:!0,get:function get(){return u.default}}),Object.defineProperty(e,"OGVPlayer",{enumerable:!0,get:function get(){return c.default}}),Object.defineProperty(e,"OGVTimeRanges",{enumerable:!0,get:function get(){return l.default}}),e.OGVVersion=void 0;var s=t(__webpack_require__(523)),d=t(__webpack_require__(964)),h=t(__webpack_require__(759)),u=t(__webpack_require__(278)),c=t(__webpack_require__(869)),l=t(__webpack_require__(168)),f="1.8.6-20220111172545-1f60d9d";e.OGVVersion=f,"object"==typeof window&&(window.OGVCompat=s.default,window.OGVLoader=d.default,window.OGVMediaError=h.default,window.OGVMediaType=u.default,window.OGVTimeRanges=l.default,window.OGVPlayer=c.default,window.OGVVersion=f)})(),i})()}));
\ No newline at end of file
diff --git a/ogvjs-1.8.6/ogv-support.js b/ogvjs-1.8.6/ogv-support.js
deleted file mode 100644
index cc966c95c..000000000
--- a/ogvjs-1.8.6/ogv-support.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{var e={575:e=>{e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},913:e=>{function t(e,t){for(var o=0;o{e.exports=function(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports},8:e=>{function t(o){return e.exports=t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,t(o)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports},523:(e,t,o)=>{"use strict";var r=o(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(o(575)),u=r(o(913)),s=new(function(){function e(){(0,n.default)(this,e)}return(0,u.default)(e,[{key:"hasTypedArrays",value:function(){return!!window.Uint32Array}},{key:"hasWebAssembly",value:function(){return!!window.WebAssembly}},{key:"hasWebAudio",value:function(){return!(!window.AudioContext&&!window.webkitAudioContext)}},{key:"hasFlash",value:function(){return!1}},{key:"hasAudio",value:function(){return this.hasWebAudio()}},{key:"isBlacklisted",value:function(e){return!1}},{key:"isSlow",value:function(){return!1}},{key:"isTooSlow",value:function(){return!1}},{key:"supported",value:function(e){return"OGVDecoder"===e?this.hasWebAssembly():"OGVPlayer"===e&&this.supported("OGVDecoder")&&this.hasAudio()}}]),e}());t.default=s}},t={};function o(r){var n=t[r];if(void 0!==n)return n.exports;var u=t[r]={exports:{}};return e[r](u,u.exports,o),u.exports}(()=>{"use strict";var e=o(318),t=e(o(8)),r=e(o(523));"object"===("undefined"==typeof window?"undefined":(0,t.default)(window))&&(window.OGVCompat=r.default,window.OGVVersion="1.8.6-20220111172545-1f60d9d")})()})();
\ No newline at end of file
diff --git a/ogvjs-1.8.6/ogv-version.js b/ogvjs-1.8.6/ogv-version.js
deleted file mode 100644
index 828291abf..000000000
--- a/ogvjs-1.8.6/ogv-version.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{var e={318:e=>{e.exports=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports},8:e=>{function _typeof(o){return e.exports=_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,_typeof(o)}e.exports=_typeof,e.exports.__esModule=!0,e.exports.default=e.exports}},o={};function __webpack_require__(t){var r=o[t];if(void 0!==r)return r.exports;var p=o[t]={exports:{}};return e[t](p,p.exports,__webpack_require__),p.exports}(()=>{"use strict";var e=__webpack_require__(318)(__webpack_require__(8)),o="1.8.6-20220111172545-1f60d9d";"object"===("undefined"==typeof window?"undefined":(0,e.default)(window))&&(window.OGVVersion=o)})()})();
\ No newline at end of file
diff --git a/ogvjs-1.8.6/ogv-worker-audio.js b/ogvjs-1.8.6/ogv-worker-audio.js
deleted file mode 100644
index 42bd2b9ff..000000000
--- a/ogvjs-1.8.6/ogv-worker-audio.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{var e={506:e=>{e.exports=function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e},e.exports.__esModule=!0,e.exports.default=e.exports},575:e=>{e.exports=function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},913:e=>{function _defineProperties(e,t){for(var r=0;r{function _getPrototypeOf(t){return e.exports=_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(e){return e.__proto__||Object.getPrototypeOf(e)},e.exports.__esModule=!0,e.exports.default=e.exports,_getPrototypeOf(t)}e.exports=_getPrototypeOf,e.exports.__esModule=!0,e.exports.default=e.exports},205:(e,t,r)=>{var o=r(489);e.exports=function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&o(e,t)},e.exports.__esModule=!0,e.exports.default=e.exports},318:e=>{e.exports=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports},585:(e,t,r)=>{var o=r(8).default,s=r(506);e.exports=function _possibleConstructorReturn(e,t){if(t&&("object"===o(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return s(e)},e.exports.__esModule=!0,e.exports.default=e.exports},489:e=>{function _setPrototypeOf(t,r){return e.exports=_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(e,t){return e.__proto__=t,e},e.exports.__esModule=!0,e.exports.default=e.exports,_setPrototypeOf(t,r)}e.exports=_setPrototypeOf,e.exports.__esModule=!0,e.exports.default=e.exports},8:e=>{function _typeof(t){return e.exports=_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,_typeof(t)}e.exports=_typeof,e.exports.__esModule=!0,e.exports.default=e.exports},445:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(575)),n=o(r(913)),a=o(r(539)),i="1.8.6-20220111172545-1f60d9d",u={OGVDemuxerOggW:"ogv-demuxer-ogg-wasm.js",OGVDemuxerWebMW:"ogv-demuxer-webm-wasm.js",OGVDecoderAudioOpusW:"ogv-decoder-audio-opus-wasm.js",OGVDecoderAudioVorbisW:"ogv-decoder-audio-vorbis-wasm.js",OGVDecoderVideoTheoraW:"ogv-decoder-video-theora-wasm.js",OGVDecoderVideoVP8W:"ogv-decoder-video-vp8-wasm.js",OGVDecoderVideoVP8MTW:"ogv-decoder-video-vp8-mt-wasm.js",OGVDecoderVideoVP9W:"ogv-decoder-video-vp9-wasm.js",OGVDecoderVideoVP9SIMDW:"ogv-decoder-video-vp9-simd-wasm.js",OGVDecoderVideoVP9MTW:"ogv-decoder-video-vp9-mt-wasm.js",OGVDecoderVideoVP9SIMDMTW:"ogv-decoder-video-vp9-simd-mt-wasm.js",OGVDecoderVideoAV1W:"ogv-decoder-video-av1-wasm.js",OGVDecoderVideoAV1SIMDW:"ogv-decoder-video-av1-simd-wasm.js",OGVDecoderVideoAV1MTW:"ogv-decoder-video-av1-mt-wasm.js",OGVDecoderVideoAV1SIMDMTW:"ogv-decoder-video-av1-simd-mt-wasm.js"},d=function(){function OGVLoaderBase(){(0,s.default)(this,OGVLoaderBase),this.base=this.defaultBase()}return(0,n.default)(OGVLoaderBase,[{key:"defaultBase",value:function defaultBase(){}},{key:"wasmSupported",value:function wasmSupported(){return a.default.wasmSupported()}},{key:"scriptForClass",value:function scriptForClass(e){return u[e]}},{key:"urlForClass",value:function urlForClass(e){var t=this.scriptForClass(e);if(t)return this.urlForScript(t);throw new Error("asked for URL for unknown class "+e)}},{key:"urlForScript",value:function urlForScript(e){if(e){var t=this.base;return void 0===t?t="":t+="/",t+e+"?version="+encodeURIComponent(i)}throw new Error("asked for URL for unknown script "+e)}},{key:"loadClass",value:function loadClass(e,t,r){var o=this;r=r||{};var s=this.getGlobal(),n=this.urlForClass(e),a=function classWrapper(t){return(t=t||{}).locateFile=function(e){return"data:"===e.slice(0,5)?e:o.urlForScript(e)},t.mainScriptUrlOrBlob=o.scriptForClass(e)+"?version="+encodeURIComponent(i),s[e](t)};"function"==typeof s[e]?t(a):this.loadScript(n,(function(){t(a)}))}}]),OGVLoaderBase}();t.default=d},713:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(575)),n=o(r(913)),a=o(r(205)),i=o(r(585)),u=o(r(754));function _createSuper(e){var t=function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var r,o=(0,u.default)(e);if(t){var s=(0,u.default)(this).constructor;r=Reflect.construct(o,arguments,s)}else r=o.apply(this,arguments);return(0,i.default)(this,r)}}var d=new(function(e){(0,a.default)(OGVLoaderWorker,e);var t=_createSuper(OGVLoaderWorker);function OGVLoaderWorker(){return(0,s.default)(this,OGVLoaderWorker),t.apply(this,arguments)}return(0,n.default)(OGVLoaderWorker,[{key:"loadScript",value:function loadScript(e,t){importScripts(e),t()}},{key:"getGlobal",value:function getGlobal(){return self}}]),OGVLoaderWorker}(o(r(445)).default));t.default=d},607:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=new(o(r(172)).default)(["loadedMetadata","audioFormat","audioBuffer","cpuTime"],{init:function init(e,t){this.target.init(t)},processHeader:function processHeader(e,t){this.target.processHeader(e[0],(function(e){t([e])}))},processAudio:function processAudio(e,t){this.target.processAudio(e[0],(function(e){t([e])}))}});t.default=s},172:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(8)),n=o(r(575)),a=o(r(913)),i=o(r(713));r.g.OGVLoader=i.default;var u=function(){function OGVWorkerSupport(e,t){var r=this;(0,n.default)(this,OGVWorkerSupport),this.propList=e,this.handlers=t,this.transferables=function(){var e=new ArrayBuffer(1024),t=new Uint8Array(e);try{return postMessage({action:"transferTest",bytes:t},[e]),!e.byteLength}catch(e){return!1}}(),this.target=null,this.sentProps={},this.pendingEvents=[],this.handlers.construct=function(e,t){var o=e[0],s=e[1];i.default.loadClass(o,(function(e){e(s).then((function(e){for(r.target=e,t();r.pendingEvents.length;)r.handleEvent(r.pendingEvents.shift())}))}))},addEventListener("message",(function(e){r.workerOnMessage(e)}))}return(0,a.default)(OGVWorkerSupport,[{key:"handleEvent",value:function handleEvent(e){var t=this;this.handlers[e.action].call(this,e.args,(function(r){r=r||[];var o={},s=[];t.propList.forEach((function(e){var r=t.target[e];if(t.sentProps[e]!==r)if(t.sentProps[e]=r,"duration"==e&&isNaN(r)&&isNaN(t.sentProps[e]));else if("audioBuffer"==e){if(o[e]=r,r)for(var n=0;n{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(8)),n=o(r(575)),a=o(r(913));var i=new(function(){function WebAssemblyChecker(){(0,n.default)(this,WebAssemblyChecker),this.tested=!1,this.testResult=void 0}return(0,a.default)(WebAssemblyChecker,[{key:"wasmSupported",value:function wasmSupported(){if(!this.tested){try{"object"===("undefined"==typeof WebAssembly?"undefined":(0,s.default)(WebAssembly))?this.testResult=function testSafariWebAssemblyBug(){var e=new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11]),t=new WebAssembly.Module(e);return 0!==new WebAssembly.Instance(t,{}).exports.test(4)}():this.testResult=!1}catch(e){console.log("Exception while testing WebAssembly",e),this.testResult=!1}this.tested=!0}return this.testResult}}]),WebAssemblyChecker}());t.default=i}},t={};function __webpack_require__(r){var o=t[r];if(void 0!==o)return o.exports;var s=t[r]={exports:{}};return e[r](s,s.exports,__webpack_require__),s.exports}__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{"use strict";__webpack_require__(318)(__webpack_require__(607))})()})();
\ No newline at end of file
diff --git a/ogvjs-1.8.6/ogv-worker-video.js b/ogvjs-1.8.6/ogv-worker-video.js
deleted file mode 100644
index b4f64bbc0..000000000
--- a/ogvjs-1.8.6/ogv-worker-video.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{var e={506:e=>{e.exports=function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e},e.exports.__esModule=!0,e.exports.default=e.exports},575:e=>{e.exports=function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},913:e=>{function _defineProperties(e,t){for(var r=0;r{function _getPrototypeOf(t){return e.exports=_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(e){return e.__proto__||Object.getPrototypeOf(e)},e.exports.__esModule=!0,e.exports.default=e.exports,_getPrototypeOf(t)}e.exports=_getPrototypeOf,e.exports.__esModule=!0,e.exports.default=e.exports},205:(e,t,r)=>{var o=r(489);e.exports=function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&o(e,t)},e.exports.__esModule=!0,e.exports.default=e.exports},318:e=>{e.exports=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports},585:(e,t,r)=>{var o=r(8).default,s=r(506);e.exports=function _possibleConstructorReturn(e,t){if(t&&("object"===o(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return s(e)},e.exports.__esModule=!0,e.exports.default=e.exports},489:e=>{function _setPrototypeOf(t,r){return e.exports=_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(e,t){return e.__proto__=t,e},e.exports.__esModule=!0,e.exports.default=e.exports,_setPrototypeOf(t,r)}e.exports=_setPrototypeOf,e.exports.__esModule=!0,e.exports.default=e.exports},8:e=>{function _typeof(t){return e.exports=_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,_typeof(t)}e.exports=_typeof,e.exports.__esModule=!0,e.exports.default=e.exports},445:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(575)),n=o(r(913)),a=o(r(539)),i="1.8.6-20220111172545-1f60d9d",u={OGVDemuxerOggW:"ogv-demuxer-ogg-wasm.js",OGVDemuxerWebMW:"ogv-demuxer-webm-wasm.js",OGVDecoderAudioOpusW:"ogv-decoder-audio-opus-wasm.js",OGVDecoderAudioVorbisW:"ogv-decoder-audio-vorbis-wasm.js",OGVDecoderVideoTheoraW:"ogv-decoder-video-theora-wasm.js",OGVDecoderVideoVP8W:"ogv-decoder-video-vp8-wasm.js",OGVDecoderVideoVP8MTW:"ogv-decoder-video-vp8-mt-wasm.js",OGVDecoderVideoVP9W:"ogv-decoder-video-vp9-wasm.js",OGVDecoderVideoVP9SIMDW:"ogv-decoder-video-vp9-simd-wasm.js",OGVDecoderVideoVP9MTW:"ogv-decoder-video-vp9-mt-wasm.js",OGVDecoderVideoVP9SIMDMTW:"ogv-decoder-video-vp9-simd-mt-wasm.js",OGVDecoderVideoAV1W:"ogv-decoder-video-av1-wasm.js",OGVDecoderVideoAV1SIMDW:"ogv-decoder-video-av1-simd-wasm.js",OGVDecoderVideoAV1MTW:"ogv-decoder-video-av1-mt-wasm.js",OGVDecoderVideoAV1SIMDMTW:"ogv-decoder-video-av1-simd-mt-wasm.js"},c=function(){function OGVLoaderBase(){(0,s.default)(this,OGVLoaderBase),this.base=this.defaultBase()}return(0,n.default)(OGVLoaderBase,[{key:"defaultBase",value:function defaultBase(){}},{key:"wasmSupported",value:function wasmSupported(){return a.default.wasmSupported()}},{key:"scriptForClass",value:function scriptForClass(e){return u[e]}},{key:"urlForClass",value:function urlForClass(e){var t=this.scriptForClass(e);if(t)return this.urlForScript(t);throw new Error("asked for URL for unknown class "+e)}},{key:"urlForScript",value:function urlForScript(e){if(e){var t=this.base;return void 0===t?t="":t+="/",t+e+"?version="+encodeURIComponent(i)}throw new Error("asked for URL for unknown script "+e)}},{key:"loadClass",value:function loadClass(e,t,r){var o=this;r=r||{};var s=this.getGlobal(),n=this.urlForClass(e),a=function classWrapper(t){return(t=t||{}).locateFile=function(e){return"data:"===e.slice(0,5)?e:o.urlForScript(e)},t.mainScriptUrlOrBlob=o.scriptForClass(e)+"?version="+encodeURIComponent(i),s[e](t)};"function"==typeof s[e]?t(a):this.loadScript(n,(function(){t(a)}))}}]),OGVLoaderBase}();t.default=c},713:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(575)),n=o(r(913)),a=o(r(205)),i=o(r(585)),u=o(r(754));function _createSuper(e){var t=function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var r,o=(0,u.default)(e);if(t){var s=(0,u.default)(this).constructor;r=Reflect.construct(o,arguments,s)}else r=o.apply(this,arguments);return(0,i.default)(this,r)}}var c=new(function(e){(0,a.default)(OGVLoaderWorker,e);var t=_createSuper(OGVLoaderWorker);function OGVLoaderWorker(){return(0,s.default)(this,OGVLoaderWorker),t.apply(this,arguments)}return(0,n.default)(OGVLoaderWorker,[{key:"loadScript",value:function loadScript(e,t){importScripts(e),t()}},{key:"getGlobal",value:function getGlobal(){return self}}]),OGVLoaderWorker}(o(r(445)).default));t.default=c},172:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(8)),n=o(r(575)),a=o(r(913)),i=o(r(713));r.g.OGVLoader=i.default;var u=function(){function OGVWorkerSupport(e,t){var r=this;(0,n.default)(this,OGVWorkerSupport),this.propList=e,this.handlers=t,this.transferables=function(){var e=new ArrayBuffer(1024),t=new Uint8Array(e);try{return postMessage({action:"transferTest",bytes:t},[e]),!e.byteLength}catch(e){return!1}}(),this.target=null,this.sentProps={},this.pendingEvents=[],this.handlers.construct=function(e,t){var o=e[0],s=e[1];i.default.loadClass(o,(function(e){e(s).then((function(e){for(r.target=e,t();r.pendingEvents.length;)r.handleEvent(r.pendingEvents.shift())}))}))},addEventListener("message",(function(e){r.workerOnMessage(e)}))}return(0,a.default)(OGVWorkerSupport,[{key:"handleEvent",value:function handleEvent(e){var t=this;this.handlers[e.action].call(this,e.args,(function(r){r=r||[];var o={},s=[];t.propList.forEach((function(e){var r=t.target[e];if(t.sentProps[e]!==r)if(t.sentProps[e]=r,"duration"==e&&isNaN(r)&&isNaN(t.sentProps[e]));else if("audioBuffer"==e){if(o[e]=r,r)for(var n=0;n{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=new(o(r(172)).default)(["loadedMetadata","videoFormat","frameBuffer","cpuTime"],{init:function init(e,t){this.target.init(t)},processHeader:function processHeader(e,t){this.target.processHeader(e[0],(function(e){t([e])}))},processFrame:function processFrame(e,t){this.target.processFrame(e[0],(function(e){t([e])}))},sync:function sync(e,t){this.target.sync(),t()},recycleFrame:function recycleFrame(e,t){this.target.recycleFrame(e[0]),t()}});t.default=s},539:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(8)),n=o(r(575)),a=o(r(913));var i=new(function(){function WebAssemblyChecker(){(0,n.default)(this,WebAssemblyChecker),this.tested=!1,this.testResult=void 0}return(0,a.default)(WebAssemblyChecker,[{key:"wasmSupported",value:function wasmSupported(){if(!this.tested){try{"object"===("undefined"==typeof WebAssembly?"undefined":(0,s.default)(WebAssembly))?this.testResult=function testSafariWebAssemblyBug(){var e=new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11]),t=new WebAssembly.Module(e);return 0!==new WebAssembly.Instance(t,{}).exports.test(4)}():this.testResult=!1}catch(e){console.log("Exception while testing WebAssembly",e),this.testResult=!1}this.tested=!0}return this.testResult}}]),WebAssemblyChecker}());t.default=i}},t={};function __webpack_require__(r){var o=t[r];if(void 0!==o)return o.exports;var s=t[r]={exports:{}};return e[r](s,s.exports,__webpack_require__),s.exports}__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{"use strict";__webpack_require__(318)(__webpack_require__(443))})()})();
\ No newline at end of file
diff --git a/ogvjs-1.8.6/ogv.js b/ogvjs-1.8.6/ogv.js
deleted file mode 100644
index 35b3ea040..000000000
--- a/ogvjs-1.8.6/ogv.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see ogv.js.LICENSE.txt */
-!function webpackUniversalModuleDefinition(t,i){"object"==typeof exports&&"object"==typeof module?module.exports=i():"function"==typeof define&&define.amd?define([],i):"object"==typeof exports?exports.ogvjs=i():t.ogvjs=i()}(globalThis,(function(){return(()=>{var t={506:t=>{t.exports=function _assertThisInitialized(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t},t.exports.__esModule=!0,t.exports.default=t.exports},575:t=>{t.exports=function _classCallCheck(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")},t.exports.__esModule=!0,t.exports.default=t.exports},913:t=>{function _defineProperties(t,i){for(var u=0;u{var d=u(331);function _get(){return"undefined"!=typeof Reflect&&Reflect.get?(t.exports=_get=Reflect.get,t.exports.__esModule=!0,t.exports.default=t.exports):(t.exports=_get=function _get(t,i,u){var c=d(t,i);if(c){var l=Object.getOwnPropertyDescriptor(c,i);return l.get?l.get.call(arguments.length<3?t:u):l.value}},t.exports.__esModule=!0,t.exports.default=t.exports),_get.apply(this,arguments)}t.exports=_get,t.exports.__esModule=!0,t.exports.default=t.exports},754:t=>{function _getPrototypeOf(i){return t.exports=_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(t){return t.__proto__||Object.getPrototypeOf(t)},t.exports.__esModule=!0,t.exports.default=t.exports,_getPrototypeOf(i)}t.exports=_getPrototypeOf,t.exports.__esModule=!0,t.exports.default=t.exports},205:(t,i,u)=>{var d=u(489);t.exports=function _inherits(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(i&&i.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),i&&d(t,i)},t.exports.__esModule=!0,t.exports.default=t.exports},318:t=>{t.exports=function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}},t.exports.__esModule=!0,t.exports.default=t.exports},585:(t,i,u)=>{var d=u(8).default,c=u(506);t.exports=function _possibleConstructorReturn(t,i){if(i&&("object"===d(i)||"function"==typeof i))return i;if(void 0!==i)throw new TypeError("Derived constructors may only return object or undefined");return c(t)},t.exports.__esModule=!0,t.exports.default=t.exports},489:t=>{function _setPrototypeOf(i,u){return t.exports=_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(t,i){return t.__proto__=i,t},t.exports.__esModule=!0,t.exports.default=t.exports,_setPrototypeOf(i,u)}t.exports=_setPrototypeOf,t.exports.__esModule=!0,t.exports.default=t.exports},331:(t,i,u)=>{var d=u(754);t.exports=function _superPropBase(t,i){for(;!Object.prototype.hasOwnProperty.call(t,i)&&null!==(t=d(t)););return t},t.exports.__esModule=!0,t.exports.default=t.exports},8:t=>{function _typeof(i){return t.exports=_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t.exports.__esModule=!0,t.exports.default=t.exports,_typeof(i)}t.exports=_typeof,t.exports.__esModule=!0,t.exports.default=t.exports},848:t=>{window,t.exports=function(t){var i={};function r(u){if(i[u])return i[u].exports;var d=i[u]={i:u,l:!1,exports:{}};return t[u].call(d.exports,d,d.exports,r),d.l=!0,d.exports}return r.m=t,r.c=i,r.d=function(t,i,u){r.o(t,i)||Object.defineProperty(t,i,{enumerable:!0,get:u})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,i){if(1&i&&(t=r(t)),8&i)return t;if(4&i&&"object"==typeof t&&t&&t.__esModule)return t;var u=Object.create(null);if(r.r(u),Object.defineProperty(u,"default",{enumerable:!0,value:t}),2&i&&"string"!=typeof t)for(var d in t)r.d(u,d,function(i){return t[i]}.bind(null,d));return u},r.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(i,"a",i),i},r.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},r.p="",r(r.s=1)}([function(t,i){function r(t,i){if(t<1||t!==Math.round(t))throw"Invalid channel count for BufferQueue";this.channels=t,this.bufferSize=i,this.flush()}r.prototype.flush=function(){this._buffers=[],this._pendingBuffer=this.createBuffer(this.bufferSize),this._pendingPos=0},r.prototype.sampleCount=function(){var t=0;return this._buffers.forEach((function(i){t+=i[0].length})),t},r.prototype.createBuffer=function(t){for(var i=[],u=0;u=d)return t;for(var l=[],h=0;h0?c[c.length+i]:t[0]:t[i]},h=0;hu&&(y=Math.SQRT1_2);for(var b=0;b=u&&(T=0);var k=t[T],P=new Float32Array(g);l(k,P,this._resampleLastSampleData?this._resampleLastSampleData[T]:void 0,y),h.push(P)}return this._resampleFractional=v,this._resampleLastSampleData=t,h},n.prototype.bufferData=function(t){if(!this._backend)throw"Invalid state: AudioFeeder cannot bufferData before init";var i=this._resample(t);i=this._tempoChanger.process(i),this._backend.appendBuffer(i)},n.prototype.getPlaybackState=function(){if(this._backend){var t=this._backend.getPlaybackState();return t.outputPlaybackPosition=t.playbackPosition,t.playbackPosition=this._tempoChanger.mapOutputToInputTime(t.outputPlaybackPosition),t}throw"Invalid state: AudioFeeder cannot getPlaybackState before init"},n.prototype.waitUntilReady=function(t){if(!this._backend)throw"Invalid state: AudioFeeder cannot waitUntilReady before init";this._backend.waitUntilReady(t)},n.prototype.start=function(){if(!this._backend)throw"Invalid state: AudioFeeder cannot start before init";this._backend.start()},n.prototype.stop=function(){if(!this._backend)throw"Invalid state: AudioFeeder cannot stop before init";this._backend.stop()},n.prototype.flush=function(){if(this._resampleFractional=0,this._resampleLastSampleData=void 0,!this._backend)throw"Invalid state: AudioFeeder cannot flush before init";this._tempoChanger.flush(this.durationBuffered),this._backend.flush()},n.prototype.close=function(){this._backend&&(this._backend.close(),this._backend=null)},n.prototype.onstarved=null,n.prototype.onbufferlow=null,n.isSupported=function(){return!!Float32Array&&i.isSupported()},n.initSharedAudioContext=function(){return i.isSupported()?i.initSharedAudioContext():null},t.exports=n}()},function(t,i,u){!function(){var i=window.AudioContext||window.webkitAudioContext,d=u(0),c=u(3);function o(t,i,u){var c=u.audioContext||o.initSharedAudioContext();if(this._context=c,this.output=u.output||c.destination,this.rate=c.sampleRate,this.channels=2,u.bufferSize&&(this.bufferSize=0|u.bufferSize),this.bufferThreshold=2*this.bufferSize,this._bufferQueue=new d(this.channels,this.bufferSize),this._playbackTimeAtBufferTail=c.currentTime,this._queuedTime=0,this._delayedTime=0,this._dropped=0,this._liveBuffer=this._bufferQueue.createBuffer(this.bufferSize),c.createScriptProcessor)this._node=c.createScriptProcessor(this.bufferSize,0,this.channels);else{if(!c.createJavaScriptNode)throw new Error("Bad version of web audio API?");this._node=c.createJavaScriptNode(this.bufferSize,0,this.channels)}}o.prototype.bufferSize=4096,o.prototype.bufferThreshold=8192,o.prototype._volume=1,Object.defineProperty(o.prototype,"volume",{get:function(){return this._volume},set:function(t){this._volume=+t}}),o.prototype._muted=!1,Object.defineProperty(o.prototype,"muted",{get:function(){return this._muted},set:function(t){this._muted=!!t}}),o.prototype._audioProcess=function(t){var i,u,d,l,h;h="number"==typeof t.playbackTime?t.playbackTime:this._context.currentTime+this.bufferSize/this.rate;var _=this._playbackTimeAtBufferTail;if(_0){var i=Math.round(t*this.rate),u=this._liveBuffer?this._liveBuffer[0].length:0;i>u?(this._bufferQueue.prependBuffer(this._liveBuffer),this._bufferQueue.prependBuffer(this._bufferQueue.createBuffer(i-u))):this._bufferQueue.prependBuffer(this._bufferQueue.trimBuffer(this._liveBuffer,u-i,i)),this._playbackTimeAtBufferTail-=t}this._node.onaudioprocess=null,this._node.disconnect()}},o.prototype.flush=function(){this._bufferQueue.flush()},o.prototype.close=function(){this.stop(),this._context=null},o.prototype.onstarved=null,o.prototype.onbufferlow=null,o.isSupported=function(){return!!i},o.sharedAudioContext=null,o.initSharedAudioContext=function(){if(!o.sharedAudioContext&&o.isSupported()){var t,u=new i;if(u.createScriptProcessor)t=u.createScriptProcessor(1024,0,2);else{if(!u.createJavaScriptNode)throw new Error("Bad version of web audio API?");t=u.createJavaScriptNode(1024,0,2)}t.connect(u.destination),t.disconnect(),o.sharedAudioContext=u}return o.sharedAudioContext},t.exports=o}()},function(t,i){t.exports=function(){if(void 0!==window.setImmediate)return window.setImmediate;if(window&&window.postMessage){var t=[];return window.addEventListener("message",(function(i){if(i.source===window){var u=i.data;if("object"==typeof u&&u.nextTickBrowserPingMessage){var d=t.pop();d&&d()}}})),function(i){t.push(i),window.postMessage({nextTickBrowserPingMessage:!0},document.location.toString())}}return function(t){setTimeout(t,0)}}()},function(t,i,u){var d;window,d=function(){return function(t){var i={};function r(u){if(i[u])return i[u].exports;var d=i[u]={i:u,l:!1,exports:{}};return t[u].call(d.exports,d,d.exports,r),d.l=!0,d.exports}return r.m=t,r.c=i,r.d=function(t,i,u){r.o(t,i)||Object.defineProperty(t,i,{enumerable:!0,get:u})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,i){if(1&i&&(t=r(t)),8&i)return t;if(4&i&&"object"==typeof t&&t&&t.__esModule)return t;var u=Object.create(null);if(r.r(u),Object.defineProperty(u,"default",{enumerable:!0,value:t}),2&i&&"string"!=typeof t)for(var d in t)r.d(u,d,function(i){return t[i]}.bind(null,d));return u},r.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(i,"a",i),i},r.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},r.p="",r(r.s=1)}([function(t,i){var u={float_array:function(t){return new Float32Array(t)},blit:function(t,i,u,d,c){u.set(t.subarray(i,i+c),d)}};t.exports=u},function(t,i,u){var d,c;d=u(0),c=u(2),t.exports=function(t){var i=(t=t||{}).sampleRate||44100,u=t.wsizeLog||11,l=t.tempo||1,h=(t.numChannels,Math.pow(2,50/1200)-1),_=1<>1),w=d.float_array(P),E=d.float_array(P),x=d.float_array(P),A=d.float_array(P),R=d.float_array(P),O=d.float_array(P),S=1+(P>>1),C=[0,0],B=[],D=[],M=[],V=[];for(k=0;k<2;k++)B.push(d.float_array(S)),D.push(d.float_array(S)),M.push(d.float_array(S)),V.push(d.float_array(P));var I=d.float_array(S),L=d.float_array(S),j=0,W=0,X=[{in_time:0,out_time:0,tempo:l}],N=0,H=0,z=1,Y=0,Q=0,K=0,$=0,Z={mapOutputToInputTime:function(t){for(var i=X.length-1;t0;)i--;var u=X[i];return u.in_time+u.tempo*(t-u.out_time)},flush:function(t){Y=0,C=[0,0],H=0,$=0,K=0;for(var i=0;i<2;i++)for(var u=0;u=0;)X.pop(),d--;X.push({in_time:j,out_time:W,tempo:l})}},getTempo:function(){return l},setTempo:function(t){y=b=m,t>=1?b=Math.round(y/t):y=Math.round(b*t),Q=(1/t-1*b/y)*y,z=function(t,i){for(var u=t.length/i|0,d=0,c=0;cu&&(u=t[d]);var c=1e-8*u,l=1,_=1;for(i[0]=1,d=2;dc&&t[d]>t[d-1]&&t[d]>=t[d+1]){var m=d+(t[d-1]-t[d+1])/(2*(t[d-1]-2*t[d]+t[d+1]));m-i[l-1]>p?(i[l++]=m,_=d):t[d]>t[_]&&(i[l-1]=m,_=d)}}return l}(k,w),x=D[p],A=M[p];if(0!=t&&0!=E){var R=0;for(K=0;Ky[R]&&R!=v;)++R;var O=R;R>0&&$-y[R-1].1*k[Math.round($)]){var j=J(i,u,$),W=b[O]+T[O]+U(j,$,b[O],y[O],l)-j;x[K]=j,A[K]=W,I[K]=Math.cos(W),L[K]=Math.sin(W)}else x[K]=J(i,u,$),A[K]=0,I[K]=1,L[K]=0}w[E]=2*_;var X=w[O=0],N=w[O+1],H=I[O],z=L[O];for(P=1;P=X&&P-X>N-P&&(X=w[++O],N=w[O+1],H=I[O],z=L[O]);var Y=i[P]*H-u[P]*z,Q=i[P]*z+u[P]*H;i[P]=Y,u[P]=Q}}else for(var K=0;Kc&&(c=Math.abs(2*p.m_re[i]));for(i=0;i<_-b;i++)Math.abs(p.m_re[i+b+t]+p.m_im[i])>c&&(c=Math.abs(p.m_re[i+b+t]+p.m_im[i]));for(i=_-b;i<_;i++)Math.abs(2*p.m_im[i])>c&&(c=Math.abs(2*p.m_im[i]));var h=1/Math.floor(1*_/(2*b));for(l*c>h&&(l=h/c),i=0;i<_;i++)v[i]+=l*p.m_re[i],v[i+b+t]+=l*p.m_im[i];return N+=2,H=2*b+t};return Z.process=function(t){var u=t[0].length,c=t[0];if(t.length>1){c=d.float_array(t[0].length);for(var h=1/t.length,p=0;p0){var T=$+K+u,k=[];for(p=0;px&&(x=$);var A=d.float_array(x);d.blit(v,0,A,0,$);for(var R=0,O=$,S=0,C=0;;){var B=_+y-K;if(R+B>u){d.blit(c,R,g,K,u-R),K+=u-R,R=u;break}B<=0?K-=2*y:(d.blit(c,R,g,K,B),R+=B,K=_-y),C=G(),j+=2*y/i,W+=C/i,(S=O+C-x)<0&&(S=0),d.blit(v,0,A,O,C-S),O+=C}d.blit(v,C-S,v,0,S),$=S;var D=[];for(p=0;p>=1;u.m_revTgt[c]=h}u.twiddleRe=d.float_array(u.m_logN),u.twiddleIm=d.float_array(u.m_logN);for(var p=1,m=0;m>1,_=c>>1,p=c;if(t)for(var m=1/c,g=0;g>=1,_>>=1,p>>=1}for(var B,D,M=u.m_revTgt,V=0;VV&&(D=i[B=M[V]],i[B]=i[V],i[V]=D,D=d[B],d[B]=d[V],d[V]=D)};var v=i>>1;return u.unpack=function(t,d,c,l){t[0]=u.m_re[0],c[0]=u.m_im[0],d[0]=l[0]=0,t[v]=u.m_re[v],c[v]=u.m_im[v],d[v]=l[v]=0;for(var h=1;h{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),l=d(u(913)),h=function(){function Bisector(t){(0,c.default)(this,Bisector),this.lower=t.start,this.upper=t.end,this.onprocess=t.process,this.position=0,this.n=0}return(0,l.default)(Bisector,[{key:"iterate",value:function iterate(){return this.n++,this.position=Math.floor((this.lower+this.upper)/2),this.onprocess(this.lower,this.upper,this.position)}},{key:"start",value:function start(){return this.iterate(),this}},{key:"left",value:function left(){return this.upper=this.position,this.iterate()}},{key:"right",value:function right(){return this.lower=this.position,this.iterate()}}]),Bisector}();i.default=h},523:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),l=d(u(913)),h=new(function(){function _class(){(0,c.default)(this,_class)}return(0,l.default)(_class,[{key:"hasTypedArrays",value:function hasTypedArrays(){return!!window.Uint32Array}},{key:"hasWebAssembly",value:function hasWebAssembly(){return!!window.WebAssembly}},{key:"hasWebAudio",value:function hasWebAudio(){return!(!window.AudioContext&&!window.webkitAudioContext)}},{key:"hasFlash",value:function hasFlash(){return!1}},{key:"hasAudio",value:function hasAudio(){return this.hasWebAudio()}},{key:"isBlacklisted",value:function isBlacklisted(t){return!1}},{key:"isSlow",value:function isSlow(){return!1}},{key:"isTooSlow",value:function isTooSlow(){return!1}},{key:"supported",value:function supported(t){return"OGVDecoder"===t?this.hasWebAssembly():"OGVPlayer"===t&&(this.supported("OGVDecoder")&&this.hasAudio())}}]),_class}());i.default=h},408:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),l=d(u(913)),h=d(u(205)),_=d(u(585)),p=d(u(754));function _createSuper(t){var i=function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function _createSuperInternal(){var u,d=(0,p.default)(t);if(i){var c=(0,p.default)(this).constructor;u=Reflect.construct(d,arguments,c)}else u=d.apply(this,arguments);return(0,_.default)(this,u)}}var m=function(t){(0,h.default)(OGVDecoderAudioProxy,t);var i=_createSuper(OGVDecoderAudioProxy);function OGVDecoderAudioProxy(){return(0,c.default)(this,OGVDecoderAudioProxy),i.apply(this,arguments)}return(0,l.default)(OGVDecoderAudioProxy,[{key:"init",value:function init(t){this.proxy("init",[],t)}},{key:"processHeader",value:function processHeader(t,i){this.proxy("processHeader",[t],i,[t])}},{key:"processAudio",value:function processAudio(t,i){this.proxy("processAudio",[t],i,[t])}},{key:"close",value:function close(){this.terminate()}}]),OGVDecoderAudioProxy}((0,d(u(580)).default)({loadedMetadata:!1,audioFormat:null,audioBuffer:null,cpuTime:0})),g=m;i.default=g},319:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),l=d(u(913)),h=d(u(205)),_=d(u(585)),p=d(u(754));function _createSuper(t){var i=function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function _createSuperInternal(){var u,d=(0,p.default)(t);if(i){var c=(0,p.default)(this).constructor;u=Reflect.construct(d,arguments,c)}else u=d.apply(this,arguments);return(0,_.default)(this,u)}}var m=function(t){(0,h.default)(OGVDecoderVideoProxy,t);var i=_createSuper(OGVDecoderVideoProxy);function OGVDecoderVideoProxy(){return(0,c.default)(this,OGVDecoderVideoProxy),i.apply(this,arguments)}return(0,l.default)(OGVDecoderVideoProxy,[{key:"init",value:function init(t){this.proxy("init",[],t)}},{key:"processHeader",value:function processHeader(t,i){this.proxy("processHeader",[t],i,[t])}},{key:"processFrame",value:function processFrame(t,i){this.proxy("processFrame",[t],i,[t])}},{key:"close",value:function close(){this.terminate()}},{key:"sync",value:function sync(){this.proxy("sync",[],(function(){}))}},{key:"recycleFrame",value:function recycleFrame(t){this.proxy("recycleFrame",[t],(function(){}),[t.y.bytes.buffer,t.u.bytes.buffer,t.v.bytes.buffer])}}]),OGVDecoderVideoProxy}((0,d(u(580)).default)({loadedMetadata:!1,videoFormat:null,frameBuffer:null,cpuTime:0})),g=m;i.default=g},445:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),l=d(u(913)),h=d(u(539)),_="1.8.6-20220111172545-1f60d9d",p={OGVDemuxerOggW:"ogv-demuxer-ogg-wasm.js",OGVDemuxerWebMW:"ogv-demuxer-webm-wasm.js",OGVDecoderAudioOpusW:"ogv-decoder-audio-opus-wasm.js",OGVDecoderAudioVorbisW:"ogv-decoder-audio-vorbis-wasm.js",OGVDecoderVideoTheoraW:"ogv-decoder-video-theora-wasm.js",OGVDecoderVideoVP8W:"ogv-decoder-video-vp8-wasm.js",OGVDecoderVideoVP8MTW:"ogv-decoder-video-vp8-mt-wasm.js",OGVDecoderVideoVP9W:"ogv-decoder-video-vp9-wasm.js",OGVDecoderVideoVP9SIMDW:"ogv-decoder-video-vp9-simd-wasm.js",OGVDecoderVideoVP9MTW:"ogv-decoder-video-vp9-mt-wasm.js",OGVDecoderVideoVP9SIMDMTW:"ogv-decoder-video-vp9-simd-mt-wasm.js",OGVDecoderVideoAV1W:"ogv-decoder-video-av1-wasm.js",OGVDecoderVideoAV1SIMDW:"ogv-decoder-video-av1-simd-wasm.js",OGVDecoderVideoAV1MTW:"ogv-decoder-video-av1-mt-wasm.js",OGVDecoderVideoAV1SIMDMTW:"ogv-decoder-video-av1-simd-mt-wasm.js"},m=function(){function OGVLoaderBase(){(0,c.default)(this,OGVLoaderBase),this.base=this.defaultBase()}return(0,l.default)(OGVLoaderBase,[{key:"defaultBase",value:function defaultBase(){}},{key:"wasmSupported",value:function wasmSupported(){return h.default.wasmSupported()}},{key:"scriptForClass",value:function scriptForClass(t){return p[t]}},{key:"urlForClass",value:function urlForClass(t){var i=this.scriptForClass(t);if(i)return this.urlForScript(i);throw new Error("asked for URL for unknown class "+t)}},{key:"urlForScript",value:function urlForScript(t){if(t){var i=this.base;return void 0===i?i="":i+="/",i+t+"?version="+encodeURIComponent(_)}throw new Error("asked for URL for unknown script "+t)}},{key:"loadClass",value:function loadClass(t,i,u){var d=this;u=u||{};var c=this.getGlobal(),l=this.urlForClass(t),h=function classWrapper(i){return(i=i||{}).locateFile=function(t){return"data:"===t.slice(0,5)?t:d.urlForScript(t)},i.mainScriptUrlOrBlob=d.scriptForClass(t)+"?version="+encodeURIComponent(_),c[t](i)};"function"==typeof c[t]?i(h):this.loadScript(l,(function(){i(h)}))}}]),OGVLoaderBase}();i.default=m},964:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),l=d(u(913)),h=d(u(525)),_=d(u(205)),p=d(u(585)),m=d(u(754)),g=d(u(408)),v=d(u(319)),y=d(u(445));function _createSuper(t){var i=function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function _createSuperInternal(){var u,d=(0,m.default)(t);if(i){var c=(0,m.default)(this).constructor;u=Reflect.construct(d,arguments,c)}else u=d.apply(this,arguments);return(0,p.default)(this,u)}}var b={audio:{proxy:g.default,worker:"ogv-worker-audio.js"},video:{proxy:v.default,worker:"ogv-worker-video.js"}},T={OGVDecoderAudioOpusW:"audio",OGVDecoderAudioVorbisW:"audio",OGVDecoderVideoTheoraW:"video",OGVDecoderVideoVP8W:"video",OGVDecoderVideoVP9W:"video",OGVDecoderVideoVP9SIMDW:"video",OGVDecoderVideoAV1W:"video",OGVDecoderVideoAV1SIMDW:"video"},k=new(function(t){(0,_.default)(OGVLoaderWeb,t);var i=_createSuper(OGVLoaderWeb);function OGVLoaderWeb(){var t;return(0,c.default)(this,OGVLoaderWeb),(t=i.call(this)).scriptStatus={},t.scriptCallbacks={},t}return(0,l.default)(OGVLoaderWeb,[{key:"getGlobal",value:function getGlobal(){return window}},{key:"defaultBase",value:function defaultBase(){for(var t,i,u=document.querySelectorAll("script"),d=/^(?:|(.*)\/)ogv(?:-support|-es2017)?\.js(?:\?|#|$)/,c=0;c{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(913)),l=d(u(575)),h=d(u(309)),_={MEDIA_ERR_ABORTED:1,MEDIA_ERR_NETWORK:2,MEDIA_ERR_DECODE:3,MEDIA_ERR_SRC_NOT_SUPPORTED:4},p=(0,c.default)((function OGVMediaError(t,i){(0,l.default)(this,OGVMediaError),this.code=t,this.message=i}));(0,h.default)(p,_),(0,h.default)(p.prototype,_);var m=p;i.default=m},278:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(913)),l=d(u(575));function split(t,i,u){var d=t.split(i,u).map((function(t){return function trim(t){return t.replace(/^\s+/,"").replace(/\s+$/,"")}(t)}));if("number"==typeof u)for(;d.length{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),l=d(u(913)),h=d(u(506)),_=d(u(205)),p=d(u(585)),m=d(u(754)),g=d(u(8)),v=d(u(731)),y=d(u(936)),b=d(u(848)),T=d(u(964)),k=d(u(893)),P=d(u(309)),w=d(u(759)),E=d(u(278)),x=d(u(168)),A=d(u(625));function _createSuper(t){var i=function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function _createSuperInternal(){var u,d=(0,m.default)(t);if(i){var c=(0,m.default)(this).constructor;u=Reflect.construct(d,arguments,c)}else u=d.apply(this,arguments);return(0,p.default)(this,u)}}var R,O=function(){if("function"==typeof setImmediate)return setImmediate;var t=new MessageChannel,i=[];return t.port1.onmessage=function(t){i.shift()()},function nextTick(u){i.push(u),t.port2.postMessage({})}}(),S={NETWORK_EMPTY:0,NETWORK_IDLE:1,NETWORK_LOADING:2,NETWORK_NO_SOURCE:3,HAVE_NOTHING:0,HAVE_METADATA:1,HAVE_CURRENT_DATA:2,HAVE_FUTURE_DATA:3,HAVE_ENOUGH_DATA:4},C="INITIAL",B="SEEKING_END",D="LOADED",M="PRELOAD",V="READY",I="PLAYING",L="SEEKING",j="ERROR",W="NOT_SEEKING",X="BISECT_TO_TARGET",N="BISECT_TO_KEYPOINT",H="LINEAR_TO_TARGET",z="exact",Y="fast";function OGVJSElement(){var t=document.createElement("ogvjs");return Object.setPrototypeOf?Object.setPrototypeOf(t,Object.getPrototypeOf(this)):t.__proto__=this.__proto__,t}R="undefined"==typeof performance||void 0===(0,g.default)(performance.now)?Date.now:performance.now.bind(performance),OGVJSElement.prototype=Object.create(HTMLElement.prototype,{});var Q=function(t){(0,_.default)(OGVPlayer,t);var i=_createSuper(OGVPlayer);function OGVPlayer(t){var u;if((0,c.default)(this,OGVPlayer),u=i.call(this),(t=t||{}).base=t.base||T.default.base,u._options=t,u._instanceId="ogvjs"+ ++OGVPlayer.instanceCount,void 0!==t.worker?u._enableWorker=!!t.worker:u._enableWorker=!!window.Worker,!T.default.wasmSupported())throw new Error("WebAssembly not supported");return u._enableThreading=!!t.threading,u._enableSIMD=!!t.simd,u._state=C,u._seekState=W,u._detectedType=null,u._canvas=document.createElement("canvas"),u._frameSink=null,u.className=u._instanceId,(0,P.default)((0,h.default)(u),S),u._view=u._canvas,u._view.style.position="absolute",u._view.style.top="0",u._view.style.left="0",u._view.style.width="100%",u._view.style.height="100%",u._view.style.objectFit="contain",u.appendChild(u._view),u._startTime=R(),u._codec=null,u._audioInfo=null,u._videoInfo=null,u._actionQueue=[],u._audioFeeder=null,u._muted=!1,u._initialPlaybackPosition=0,u._initialPlaybackOffset=0,u._prebufferingAudio=!1,u._initialSeekTime=0,u._currentSrc="",u._streamEnded=!1,u._mediaError=null,u._dataEnded=!1,u._byteLength=0,u._duration=null,u._lastSeenTimestamp=null,u._nextProcessingTimer,u._nextFrameTimer=null,u._loading=!1,u._started=!1,u._paused=!0,u._ended=!1,u._startedPlaybackInDocument=!1,u._stream=void 0,u._framesProcessed=0,u._targetPerFrameTime=1e3/60,u._actualPerFrameTime=0,u._totalFrameTime=0,u._totalFrameCount=0,u._playTime=0,u._bufferTime=0,u._drawingTime=0,u._proxyTime=0,u._totalJitter=0,u._droppedAudio=0,u._delayedAudio=0,u._lateFrames=0,u._poster="",u._thumbnail=null,u._frameEndTimestamp=0,u._audioEndTimestamp=0,u._decodedFrames=[],u._pendingFrames=[],u._lastFrameDecodeTime=0,u._lastFrameVideoCpuTime=0,u._lastFrameAudioCpuTime=0,u._lastFrameDemuxerCpuTime=0,u._lastFrameDrawingTime=0,u._lastFrameBufferTime=0,u._lastFrameProxyTime=0,u._lastVideoCpuTime=0,u._lastAudioCpuTime=0,u._lastDemuxerCpuTime=0,u._lastBufferTime=0,u._lastProxyTime=0,u._lastDrawingTime=0,u._lastFrameTimestamp=0,u._currentVideoCpuTime=0,u._lastTimeUpdate=0,u._timeUpdateInterval=250,u._seekTargetTime=0,u._bisectTargetTime=0,u._seekMode=null,u._lastSeekPosition=null,u._seekBisector=null,u._didSeek=null,u._depth=0,u._needProcessing=!1,u._pendingFrame=0,u._pendingAudio=0,u._framePipelineDepth=8,u._frameParallelism=u._enableThreading?Math.min(16,navigator.hardwareConcurrency)||1:0,u._audioPipelineDepth=12,u._videoInfo=null,u._audioInfo=null,u._width=0,u._height=0,u._volume=1,u._playbackRate=1,Object.defineProperties((0,h.default)(u),{src:{get:function getSrc(){return this.getAttribute("src")||""},set:function setSrc(t){this.setAttribute("src",t),this._loading=!1,this._prepForLoad("interactive")}},buffered:{get:function getBuffered(){var t,i=this;return t=this._stream&&this._byteLength&&this._duration?this._stream.getBufferedRanges().map((function(t){return t.map((function(t){return t/i._stream.length*i._duration}))})):[[0,0]],new x.default(t)}},seekable:{get:function getSeekable(){return this.duration<1/0&&this._stream&&this._stream.seekable&&this._codec&&this._codec.seekable?new x.default([[0,this._duration]]):new x.default([])}},currentTime:{get:function getCurrentTime(){return this._state==L?this._seekTargetTime:this._codec?this._state!=I||this._paused?this._initialPlaybackOffset:this._getPlaybackTime():this._initialSeekTime},set:function setCurrentTime(t){this._seek(t,z)}},duration:{get:function getDuration(){return this._codec&&this._codec.loadedMetadata?null!==this._duration?this._duration:1/0:NaN}},paused:{get:function getPaused(){return this._paused}},ended:{get:function getEnded(){return this._ended}},seeking:{get:function getSeeking(){return this._state==L}},muted:{get:function getMuted(){return this._muted},set:function setMuted(t){this._muted=t,this._audioFeeder?this._audioFeeder.muted=this._muted:this._started&&!this._muted&&this._codec&&this._codec.hasAudio&&(this._log("unmuting: switching from timer to audio clock"),this._initAudioFeeder(),this._startPlayback(this._audioEndTimestamp)),this._fireEventAsync("volumechange")}},poster:{get:function getPoster(){return this._poster},set:function setPoster(t){var i=this;if(this._poster=t,!this._started){this._thumbnail&&this.removeChild(this._thumbnail);var u=new Image;u.src=this._poster,u.className="ogvjs-poster",u.style.position="absolute",u.style.top="0",u.style.left="0",u.style.width="100%",u.style.height="100%",u.style.objectFit="contain",u.style.visibility="hidden",u.addEventListener("load",(function(){i._thumbnail===u&&(OGVPlayer.styleManager.appendRule("."+i._instanceId,{width:u.naturalWidth+"px",height:u.naturalHeight+"px"}),u.style.visibility="visible")})),this._thumbnail=u,this.appendChild(u)}}},videoWidth:{get:function getVideoWidth(){return this._videoInfo?this._videoInfo.displayWidth:0}},videoHeight:{get:function getVideoHeight(){return this._videoInfo?this._videoInfo.displayHeight:0}},ogvjsVideoFrameRate:{get:function getOgvJsVideoFrameRate(){return this._videoInfo?0==this._videoInfo.fps?this._totalFrameCount/(this._totalFrameTime/1e3):this._videoInfo.fps:0}},ogvjsAudioChannels:{get:function getOgvJsAudioChannels(){return this._audioInfo?this._audioInfo.channels:0}},ogvjsAudioSampleRate:{get:function getOgvJsAudioChannels(){return this._audioInfo?this._audioInfo.rate:0}},width:{get:function getWidth(){return this._width},set:function setWidth(t){this._width=parseInt(t,10),this.style.width=this._width+"px"}},height:{get:function getHeight(){return this._height},set:function setHeight(t){this._height=parseInt(t,10),this.style.height=this._height+"px"}},autoplay:{get:function getAutoplay(){return!1},set:function setAutoplay(t){}},controls:{get:function getControls(){return!1},set:function setControls(t){}},loop:{get:function getLoop(){return!1},set:function setLoop(t){}},crossOrigin:{get:function getCrossOrigin(){return null},set:function setCrossOrigin(t){}},currentSrc:{get:function getCurrentSrc(){return this._currentSrc}},defaultMuted:{get:function getDefaultMuted(){return!1}},defaultPlaybackRate:{get:function getDefaultPlaybackRate(){return 1}},error:{get:function getError(){return this._state===j?this._mediaError?this._mediaError:new w.default("unknown error occurred in media procesing"):null}},preload:{get:function getPreload(){return this.getAttribute("preload")||""},set:function setPreload(t){this.setAttribute("preload",t)}},readyState:{get:function getReadyState(){return this._stream&&this._codec&&this._codec.loadedMetadata?OGVPlayer.HAVE_ENOUGH_DATA:OGVPlayer.HAVE_NOTHING}},networkState:{get:function getNetworkState(){return this._stream?this._stream.waiting?OGVPlayer.NETWORK_LOADING:OGVPlayer.NETWORK_IDLE:this.readyState==OGVPlayer.HAVE_NOTHING?OGVPlayer.NETWORK_EMPTY:OGVPlayer.NETWORK_NO_SOURCE}},playbackRate:{get:function getPlaybackRate(){return this._playbackRate},set:function setPlaybackRate(t){var i=Number(t)||1;this._audioFeeder?this._audioFeeder.tempo=i:this._paused||(this._initialPlaybackOffset=this._getPlaybackTime(),this._initialPlaybackPosition=i*R()/1e3),this._playbackRate=i,this._fireEventAsync("ratechange")}},played:{get:function getPlayed(){return new x.default([[0,this.currentTime]])}},volume:{get:function getVolume(){return this._volume},set:function setVolume(t){this._volume=+t,this._audioFeeder&&(this._audioFeeder.volume=this._volume),this._fireEventAsync("volumechange")}}}),u.onframecallback=null,u.onloadstate=null,u.onprogress=null,u.onsuspend=null,u.onabort=null,u.onemptied=null,u.onstalled=null,u.onloadedmetadata=null,u.onloadeddata=null,u.oncanplay=null,u.oncanplaythrough=null,u.onplaying=null,u.onwaiting=null,u.onseeking=null,u.onseeked=null,u.onended=null,u.ondurationchange=null,u.ontimeupdate=null,u.onplay=null,u.onpause=null,u.onratechange=null,u.onresize=null,u.onvolumechange=null,u.onaudiofeedercreated=null,u}return(0,l.default)(OGVPlayer,[{key:"_time",value:function _time(t){var i=R();t();var u=R()-i;return this._lastFrameDecodeTime+=u,u}},{key:"_log",value:function _log(t){var i=this._options;if(i.debug){var u=R()-this._startTime;i.debugFilter&&!t.match(i.debugFilter)||console.log("["+Math.round(10*u)/10+"ms] "+t)}}},{key:"_fireEvent",value:function _fireEvent(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._log("fireEvent "+t);var u,d="function"==typeof Event;for(var c in d?u=new CustomEvent(t):(u=document.createEvent("Event")).initEvent(t,!1,!1),i)i.hasOwnProperty(c)&&(u[c]=i[c]);var l=this.dispatchEvent(u);!d&&"resize"===t&&this.onresize&&l&&this.onresize.call(this,u)}},{key:"_fireEventAsync",value:function _fireEventAsync(t){var i=this,u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._log("fireEventAsync "+t),O((function(){i._fireEvent(t,u)}))}},{key:"_initAudioFeeder",value:function _initAudioFeeder(){var t=this,i=this._options,u={bufferSize:8192};i.audioContext&&(u.audioContext=i.audioContext),i.audioDestination&&(u.output=i.audioDestination),i.audioBackendFactory&&(u.backendFactory=i.audioBackendFactory);var d=this._audioFeeder=new b.default(u);d.init(this._audioInfo.channels,this._audioInfo.rate),this.onaudiofeedercreated&&this.onaudiofeedercreated(this._audioFeeder),d.bufferThreshold=1,d.volume=this.volume,d.muted=this.muted,d.tempo=this.playbackRate,d.onbufferlow=function(){t._log("onbufferlow"),t._stream&&(t._stream.buffering||t._stream.seeking)||t._pendingAudio||t._pingProcessing()},d.onstarved=function(){t._dataEnded?t._log("onstarved: appear to have reached end of audio"):(t._log("onstarved: halting audio due to starvation"),t._stopPlayback(),t._prebufferingAudio=!0),t._isProcessing()||t._pingProcessing(0)}}},{key:"_startPlayback",value:function _startPlayback(t){if(this._audioFeeder){this._audioFeeder.start();var i=this._audioFeeder.getPlaybackState();this._initialPlaybackPosition=i.playbackPosition}else this._initialPlaybackPosition=this._playbackRate*R()/1e3;void 0!==t&&(this._initialPlaybackOffset=t),this._prebufferingAudio=!1,this._log("continuing at "+this._initialPlaybackPosition+", "+this._initialPlaybackOffset)}},{key:"_stopPlayback",value:function _stopPlayback(){this._initialPlaybackOffset=this._getPlaybackTime(),this._log("pausing at "+this._initialPlaybackOffset),this._audioFeeder&&this._audioFeeder.stop()}},{key:"_getPlaybackTime",value:function _getPlaybackTime(t){return this._prebufferingAudio||this._paused?this._initialPlaybackOffset:(this._audioFeeder?(t=t||this._audioFeeder.getPlaybackState()).playbackPosition:this._playbackRate*R()/1e3)-this._initialPlaybackPosition+this._initialPlaybackOffset}},{key:"_stopVideo",value:function _stopVideo(){this._log("STOPPING"),this._state=C,this._seekState=W,this._started=!1,this._ended=!1,this._frameEndTimestamp=0,this._audioEndTimestamp=0,this._lastFrameDecodeTime=0,this._prebufferingAudio=!1,this._actionQueue.splice(0,this._actionQueue.length),this._stream&&(this._stream.abort(),this._stream=null,this._streamEnded=!1),this._codec&&(this._codec.close(),this._codec=null,this._pendingFrame=0,this._pendingAudio=0,this._dataEnded=!1),this._videoInfo=null,this._audioInfo=null,this._audioFeeder&&(this._audioFeeder.close(),this._audioFeeder=null),this._nextProcessingTimer&&(clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null),this._nextFrameTimer&&(clearTimeout(this._nextFrameTimer),this._nextFrameTimer=null),this._frameSink&&(this._frameSink.clear(),this._frameSink=null),this._decodedFrames&&(this._decodedFrames=[]),this._pendingFrames&&(this._pendingFrames=[]),this._initialSeekTime=0,this._initialPlaybackPosition=0,this._initialPlaybackOffset=0,this._duration=null}},{key:"_doFrameComplete",value:function _doFrameComplete(){var t=this,i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._startedPlaybackInDocument&&!document.body.contains(this)&&O((function(){t.stop()}));var u=R(),d=u-this._lastFrameTimestamp,c=this._actualPerFrameTime-this._targetPerFrameTime;this._totalJitter+=Math.abs(c),this._playTime+=d;var l={cpuTime:this._lastFrameDecodeTime,drawingTime:this._drawingTime-this._lastFrameDrawingTime,bufferTime:this._bufferTime-this._lastFrameBufferTime,proxyTime:this._proxyTime-this._lastFrameProxyTime,demuxerTime:0,videoTime:0,audioTime:0,clockTime:this._actualPerFrameTime,late:i.dropped,dropped:i.dropped};function n(t){return Math.round(10*t)/10}this._codec&&(l.demuxerTime=this._codec.demuxerCpuTime-this._lastFrameDemuxerCpuTime,l.videoTime+=this._currentVideoCpuTime-this._lastFrameVideoCpuTime,l.audioTime+=this._codec.audioCpuTime-this._lastFrameAudioCpuTime),l.cpuTime+=l.demuxerTime,this._lastFrameDecodeTime=0,this._lastFrameTimestamp=u,this._codec?(this._lastFrameVideoCpuTime=this._currentVideoCpuTime,this._lastFrameAudioCpuTime=this._codec.audioCpuTime,this._lastFrameDemuxerCpuTime=this._codec.demuxerCpuTime):(this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0),this._lastFrameDrawingTime=this._drawingTime,this._lastFrameBufferTime=this._bufferTime,this._lastFrameProxyTime=this._proxyTime,this._log("drew frame "+i.frameEndTimestamp+": clock time "+n(d)+" (jitter "+n(c)+") cpu: "+n(l.cpuTime)+" (mux: "+n(l.demuxerTime)+" buf: "+n(l.bufferTime)+" draw: "+n(l.drawingTime)+" proxy: "+n(l.proxyTime)+") vid: "+n(l.videoTime)+" aud: "+n(l.audioTime)),this._fireEventAsync("framecallback",l),(!this._lastTimeUpdate||u-this._lastTimeUpdate>=this._timeUpdateInterval)&&(this._lastTimeUpdate=u,this._fireEventAsync("timeupdate")),this._codec&&i.yCbCrBuffer&&this._codec.recycleFrame(i.yCbCrBuffer)}},{key:"_seekStream",value:function _seekStream(t){var i=this;this._stream.seeking&&this._stream.abort(),this._stream.buffering&&this._stream.abort(),this._streamEnded=!1,this._dataEnded=!1,this._ended=!1,this._stream.seek(t).then((function(){i._readBytesAndWait()})).catch((function(t){i._onStreamError(t)}))}},{key:"_onStreamError",value:function _onStreamError(t){"AbortError"===t.name?this._log("i/o promise canceled; ignoring"):(this._log("i/o error: "+t),this._mediaError=new w.default(w.default.MEDIA_ERR_NETWORK,String(t)),this._state=j,this._stopPlayback())}},{key:"_seek",value:function _seek(t,i){var u=this;if(this._log("requested seek to "+t+", mode "+i),this.readyState==this.HAVE_NOTHING)return this._log("not yet loaded; saving seek position for later"),void(this._initialSeekTime=t);if(this._stream&&!this._stream.seekable)throw new Error("Cannot seek a non-seekable stream");if(this._codec&&!this._codec.seekable)throw new Error("Cannot seek in a non-seekable file");var d=function prepForSeek(d){u._stream&&u._stream.buffering&&u._stream.abort(),u._stream&&u._stream.seeking&&u._stream.abort(),u._actionQueue.splice(0,u._actionQueue.length),u._stopPlayback(),u._prebufferingAudio=!1,u._audioFeeder&&u._audioFeeder.flush(),u._state=L,u._seekTargetTime=t,u._seekMode=i,u._codec?u._codec.flush(d):d()};d((function(){u._isProcessing()||u._pingProcessing(0)})),this._actionQueue.push((function(){d((function(){u._doSeek(t)}))}))}},{key:"_doSeek",value:function _doSeek(t){var i=this;this._streamEnded=!1,this._dataEnded=!1,this._ended=!1,this._state=L,this._seekTargetTime=t,this._lastSeekPosition=-1,this._decodedFrames=[],this._pendingFrames=[],this._pendingFrame=0,this._pendingAudio=0,this._didSeek=!1,this._codec.seekToKeypoint(t,(function(u){if(u)return i._seekState=H,i._fireEventAsync("seeking"),i._didSeek?void 0:void i._pingProcessing();i._codec.getKeypointOffset(t,(function(t){t>0?(i._seekState=H,i._seekStream(t)):(i._seekState=X,i._startBisection(i._seekTargetTime)),i._fireEventAsync("seeking")}))}))}},{key:"_startBisection",value:function _startBisection(t){var i=this,u=Math.max(0,this._stream.length-65536);this._bisectTargetTime=t,this._seekBisector=new k.default({start:0,end:u,process:function process(t,u,d){return d!=i._lastSeekPosition&&(i._lastSeekPosition=d,i._codec.flush((function(){i._seekStream(d)})),!0)}}),this._seekBisector.start()}},{key:"_continueSeekedPlayback",value:function _continueSeekedPlayback(){var t=this;this._seekState=W,this._state=V,this._frameEndTimestamp=this._codec.frameTimestamp,this._audioEndTimestamp=this._codec.audioTimestamp,this._codec.hasAudio?this._seekTargetTime=this._codec.audioTimestamp:this._seekTargetTime=this._codec.frameTimestamp,this._initialPlaybackOffset=this._seekTargetTime;var i=function finishedSeeking(){t._lastTimeUpdate=t._seekTargetTime,t._fireEventAsync("timeupdate"),t._fireEventAsync("seeked"),t._isProcessing()||t._pingProcessing()};if(this._codec.hasVideo&&this._decodedFrames.length){var u=this._decodedFrames.shift();this._drawFrame(u.yCbCrBuffer),i()}else{if(this._codec.hasVideo&&this._codec.frameReady)return this._codec.decodeFrame((function(u){u&&t._drawFrame(t._codec.frameBuffer),i()})),void this._codec.sync();i()}}},{key:"_drawFrame",value:function _drawFrame(t){this._thumbnail&&(this.removeChild(this._thumbnail),this._thumbnail=null),this._frameSink.drawFrame(t)}},{key:"_doProcessLinearSeeking",value:function _doProcessLinearSeeking(){var t,i=this;if(t=this._codec.hasVideo?this._targetPerFrameTime/1e3:1/256,this._codec.hasVideo){if(this._pendingFrame)return;if(!this._codec.frameReady)return void this._codec.process((function(t){t?i._pingProcessing():i._streamEnded?(i._log("stream ended during linear seeking on video"),i._dataEnded=!0,i._continueSeekedPlayback()):i._readBytesAndWait()}));if(this._seekMode===Y&&this._codec.keyframeTimestamp==this._codec.frameTimestamp)return void this._continueSeekedPlayback();if(this._codec.frameTimestamp<=this._seekTargetTime){var u=this._codec.frameTimestamp;return this._pendingFrame++,this._pendingFrames.push({frameEndTimestamp:u}),this._decodedFrames.splice(0,this._decodedFrames.length),this._codec.decodeFrame((function(t){i._pendingFrame--,i._pendingFrames.shift(),i._decodedFrames.push({yCbCrBuffer:i._codec.frameBuffer,videoCpuTime:i._codec.videoCpuTime,frameEndTimestamp:u}),i._pingProcessing()})),void this._codec.sync()}if(!this._codec.hasAudio)return void this._continueSeekedPlayback()}if(this._codec.hasAudio){if(this._pendingAudio)return;return this._codec.audioReady?this._codec.audioTimestamp+tthis._bisectTargetTime?this._seekBisector.left()||(this._log("close enough (left)"),this._seekTargetTime=i,this._continueSeekedPlayback()):i+t/20?this._targetPerFrameTime=1e3/this._videoInfo.fps:this._targetPerFrameTime=16.667,this._canvas.width=this._videoInfo.displayWidth,this._canvas.height=this._videoInfo.displayHeight,OGVPlayer.styleManager.appendRule("."+this._instanceId,{width:this._videoInfo.displayWidth+"px",height:this._videoInfo.displayHeight+"px"});var t={};void 0!==this._options.webGL&&(t.webGL=this._options.webGL),this._options.forceWebGL&&(t.webGL="required"),this._frameSink=v.default.attach(this._canvas,t)}},{key:"_doProcessing",value:function _doProcessing(){if(this._didSeek&&(this._didSeek=!1),this._nextProcessingTimer=null,this._isProcessing(),this._depth>0)throw new Error("REENTRANCY FAIL: doProcessing recursing unexpectedly");var t=0;do{if(this._needProcessing=!1,this._depth++,this._doProcessingLoop(),this._depth--,this._needProcessing&&this._isProcessing())throw new Error("REENTRANCY FAIL: waiting on input or codec but asked to keep processing");++t>500&&(this._log("stuck in processing loop; breaking with timer"),this._needProcessing=0,this._pingProcessing(0))}while(this._needProcessing)}},{key:"_doProcessingLoop",value:function _doProcessingLoop(){if(this._actionQueue.length)this._actionQueue.shift()();else if(this._state==C)this._doProcessInitial();else if(this._state==B)this._doProcessSeekingEnd();else if(this._state==D)this._doProcessLoaded();else if(this._state==M)this._doProcessPreload();else if(this._state==V)this._doProcessReady();else if(this._state==L)this._doProcessSeeking();else if(this._state==I)this._doProcessPlay();else{if(this._state!=j)throw new Error("Unexpected OGVPlayer state "+this._state);this._doProcessError()}}},{key:"_doProcessInitial",value:function _doProcessInitial(){var t=this;if(this._codec.loadedMetadata){if(!this._codec.hasVideo&&!this._codec.hasAudio)throw new Error("No audio or video found, something is wrong");this._codec.hasAudio&&(this._audioInfo=this._codec.audioFormat),this._codec.hasVideo&&(this._videoInfo=this._codec.videoFormat,this._setupVideo()),isNaN(this._codec.duration)||(this._duration=this._codec.duration),null===this._duration&&this._stream.seekable&&"video/ogg"==this._detectedType?(this._state=B,this._lastSeenTimestamp=-1,this._codec.flush((function(){t._seekStream(Math.max(0,t._stream.length-131072))}))):(this._state=D,this._pingProcessing())}else this._codec.process((function(i){if(i)t._pingProcessing();else{if(t._streamEnded)throw new Error("end of file before headers found");t._log("reading more cause we are out of data"),t._readBytesAndWait()}}))}},{key:"_doProcessSeekingEnd",value:function _doProcessSeekingEnd(){var t=this;this._codec.frameReady?(this._log("saw frame with "+this._codec.frameTimestamp),this._lastSeenTimestamp=Math.max(this._lastSeenTimestamp,this._codec.frameTimestamp),this._codec.discardFrame((function(){t._pingProcessing()}))):this._codec.audioReady?(this._log("saw audio with "+this._codec.audioTimestamp),this._lastSeenTimestamp=Math.max(this._lastSeenTimestamp,this._codec.audioTimestamp),this._codec.discardAudio((function(){t._pingProcessing()}))):this._codec.process((function(i){i?t._pingProcessing():t._stream.eof?(t._log("seek-duration: we are at the end: "+t._lastSeenTimestamp),t._lastSeenTimestamp>0&&(t._duration=t._lastSeenTimestamp),t._state=D,t._codec.flush((function(){t._streamEnded=!1,t._dataEnded=!1,t._seekStream(0)}))):t._readBytesAndWait()}))}},{key:"_doProcessLoaded",value:function _doProcessLoaded(){this._state=M,this._fireEventAsync("loadedmetadata"),this._fireEventAsync("durationchange"),this._codec.hasVideo&&this._fireEventAsync("resize"),this._pingProcessing(0)}},{key:"_doProcessPreload",value:function _doProcessPreload(){var t=this;!this._codec.frameReady&&this._codec.hasVideo||!this._codec.audioReady&&this._codec.hasAudio?this._codec.process((function(i){i?t._pingProcessing():t._streamEnded?t._ended=!0:t._readBytesAndWait()})):(this._state=V,this._fireEventAsync("loadeddata"),this._pingProcessing())}},{key:"_doProcessReady",value:function _doProcessReady(){var t=this;if(this._log("initial seek to "+this._initialSeekTime),this._initialSeekTime>0){var i=this._initialSeekTime;this._initialSeekTime=0,this._log("initial seek to "+i),this._doSeek(i)}else if(this._paused)this._log("paused while in ready");else{var u=function finishStartPlaying(){t._log("finishStartPlaying"),t._state=I,t._lastFrameTimestamp=R(),t._codec.hasAudio&&t._audioFeeder?t._prebufferingAudio=!0:t._startPlayback(),t._pingProcessing(0),t._fireEventAsync("play"),t._fireEventAsync("playing")};!this._codec.hasAudio||this._audioFeeder||this._muted?u():(this._initAudioFeeder(),this._audioFeeder.waitUntilReady(u))}}},{key:"_doProcessSeeking",value:function _doProcessSeeking(){if(this._seekState==W)throw new Error("seeking in invalid state (not seeking?)");if(this._seekState==X)this._doProcessBisectionSeek();else if(this._seekState==N)this._doProcessBisectionSeek();else{if(this._seekState!=H)throw new Error("Invalid seek state "+this._seekState);this._doProcessLinearSeeking()}}},{key:"_doProcessPlay",value:function _doProcessPlay(){var t=this,i=this._codec;if(this._paused)this._log("paused during playback; stopping loop");else if((!i.hasAudio||i.audioReady||this._pendingAudio||this._dataEnded)&&(!i.hasVideo||i.frameReady||this._pendingFrame||this._decodedFrames.length||this._dataEnded)){var u,d,c,l=null,h=0,_=!1,p=0;if(i.hasAudio&&this._audioFeeder?(l=this._audioFeeder.getPlaybackState(),h=this._getPlaybackTime(l),_=this._dataEnded&&0==this._audioFeeder.durationBuffered,this._prebufferingAudio&&(this._audioFeeder.durationBuffered>=2*this._audioFeeder.bufferThreshold&&(!i.hasVideo||this._decodedFrames.length>=this._framePipelineDepth)||this._dataEnded)&&(this._log("prebuffering audio done; buffered to "+this._audioFeeder.durationBuffered),this._startPlayback(h),this._prebufferingAudio=!1),l.dropped!=this._droppedAudio&&this._log("dropped "+(l.dropped-this._droppedAudio)),l.delayed!=this._delayedAudio&&this._log("delayed "+(l.delayed-this._delayedAudio)),this._droppedAudio=l.dropped,this._delayedAudio=l.delayed,(u=this._audioFeeder.durationBuffered<=2*this._audioFeeder.bufferThreshold)&&(this._codec.audioReady?this._pendingAudio>=this._audioPipelineDepth&&(this._log("audio decode disabled: "+this._pendingAudio+" packets in flight"),u=!1):u=!1)):(h=this._getPlaybackTime(),u=this._codec.audioReady&&this._audioEndTimestamp0,c=this._pendingFrame+this._decodedFrames.length=m){for(var g=-1,v=0;v=0)for(;g-- >=0;){this._lateFrames++;var y=this._decodedFrames.shift();this._log("skipping already-decoded late frame at "+y.frameEndTimestamp),p=1e3*(y.frameEndTimestamp-h),this._frameEndTimestamp=y.frameEndTimestamp,this._actualPerFrameTime=this._targetPerFrameTime-p,this._framesProcessed++,y.dropped=!0,this._doFrameComplete(y)}var b=this._codec.nextKeyframeTimestamp,T=b-this._targetPerFrameTime/1e3*(this._framePipelineDepth+this._pendingFrame);if(b>=0&&b!=this._codec.frameTimestamp&&h>=T){this._log("skipping late frame at "+this._decodedFrames[0].frameEndTimestamp+" vs "+h+", expect to see keyframe at "+b);for(var k=0;k0&&(this._targetPerFrameTime=1e3*(this._codec.frameTimestamp-this._frameEndTimestamp)),this._totalFrameTime+=this._targetPerFrameTime,this._totalFrameCount++;var A=this._frameEndTimestamp=this._codec.frameTimestamp;this._pendingFrame++,this._pendingFrames.push({frameEndTimestamp:A});var R=this._pendingFrames,O=!1,S=this._time((function(){t._codec.decodeFrame((function(i){R===t._pendingFrames?(t._log("play loop callback: decoded frame"),t._pendingFrame--,t._pendingFrames.shift(),i?t._decodedFrames.push({yCbCrBuffer:t._codec.frameBuffer,videoCpuTime:t._codec.videoCpuTime,frameEndTimestamp:A}):t._log("Bad video packet or something"),t._codec.process((function(){t._isProcessing()||t._pingProcessing(O?void 0:0)}))):t._log("play loop callback after flush, discarding")}))}));this._pendingFrame&&(O=!0,this._proxyTime+=S,this._pingProcessing(),this._dataEnded&&this._codec.sync())}else if(u){this._log("play loop: ready for audio; depth: "+this._pendingAudio),this._pendingAudio++;var C=this._codec.audioTimestamp,B=this._time((function(){t._codec.decodeAudio((function(i){if(t._pendingAudio--,t._log("play loop callback: decoded audio"),t._audioEndTimestamp=C,i){var u=t._codec.audioBuffer;if(u&&(t._bufferTime+=t._time((function(){t._audioFeeder&&t._audioFeeder.bufferData(u)})),!t._codec.hasVideo)){t._framesProcessed++;var d={frameEndTimestamp:t._audioEndTimestamp};t._doFrameComplete(d)}}t._isProcessing()||t._pingProcessing()}))}));this._pendingAudio&&(this._proxyTime+=B,this._codec.audioReady?this._pingProcessing():this._doProcessPlayDemux())}else if(d){this._log("play loop: ready to draw frame"),this._nextFrameTimer&&(clearTimeout(this._nextFrameTimer),this._nextFrameTimer=null),this._thumbnail&&(this.removeChild(this._thumbnail),this._thumbnail=null);var D=this._decodedFrames.shift();this._currentVideoCpuTime=D.videoCpuTime,this._drawingTime+=this._time((function(){t._drawFrame(D.yCbCrBuffer)})),this._framesProcessed++,this._doFrameComplete(D),this._pingProcessing()}else if(!this._decodedFrames.length||this._nextFrameTimer||this._prebufferingAudio)if(this._dataEnded&&!(this._pendingAudio||this._pendingFrame||this._decodedFrames.length)){this._log("play loop: playback reached end of data "+[this._pendingAudio,this._pendingFrame,this._decodedFrames.length]);var M=0;this._codec.hasAudio&&this._audioFeeder&&(M=1e3*this._audioFeeder.durationBuffered),M>0?(this._log("play loop: ending pending "+M+" ms"),this._pingProcessing(Math.max(0,M))):(this._log("play loop: ENDING NOW: playback time "+this._getPlaybackTime()+"; frameEndTimestamp: "+this._frameEndTimestamp),this._stopPlayback(),this._prebufferingAudio=!1,this._initialPlaybackOffset=Math.max(this._audioEndTimestamp,this._frameEndTimestamp),this._ended=!0,this._paused=!0,this._fireEventAsync("pause"),this._fireEventAsync("ended"))}else this._prebufferingAudio&&(i.hasVideo&&!i.frameReady||i.hasAudio&&!i.audioReady)?(this._log("play loop: prebuffering demuxing"),this._doProcessPlayDemux()):this._log("play loop: waiting on async/timers");else{var V=p;this._log("play loop: setting a timer for drawing "+V),this._nextFrameTimer=setTimeout((function(){t._nextFrameTimer=null,t._pingProcessing()}),V)}}else this._log("play loop: demuxing"),this._doProcessPlayDemux()}},{key:"_doProcessPlayDemux",value:function _doProcessPlayDemux(){var t=this,i=this._codec.frameReady,u=this._codec.audioReady;this._codec.process((function(d){t._codec.frameReady&&!i||t._codec.audioReady&&!u?(t._log("demuxer has packets"),t._pingProcessing()):d?(t._log("demuxer processing to find more packets"),t._pingProcessing()):(t._log("demuxer ran out of data"),t._streamEnded?(t._log("demuxer reached end of data stream"),t._dataEnded=!0,t._pingProcessing()):(t._log("demuxer loading more data"),t._readBytesAndWait()))}))}},{key:"_doProcessError",value:function _doProcessError(){}},{key:"_isProcessing",value:function _isProcessing(){return this._stream&&(this._stream.buffering||this._stream.seeking)||this._codec&&this._codec.processing}},{key:"_readBytesAndWait",value:function _readBytesAndWait(){var t=this;if(this._stream.buffering||this._stream.seeking)this._log("readBytesAndWait during i/o");else{this._stream.read(32768).then((function(i){t._log("got input "+[i.byteLength]),i.byteLength&&t._actionQueue.push((function(){t._codec.receiveInput(i,(function(){t._pingProcessing()}))})),t._stream.eof&&(t._log("stream is at end!"),t._streamEnded=!0),t._isProcessing()||t._pingProcessing()})).catch((function(i){t._onStreamError(i)}))}}},{key:"_pingProcessing",value:function _pingProcessing(){var t=this,i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;if(this._stream&&this._stream.waiting)this._log("waiting on input");else{this._nextProcessingTimer&&(this._log("canceling old processing timer"),clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null);var u=-1/256;i>u?this._nextProcessingTimer=setTimeout((function(){t._pingProcessing()}),i):this._depth?this._needProcessing=!0:this._doProcessing()}}},{key:"_startProcessingVideo",value:function _startProcessingVideo(t){var i=this;if(!this._started&&!this._codec){this._framesProcessed=0,this._bufferTime=0,this._drawingTime=0,this._proxyTime=0,this._started=!0,this._ended=!1;var u={base:this._options.base,worker:this._enableWorker,threading:this._enableThreading,simd:this._enableSIMD};this._detectedType&&(u.type=this._detectedType),this._codec=new A.default(u),this._lastVideoCpuTime=0,this._lastAudioCpuTime=0,this._lastDemuxerCpuTime=0,this._lastBufferTime=0,this._lastDrawingTime=0,this._lastProxyTime=0,this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0,this._lastFrameBufferTime=0,this._lastFrameProxyTime=0,this._lastFrameDrawingTime=0,this._currentVideoCpuTime=0,this._codec.onseek=function(t){i._didSeek=!0,i._stream&&i._seekStream(t)},this._codec.init((function(){i._codec.receiveInput(t,(function(){i._readBytesAndWait()}))}))}}},{key:"_loadCodec",value:function _loadCodec(t){var i=this;this._stream.read(1024).then((function(u){var d=new Uint8Array(u);d.length>4&&d[0]=="O".charCodeAt(0)&&d[1]=="g".charCodeAt(0)&&d[2]=="g".charCodeAt(0)&&d[3]=="S".charCodeAt(0)?i._detectedType="video/ogg":d.length>4&&26==d[0]&&69==d[1]&&223==d[2]&&163==d[3]?i._detectedType="video/webm":i._detectedType="video/ogg",t(u)}))}},{key:"_prepForLoad",value:function _prepForLoad(t){var i=this;this._stopVideo();this._currentSrc="",this._loading=!0,this._actionQueue.push((function(){t&&"none"===i.preload?i._loading=!1:function doLoad(){i._options.stream?i._stream=i._options.stream:i._stream=new y.default({url:i.src,cacheSize:16777216,progressive:!1}),i._stream.load().then((function(){i._loading=!1,i._currentSrc=i.src,i._byteLength=i._stream.seekable?i._stream.length:0;var t=i._stream.headers["x-content-duration"];"string"==typeof t&&(i._duration=parseFloat(t)),i._loadCodec((function(t){i._startProcessingVideo(t)}))})).catch((function(t){i._onStreamError(t)}))}()})),this._pingProcessing(0)}},{key:"load",value:function load(){this._prepForLoad()}},{key:"canPlayType",value:function canPlayType(t){var i=new E.default(t);function checkTypes(t){if(i.codecs){var u=0,d=0;return i.codecs.forEach((function(i){t.indexOf(i)>=0?u++:d++})),0===u||d>0?"":"probably"}return"maybe"}return"ogg"!==i.minor||"audio"!==i.major&&"video"!==i.major&&"application"!==i.major?"webm"!==i.minor||"audio"!==i.major&&"video"!==i.major?"":checkTypes(["vorbis","opus","vp8","vp9"]):checkTypes(["vorbis","opus","theora"])}},{key:"play",value:function play(){this._muted||this._options.audioContext||OGVPlayer.initSharedAudioContext(),this._paused&&(this._startedPlaybackInDocument=document.body.contains(this),this._paused=!1,this._state==L||(this._started&&this._codec&&this._codec.loadedMetadata?(this._ended&&this._stream&&this._byteLength?(this._log(".play() starting over after end"),this._seek(0)):this._log(".play() while already started"),this._state=V,this._isProcessing()||this._pingProcessing()):this._loading?this._log(".play() while loading"):(this._log(".play() before started"),this._stream||this.load())))}},{key:"getPlaybackStats",value:function getPlaybackStats(){return{targetPerFrameTime:this._targetPerFrameTime,framesProcessed:this._framesProcessed,videoBytes:this._codec?this._codec.videoBytes:0,audioBytes:this._codec?this._codec.audioBytes:0,playTime:this._playTime,demuxingTime:this._codec?this._codec.demuxerCpuTime-this._lastDemuxerCpuTime:0,videoDecodingTime:this._codec?this._codec.videoCpuTime-this._lastVideoCpuTime:0,audioDecodingTime:this._codec?this._codec.audioCpuTime-this._lastAudioCpuTime:0,bufferTime:this._bufferTime-this._lastBufferTime,drawingTime:this._drawingTime-this._lastDrawingTime,proxyTime:this._proxyTime-this._lastProxyTime,droppedAudio:this._droppedAudio,delayedAudio:this._delayedAudio,jitter:this._totalJitter/this._framesProcessed,lateFrames:this._lateFrames}}},{key:"resetPlaybackStats",value:function resetPlaybackStats(){this._framesProcessed=0,this._playTime=0,this._codec&&(this._lastDemuxerCpuTime=this._codec.demuxerCpuTime,this._lastVideoCpuTime=this._codec.videoCpuTime,this._lastAudioCpuTime=this._codec.audioCpuTime,this._codec.videoBytes=0,this._codec.audioBytes=0),this._lastBufferTime=this._bufferTime,this._lastDrawingTime=this._drawingTime,this._lastProxyTime=this._proxyTime,this._totalJitter=0,this._totalFrameTime=0,this._totalFrameCount=0}},{key:"getVideoFrameSink",value:function getVideoFrameSink(){return this._frameSink}},{key:"getCanvas",value:function getCanvas(){return this._canvas}},{key:"getVideo",value:function getVideo(){return null}},{key:"pause",value:function pause(){this._paused||(this._nextProcessingTimer&&(clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null),this._stopPlayback(),this._prebufferingAudio=!1,this._paused=!0,this._fireEvent("pause"))}},{key:"stop",value:function stop(){this._stopVideo(),this._paused=!0}},{key:"fastSeek",value:function fastSeek(t){this._seek(+t,Y)}}],[{key:"initSharedAudioContext",value:function initSharedAudioContext(){b.default.initSharedAudioContext()}}]),OGVPlayer}(OGVJSElement);(0,P.default)(Q,S),Q.instanceCount=0,Q.styleManager=new function StyleManager(){var t=document.createElement("style");t.type="text/css",t.textContent="ogvjs { display: inline-block; position: relative; -webkit-user-select: none; -webkit-tap-highlight-color: rgba(0,0,0,0); ",document.head.appendChild(t);var i=t.sheet;this.appendRule=function(t,u){var d=[];for(var c in u)u.hasOwnProperty(c)&&d.push(c+":"+u[c]);var l=t+"{"+d.join(";")+"}";i.insertRule(l,i.cssRules.length-1)}};var K=Q;i.default=K},580:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),l=d(u(913));var h=function OGVProxyClass(t){return function(){function _class(i,u,d){var l=this;for(var h in(0,c.default)(this,_class),d=d||{},this.worker=i,this.transferables=function(){var t=new ArrayBuffer(1024),u=new Uint8Array(t);try{return i.postMessage({action:"transferTest",bytes:u},[t]),!t.byteLength}catch(t){return!1}}(),t)t.hasOwnProperty(h)&&(this[h]=t[h]);this.processingQueue=0,Object.defineProperty(this,"processing",{get:function get(){return this.processingQueue>0}}),this.messageCount=0,this.pendingCallbacks={},this.worker.addEventListener("message",(function(t){l.handleMessage(t)})),this.proxy("construct",[u,d],(function(){}))}return(0,l.default)(_class,[{key:"proxy",value:function proxy(t,i,u){var d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(!this.worker)throw'Tried to call "'+t+'" method on closed proxy object';var c="callback-"+ ++this.messageCount+"-"+t;u&&(this.pendingCallbacks[c]=u);var l={action:t,callbackId:c,args:i||[]};this.processingQueue++,this.transferables?this.worker.postMessage(l,d):this.worker.postMessage(l)}},{key:"terminate",value:function terminate(){this.worker&&(this.worker.terminate(),this.worker=null,this.processingQueue=0,this.pendingCallbacks={})}},{key:"handleMessage",value:function handleMessage(t){if(this.processingQueue--,"callback"===t.data.action){var i=t.data,u=i.callbackId,d=i.args,c=this.pendingCallbacks[u];if(i.props)for(var l in i.props)i.props.hasOwnProperty(l)&&(this[l]=i.props[l]);c&&(delete this.pendingCallbacks[u],c.apply(this,d))}}}]),_class}()};i.default=h},168:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),l=d(u(913)),h=function(){function OGVTimeRanges(t){(0,c.default)(this,OGVTimeRanges),this._ranges=t,this.length=t.length}return(0,l.default)(OGVTimeRanges,[{key:"start",value:function start(t){if(t<0||t>this.length||t!==(0|t))throw new RangeError("Invalid index");return this._ranges[t][0]}},{key:"end",value:function end(t){if(t<0||t>this.length||t!==(0|t))throw new RangeError("Invalid index");return this._ranges[t][1]}}]),OGVTimeRanges}();i.default=h},625:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),l=d(u(913)),h=d(u(964));function _createForOfIteratorHelper(t,i){var u="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!u){if(Array.isArray(t)||(u=function _unsupportedIterableToArray(t,i){if(!t)return;if("string"==typeof t)return _arrayLikeToArray(t,i);var u=Object.prototype.toString.call(t).slice(8,-1);"Object"===u&&t.constructor&&(u=t.constructor.name);if("Map"===u||"Set"===u)return Array.from(t);if("Arguments"===u||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(u))return _arrayLikeToArray(t,i)}(t))||i&&t&&"number"==typeof t.length){u&&(t=u);var d=0,c=function F(){};return{s:c,n:function n(){return d>=t.length?{done:!0}:{done:!1,value:t[d++]}},e:function e(t){throw t},f:c}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,h=!0,_=!1;return{s:function s(){u=u.call(t)},n:function n(){var t=u.next();return h=t.done,t},e:function e(t){_=!0,l=t},f:function f(){try{h||null==u.return||u.return()}finally{if(_)throw l}}}}function _arrayLikeToArray(t,i){(null==i||i>t.length)&&(i=t.length);for(var u=0,d=new Array(i);u0?l.push(_.subarray(0,_.length-Math.min(p,_.length))):l.push(_.subarray(Math.min(Math.abs(p),_.length),_.length))}}catch(t){h.e(t)}finally{h.f()}i.audioDecoder.audioBuffer=l}return u(t)}))}))}},{key:"discardFrame",value:function discardFrame(t){var i=this;this.demuxer.dequeueVideoPacket((function(u){i.videoBytes+=u.byteLength,t()}))}},{key:"discardAudio",value:function discardAudio(t){var i=this;this.demuxer.dequeueAudioPacket((function(u,d){i.audioBytes+=u.byteLength,t()}))}},{key:"flush",value:function flush(t){this.flushIter++,this.demuxer.flush(t)}},{key:"sync",value:function sync(){this.videoDecoder&&this.videoDecoder.sync()}},{key:"recycleFrame",value:function recycleFrame(t){this.videoDecoder&&this.videoDecoder.recycleFrame(t)}},{key:"getKeypointOffset",value:function getKeypointOffset(t,i){this.demuxer.getKeypointOffset(t,i)}},{key:"seekToKeypoint",value:function seekToKeypoint(t,i){this.demuxer.seekToKeypoint(t,this.flushSafe(i))}},{key:"loadAudioCodec",value:function loadAudioCodec(t){var i=this;if(this.demuxer.audioCodec){var u={vorbis:"OGVDecoderAudioVorbisW",opus:"OGVDecoderAudioOpusW"}[this.demuxer.audioCodec];this.processing=!0,h.default.loadClass(u,(function(u){var d={};i.demuxer.audioFormat&&(d.audioFormat=i.demuxer.audioFormat),u(d).then((function(u){i.audioDecoder=u,u.init((function(){i.loadedAudioMetadata=u.loadedMetadata,i.processing=!1,t()}))}))}),{worker:this.options.worker})}else t()}},{key:"loadVideoCodec",value:function loadVideoCodec(t){var i=this;if(this.demuxer.videoCodec){var u=!!this.options.simd,d=!!this.options.threading,c={theora:"OGVDecoderVideoTheoraW",vp8:d?"OGVDecoderVideoVP8MTW":"OGVDecoderVideoVP8W",vp9:d?u?"OGVDecoderVideoVP9SIMDMTW":"OGVDecoderVideoVP9MTW":u?"OGVDecoderVideoVP9SIMDW":"OGVDecoderVideoVP9W",av1:d?u?"OGVDecoderVideoAV1SIMDMTW":"OGVDecoderVideoAV1MTW":u?"OGVDecoderVideoAV1SIMDW":"OGVDecoderVideoAV1W"}[this.demuxer.videoCodec];this.processing=!0,h.default.loadClass(c,(function(u){var c={};i.demuxer.videoFormat&&(c.videoFormat=i.demuxer.videoFormat),d&&delete window.ENVIRONMENT_IS_PTHREAD,u(c).then((function(u){i.videoDecoder=u,u.init((function(){i.loadedVideoMetadata=u.loadedMetadata,i.processing=!1,t()}))}))}),{worker:this.options.worker&&!this.options.threading})}else t()}}]),OGVWrapperCodec}();i.default=_},539:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(8)),l=d(u(575)),h=d(u(913));var _=new(function(){function WebAssemblyChecker(){(0,l.default)(this,WebAssemblyChecker),this.tested=!1,this.testResult=void 0}return(0,h.default)(WebAssemblyChecker,[{key:"wasmSupported",value:function wasmSupported(){if(!this.tested){try{"object"===("undefined"==typeof WebAssembly?"undefined":(0,c.default)(WebAssembly))?this.testResult=function testSafariWebAssemblyBug(){var t=new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11]),i=new WebAssembly.Module(t);return 0!==new WebAssembly.Instance(i,{}).exports.test(4)}():this.testResult=!1}catch(t){console.log("Exception while testing WebAssembly",t),this.testResult=!1}this.tested=!0}return this.testResult}}]),WebAssemblyChecker}());i.default=_},309:(t,i)=>{"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var u=function extend(t,i){for(var u in i)i.hasOwnProperty(u)&&(t[u]=i[u])};i.default=u},431:(t,i,u)=>{"use strict";var d=function(){function defineProperties(t,i){for(var u=0;u{"use strict";var d=function(){function defineProperties(t,i){for(var u=0;u=200&&t.xhr.status<300?(t.length=getXHRLength(t.xhr),t.headers=function getXHRHeaders(t){var i={};return t.getAllResponseHeaders().split(/\r?\n/).forEach((function(t){var u=t.split(/:\s*/,2);u.length>1&&(i[u[0].toLowerCase()]=u[1])})),i}(t.xhr),t.onXHRStart()):(d(),u(new Error("HTTP error "+t.xhr.status)))}},l=function checkError(){d(),u(new Error("network error"))},h=function checkBackendOpen(){d(),i()};d=function oncomplete(){t.xhr.removeEventListener("readystatechange",c),t.xhr.removeEventListener("error",l),t.off("open",h),t._onAbort=null},t.initXHR(),t.xhr.addEventListener("readystatechange",c),t.xhr.addEventListener("error",l),t.on("open",h),t.xhr.send()}))}},{key:"bufferToOffset",value:function bufferToOffset(t){return Promise.reject(new Error("abstract"))}},{key:"abort",value:function abort(){if(this.xhr.abort(),this._onAbort){var t=this._onAbort;this._onAbort=null;var i=new Error("Aborted");i.name="AbortError",t(i)}}},{key:"initXHR",value:function initXHR(){var t=this.url;this.cachever&&(t+="?buggy_cachever="+this.cachever),this.xhr.open("GET",t);var i=null;(this.offset||this.length)&&(i="bytes="+this.offset+"-"),this.length&&(i+=this.offset+this.length-1),null!==i&&this.xhr.setRequestHeader("Range",i)}},{key:"onXHRStart",value:function onXHRStart(){throw new Error("abstract")}}]),Backend}(u(566));t.exports=c},810:(t,i,u)=>{"use strict";var d=function(){function defineProperties(t,i){for(var u=0;u0&&(this.bytesRead+=t.length,this.emit("buffer",t))}},{key:"onXHRLoad",value:function onXHRLoad(){this.onXHRProgress(),c(BinaryStringBackend.prototype.__proto__||Object.getPrototypeOf(BinaryStringBackend.prototype),"onXHRLoad",this).call(this)}}]),BinaryStringBackend}(u(828));l.supported=function(){try{return!!(new XMLHttpRequest).overrideMimeType}catch(t){return!1}},t.exports=l},828:(t,i,u)=>{"use strict";var d=function(){function defineProperties(t,i){for(var u=0;u=t)u();else{var c=null;i._onAbort=function(t){c(),d(t)};var l=function checkBuffer(){i.offset>=t&&!i.eof&&(c(),u())},h=function checkDone(){c(),u()},_=function checkError(){c(),d(new Error("error streaming"))};c=function oncomplete(){i.buffering=!1,i.off("buffer",l),i.off("done",h),i.off("error",_),i._onAbort=null},i.buffering=!0,i.on("buffer",l),i.on("done",h),i.on("error",_)}}))}},{key:"initXHR",value:function initXHR(){c(DownloadBackend.prototype.__proto__||Object.getPrototypeOf(DownloadBackend.prototype),"initXHR",this).call(this)}},{key:"onXHRStart",value:function onXHRStart(){var t=this;this.xhr.addEventListener("progress",(function(){return t.onXHRProgress()})),this.xhr.addEventListener("error",(function(){return t.onXHRError()})),this.xhr.addEventListener("load",(function(){return t.onXHRLoad()})),this.emit("open")}},{key:"onXHRProgress",value:function onXHRProgress(){throw new Error("abstract")}},{key:"onXHRError",value:function onXHRError(){this.emit("error")}},{key:"onXHRLoad",value:function onXHRLoad(){this.eof=!0,this.emit("done")}}]),DownloadBackend}(u(306));t.exports=l},761:(t,i,u)=>{"use strict";var d=u(855),c=u(810),l=u(431);var h=null;t.exports=function instantiate(t){if(!1===t.progressive)return new l(t);if(h||(h=function autoselect(){return d.supported()?d:c.supported()?c:null}()),!h)throw new Error("No supported backend class");return new h(t)}},855:(t,i,u)=>{"use strict";var d=function(){function defineProperties(t,i){for(var u=0;u{"use strict";var i=function(){function defineProperties(t,i){for(var u=0;u0&&void 0!==arguments[0]?arguments[0]:{},i=t.buffer,u=void 0===i?void 0:i,d=t.string,c=void 0===d?void 0:d,l=t.start,h=void 0===l?0:l,_=t.end,p=void 0===_?h+(u?u.byteLength:c?c.length:0):_,m=t.prev,g=void 0===m?null:m,v=t.next,y=void 0===v?null:v,b=t.eof,T=void 0!==b&&b,k=t.empty,P=void 0===k?!(u||c):k,w=t.timestamp,E=void 0===w?Date.now():w;_classCallCheck(this,CacheItem),this.start=h,this.end=p,this.prev=g,this.next=y,this.eof=T,this.empty=P,this.timestamp=E,this.buffer=u,this.string=c,Object.defineProperty(this,"length",{get:function get(){return this.end-this.start}})}return i(CacheItem,[{key:"contains",value:function contains(t){return t>=this.start&&(t{"use strict";var d=function(){function defineProperties(t,i){for(var u=0;u0&&void 0!==arguments[0]?arguments[0]:{},i=t.cacheSize,u=void 0===i?0:i;_classCallCheck(this,CachePool);var d=new c({eof:!0});this.head=d,this.tail=d,this.readOffset=0,this.readCursor=d,this.writeOffset=0,this.writeCursor=d,this.cacheSize=u}return d(CachePool,[{key:"bytesReadable",value:function bytesReadable(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0,i=this.readOffset,u=this.readCursor,d=u.last((function(u){return!u.empty&&u.start<=i+t}));return d?Math.min(t,d.end-i):0}},{key:"bytesWritable",value:function bytesWritable(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0,i=this.writeOffset,u=this.writeCursor;if(u.eof)return t;var d=u.last((function(u){return u.empty&&u.start<=i+t}));return d?Math.min(t,d.end-i):0}},{key:"seekRead",value:function seekRead(t){var i=this.head.first((function(i){return i.contains(t)}));if(!i)throw new Error("read seek out of range");this.readOffset=t,this.readCursor=i}},{key:"seekWrite",value:function seekWrite(t){var i=this.head.first((function(i){return i.contains(t)}));if(!i)throw new Error("write seek out of range");this.writeOffset=t,this.writeCursor=i}},{key:"readBytes",value:function readBytes(t){for(var i=t.byteLength,u=this.bytesReadable(i),d=this.readOffset,c=d+u,l=d,h=this.readCursor;h&&!h.empty&&!(h.start>=c);h=h.next){var _=Math.min(c,h.end),p=t.subarray(l-d,_-d);h.readBytes(p,l,_),l=_}return this.readOffset=l,this.readCursor=this.readCursor.first((function(t){return t.contains(l)})),u}},{key:"write",value:function write(t){var i=this.bufferItem(t),u=this.writeCursor;if(!u.empty)throw new Error("write cursor not empty");if(!u.contains(i.end)&&u.end!==i.end)throw new Error("write cursor too small");u.startthis.readOffset+this.chunkSize)&&i.push(u));if(t>this.cacheSize){i.sort((function(t,i){return t.timestamp-i.timestamp}));for(var d=0;d{"use strict";t.exports=u(91)},566:t=>{"use strict";var i=function(){function defineProperties(t,i){for(var u=0;u=0&&u.splice(d,1)}},{key:"emit",value:function emit(t,i){(this._e[t]||[]).slice().forEach((function(t){return t(i)}))}}]),TinyEvents}();t.exports=u},936:(t,i,u)=>{"use strict";var d=function(){function defineProperties(t,i){for(var u=0;u=0&&_>=t.length)return void i(null);var p=t._clampToLength(d.writeOffset+d.bytesWritable(c))-d.writeOffset;if(0===p)i(null);else{var m=t._backend=new l({url:t.url,offset:t._cache.writeOffset,length:p,cachever:t._cachever,progressive:t.progressive}),g=null,v=function checkOpen(){m!==t._backend?(g(),u(new Error("invalid state"))):(m.on("buffer",(function(i){m===t._backend&&t._cache.write(i)})),m.on("done",(function(){m===t._backend&&(-1===t.length&&(t.length=t._backend.offset+t._backend.bytesRead),t._backend=null)})),i(m))},y=function checkError(i){m!==t._backend?u(new Error("invalid state")):(t._backend=null,u(i))};g=function oncomplete(){m.off("open",v),m.off("error",y)},m.on("open",v),m.on("error",y),m.on("cachever",(function(){t._cachever++})),m.load()}}}))}},{key:"_readAhead",value:function _readAhead(){var t=this;return new Promise((function(i,u){t._backend||t.eof?i():t._openBackend().then((function(){i()})).catch((function(t){u(t)}))}))}},{key:"seek",value:function seek(t){var i=this;return new Promise((function(u,d){if(!i.loaded||i.buffering||i.seeking)throw new Error("invalid state");if(t!==(0|t)||t<0)throw new Error("invalid input");if(i.length>=0&&t>i.length)throw new Error("seek past end of file");if(!i.seekable)throw new Error("seek on non-seekable stream");i._backend&&i.abort(),i._cache.seekRead(t),i._cache.seekWrite(t),i._readAhead().then(u).catch(d)}))}},{key:"read",value:function read(t){var i=this;return this.buffer(t).then((function(t){return i.readSync(t)}))}},{key:"readSync",value:function readSync(t){var i=this.bytesAvailable(t),u=new Uint8Array(i);if(this.readBytes(u)!==i)throw new Error("failed to read expected data");return u.buffer}},{key:"readBytes",value:function readBytes(t){if(!this.loaded||this.buffering||this.seeking)throw new Error("invalid state");if(!(t instanceof Uint8Array))throw new Error("invalid input");var i=this._cache.readBytes(t);return this._readAhead(),i}},{key:"buffer",value:function buffer(t){var i=this;return new Promise((function(u,d){if(!i.loaded||i.buffering||i.seeking)throw new Error("invalid state");if(t!==(0|t)||t<0)throw new Error("invalid input");var c=i._clampToLength(i.offset+t),l=c-i.offset,h=i.bytesAvailable(l);h>=l?u(h):(i.buffering=!0,i._openBackend().then((function(u){return u?u.bufferToOffset(c).then((function(){return i.buffering=!1,i.buffer(t)})):Promise.resolve(h)})).then((function(t){i.buffering=!1,u(t)})).catch((function(t){"AbortError"!==t.name&&(i.buffering=!1),d(t)})))}))}},{key:"bytesAvailable",value:function bytesAvailable(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0;return this._cache.bytesReadable(t)}},{key:"abort",value:function abort(){this.loading&&(this.loading=!1),this.buffering&&(this.buffering=!1),this.seeking&&(this.seeking=!1),this._backend&&(this._backend.abort(),this._backend=null)}},{key:"getBufferedRanges",value:function getBufferedRanges(){return this._cache.ranges()}},{key:"_clampToLength",value:function _clampToLength(t){return this.length<0?t:Math.min(this.length,t)}}]),StreamFile}();t.exports=h},826:t=>{t.exports={vertex:"precision lowp float;\n\nattribute vec2 aPosition;\nattribute vec2 aLumaPosition;\nattribute vec2 aChromaPosition;\nvarying vec2 vLumaPosition;\nvarying vec2 vChromaPosition;\nvoid main() {\n gl_Position = vec4(aPosition, 0, 1);\n vLumaPosition = aLumaPosition;\n vChromaPosition = aChromaPosition;\n}\n",fragment:"// inspired by https://github.com/mbebenita/Broadway/blob/master/Player/canvas.js\n\nprecision lowp float;\n\nuniform sampler2D uTextureY;\nuniform sampler2D uTextureCb;\nuniform sampler2D uTextureCr;\nvarying vec2 vLumaPosition;\nvarying vec2 vChromaPosition;\nvoid main() {\n // Y, Cb, and Cr planes are uploaded as LUMINANCE textures.\n float fY = texture2D(uTextureY, vLumaPosition).x;\n float fCb = texture2D(uTextureCb, vChromaPosition).x;\n float fCr = texture2D(uTextureCr, vChromaPosition).x;\n\n // Premultipy the Y...\n float fYmul = fY * 1.1643828125;\n\n // And convert that to RGB!\n gl_FragColor = vec4(\n fYmul + 1.59602734375 * fCr - 0.87078515625,\n fYmul - 0.39176171875 * fCb - 0.81296875 * fCr + 0.52959375,\n fYmul + 2.017234375 * fCb - 1.081390625,\n 1\n );\n}\n",vertexStripe:"precision lowp float;\n\nattribute vec2 aPosition;\nattribute vec2 aTexturePosition;\nvarying vec2 vTexturePosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 0, 1);\n vTexturePosition = aTexturePosition;\n}\n",fragmentStripe:"// extra 'stripe' texture fiddling to work around IE 11's poor performance on gl.LUMINANCE and gl.ALPHA textures\n\nprecision lowp float;\n\nuniform sampler2D uStripe;\nuniform sampler2D uTexture;\nvarying vec2 vTexturePosition;\nvoid main() {\n // Y, Cb, and Cr planes are mapped into a pseudo-RGBA texture\n // so we can upload them without expanding the bytes on IE 11\n // which doesn't allow LUMINANCE or ALPHA textures\n // The stripe textures mark which channel to keep for each pixel.\n // Each texture extraction will contain the relevant value in one\n // channel only.\n\n float fLuminance = dot(\n texture2D(uStripe, vTexturePosition),\n texture2D(uTexture, vTexturePosition)\n );\n\n gl_FragColor = vec4(fLuminance, fLuminance, fLuminance, 1);\n}\n"}},487:t=>{!function(){"use strict";function FrameSink(t,i){throw new Error("abstract")}FrameSink.prototype.drawFrame=function(t){throw new Error("abstract")},FrameSink.prototype.clear=function(){throw new Error("abstract")},t.exports=FrameSink}()},926:(t,i,u)=>{!function(){"use strict";var i=u(487),d=u(627);function SoftwareFrameSink(t){var i=this,u=t.getContext("2d"),c=null,l=null,h=null;return i.drawFrame=function drawFrame(i){var _=i.format;t.width===_.displayWidth&&t.height===_.displayHeight||(t.width=_.displayWidth,t.height=_.displayHeight),null!==c&&c.width==_.width&&c.height==_.height||function initImageData(t,i){for(var d=(c=u.createImageData(t,i)).data,l=t*i*4,h=0;h{!function(){"use strict";var i=u(487),d=u(826);function WebGLFrameSink(t){var i,u,c=this,l=WebGLFrameSink.contextForCanvas(t);if(null===l)throw new Error("WebGL unavailable");function compileShader(t,i){var u=l.createShader(t);if(l.shaderSource(u,i),l.compileShader(u),!l.getShaderParameter(u,l.COMPILE_STATUS)){var d=l.getShaderInfoLog(u);throw l.deleteShader(u),new Error("GL shader compilation for "+t+" failed: "+d)}return u}var h,_,p,m,g,v,y,b,T,k,P=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),w={},E={},x={};function createOrReuseTexture(t,i){return w[t]&&!i||(w[t]=l.createTexture()),w[t]}function uploadTexture(t,i,u,d,c){var h=createOrReuseTexture(t,i);if(l.activeTexture(l.TEXTURE0),WebGLFrameSink.stripe){var _=!w[t+"_temp"]||i,p=createOrReuseTexture(t+"_temp",i);l.bindTexture(l.TEXTURE_2D,p),_?(l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.NEAREST),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.NEAREST),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,u/4,d,0,l.RGBA,l.UNSIGNED_BYTE,c)):l.texSubImage2D(l.TEXTURE_2D,0,0,0,u/4,d,l.RGBA,l.UNSIGNED_BYTE,c);var m=w[t+"_stripe"],g=!m||i;g&&(m=createOrReuseTexture(t+"_stripe",i)),l.bindTexture(l.TEXTURE_2D,m),g&&(l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.NEAREST),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.NEAREST),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,u,1,0,l.RGBA,l.UNSIGNED_BYTE,function buildStripe(t){if(x[t])return x[t];for(var i=t,u=new Uint32Array(i),d=0;d{!function(){"use strict";var i=u(877);t.exports={convertYCbCr:function convertYCbCr(t,u){var d=0|t.format.width,c=0|t.format.height,l=0|i(t.format.width/t.format.chromaWidth),h=0|i(t.format.height/t.format.chromaHeight),_=t.y.bytes,p=t.u.bytes,m=t.v.bytes,g=0|t.y.stride,v=0|t.u.stride,y=0|t.v.stride,b=d<<2,T=0,k=0,P=0,w=0,E=0,x=0,A=0,R=0,O=0,S=0,C=0,B=0,D=0,M=0,V=0,I=0,L=0,j=0;if(1==l&&1==h)for(A=0,R=b,j=0,I=0;I>8,u[A+1]=C-D>>8,u[A+2]=C+M>>8,A+=4,C=298*_[k++]|0,u[A]=C+B>>8,u[A+1]=C-D>>8,u[A+2]=C+M>>8,A+=4,C=298*_[P++]|0,u[R]=C+B>>8,u[R+1]=C-D>>8,u[R+2]=C+M>>8,R+=4,C=298*_[P++]|0,u[R]=C+B>>8,u[R+1]=C-D>>8,u[R+2]=C+M>>8,R+=4;A+=b,R+=b,j++}else for(x=0,I=0;I>h)*v|0,E=j*y|0,V=0;V>l)],B=(409*(S=0|m[E+L])|0)-57088|0,D=(100*O|0)+(208*S|0)-34816|0,M=(516*O|0)-70912|0,C=298*_[T++]|0,u[x]=C+B>>8,u[x+1]=C-D>>8,u[x+2]=C+M>>8,x+=4}}}()},877:t=>{!function(){"use strict";t.exports=function depower(t){for(var i=0,u=t>>1;0!=u;)u>>=1,i++;if(t!==1<{!function(){"use strict";var i=u(487),d=u(926),c=u(895),l={FrameSink:i,SoftwareFrameSink:d,WebGLFrameSink:c,attach:function(t,i){return("webGL"in(i=i||{})?i.webGL:c.isAvailable())?new c(t,i):new d(t,i)}};t.exports=l}()}},i={};function __webpack_require__(u){var d=i[u];if(void 0!==d)return d.exports;var c=i[u]={exports:{}};return t[u](c,c.exports,__webpack_require__),c.exports}var u={};return(()=>{"use strict";var t=u,i=__webpack_require__(318);Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"OGVCompat",{enumerable:!0,get:function get(){return c.default}}),Object.defineProperty(t,"OGVLoader",{enumerable:!0,get:function get(){return l.default}}),Object.defineProperty(t,"OGVMediaError",{enumerable:!0,get:function get(){return h.default}}),Object.defineProperty(t,"OGVMediaType",{enumerable:!0,get:function get(){return _.default}}),Object.defineProperty(t,"OGVPlayer",{enumerable:!0,get:function get(){return p.default}}),Object.defineProperty(t,"OGVTimeRanges",{enumerable:!0,get:function get(){return m.default}}),t.OGVVersion=void 0;var d=i(__webpack_require__(8)),c=i(__webpack_require__(523)),l=i(__webpack_require__(964)),h=i(__webpack_require__(759)),_=i(__webpack_require__(278)),p=i(__webpack_require__(869)),m=i(__webpack_require__(168)),g="1.8.6-20220111172545-1f60d9d";t.OGVVersion=g,"object"===("undefined"==typeof window?"undefined":(0,d.default)(window))&&(window.OGVCompat=c.default,window.OGVLoader=l.default,window.OGVMediaError=h.default,window.OGVMediaType=_.default,window.OGVTimeRanges=m.default,window.OGVPlayer=p.default,window.OGVVersion=g)})(),u})()}));
\ No newline at end of file
diff --git a/src/gen_js_from_hbb.ts b/src/gen_js_from_hbb.ts
deleted file mode 100644
index 5ad385f68..000000000
--- a/src/gen_js_from_hbb.ts
+++ /dev/null
@@ -1,2300 +0,0 @@
-export const LANGS = {
- ru: {
- "Status": "Cтатус",
- "Your Desktop": "Ваш рабочий стол",
- "desk_tip": "Ваш рабочий стол доступен с этим идентификатором и паролем",
- "Password": "Пароль",
- "Ready": "Готово",
- "Established": "Установлено",
- "connecting_status": "Подключение к сети RustDesk..",
- "Enable Service": "Включить службу",
- "Start Service": "Запустить службу",
- "Service is running": "Служба работает",
- "Service is not running": "Служба не запущена",
- "not_ready_status": "Не готово. Пожалуйста, проверьте подключение",
- "Control Remote Desktop": "Управление удаленным рабочим столом",
- "Transfer File": "Передать файл",
- "Connect": "Подключиться",
- "Recent Sessions": "Последние сеансы",
- "Address Book": "Адресная книга",
- "Confirmation": "Подтверждение",
- "TCP Tunneling": "TCP-туннелирование",
- "Remove": "Удалить",
- "Refresh random password": "Обновить случайный пароль",
- "Set your own password": "Установить свой пароль",
- "Enable Keyboard/Mouse": "Включить клавиатуру/мышь",
- "Enable Clipboard": "Включить буфер обмена",
- "Enable File Transfer": "Включить передачу файлов",
- "Enable TCP Tunneling": "Включить туннелирование TCP",
- "IP Whitelisting": "Список разрешенных IP-адресов",
- "ID/Relay Server": "ID/Сервер ретрансляции",
- "Stop service": "Остановить службу",
- "Change ID": "Изменить ID",
- "Website": "Веб-сайт",
- "About": "О RustDesk",
- "Mute": "Отключить звук",
- "Audio Input": "Аудиовход",
- "ID Server": "ID сервер",
- "Relay Server": "Сервер ретрансляции",
- "API Server": "API сервер",
- "invalid_http": "Должен начинаться с http:// или https://",
- "Invalid IP": "Неверный IP-адрес",
- "id_change_tip": "Допускаются только символы a-z, A-Z, 0-9 и _ (подчеркивание). Первая буква должна быть a-z, A-Z. Длина от 6 до 16",
- "Invalid format": "Неверный формат",
- "This function is turned off by the server": "Эта функция не предоставляется сервером",
- "Not available": "Недоступно",
- "Too frequent": "Слишком часто",
- "Cancel": "Отменить",
- "Skip": "Пропустить",
- "Close": "Закрыть",
- "Retry": "Попробовать еще раз",
- "OK": "ОК",
- "Password Required": "Требуется пароль",
- "Please enter your password": "Пожалуйста, введите ваш пароль",
- "Remember password": "Запомнить пароль",
- "Wrong Password": "Неверный пароль",
- "Do you want to enter again?": "Вы хотите снова войти?",
- "Connection Error": "Ошибка подключения",
- "Error": "Ошибка",
- "Reset by the peer": "Сброшено узлом",
- "Connecting...": "Подключение..",
- "Connection in progress. Please wait.": "Подключение. Подождите",
- "Please try 1 minute later": "Попробуйте через 1 минуту",
- "Login Error": "Ошибка входа",
- "Successful": "Операция успешна",
- "Connected, waiting for image...": "Подключено, ожидание изображения..",
- "Name": "Имя",
- "Type": "Тип",
- "Modified": "Изменено",
- "Size": "Размер",
- "Show Hidden Files": "Показать скрытые файлы",
- "Receive": "Получить",
- "Send": "Отправить",
- "Refresh File": "Обновить файл",
- "Local": "Местный",
- "Remote": "Удаленный",
- "Remote Computer": "Удаленный компьютер",
- "Local Computer": "Локальный компьютер",
- "Confirm Delete": "Подтвердить удаление",
- "Delete": "Удалить",
- "Properties": "Свойства",
- "Multi Select": "Многоэлементный выбор",
- "Empty Directory": "Пустая папка",
- "Not an empty directory": "Папка не пуста",
- "Are you sure you want to delete this file?": "Вы уверены, что хотите удалить этот файл?",
- "Are you sure you want to delete this empty directory?": "Вы уверены, что хотите удалить пустую папку?",
- "Are you sure you want to delete the file of this directory?": "Вы уверены, что хотите удалить файл из этой папки?",
- "Do this for all conflicts": "Это относится ко всем конфликтам",
- "This is irreversible!": "Это необратимо!",
- "Deleting": "Удаление",
- "files": "файлы",
- "Waiting": "Ожидание",
- "Finished": "Завершено",
- "Speed": "Скорость",
- "Custom Image Quality": "Пользовательские настройки изображения",
- "Privacy mode": "Режим конфиденциальности",
- "Block user input": "Блокировать пользовательский ввод",
- "Unblock user input": "Разблокировать пользовательский ввод",
- "Adjust Window": "Настроить окно",
- "Original": "Оригинал",
- "Shrink": "Уменьшить",
- "Stretch": "Растянуть",
- "Good image quality": "Хорошее качество изображения",
- "Balanced": "Сбалансированный",
- "Optimize reaction time": "Оптимизировать время реакции",
- "Custom": "Пользовательский",
- "Show remote cursor": "Показать удаленный курсор",
- "Disable clipboard": "Отключить буфер обмена",
- "Lock after session end": "Выход из учётной записи после завершения сеанса",
- "Insert": "Вставить",
- "Insert Lock": "Установить замок",
- "Refresh": "Обновить",
- "ID does not exist": "ID не существует",
- "Failed to connect to rendezvous server": "Не удалось подключиться к промежуточному серверу",
- "Please try later": "Пожалуйста, попробуйте позже",
- "Remote desktop is offline": "Удаленный рабочий стол не онлайн",
- "Key mismatch": "Несоответствие ключей",
- "Timeout": "Тайм-аут",
- "Failed to connect to relay server": "Не удалось подключиться к серверу ретрансляции",
- "Failed to connect via rendezvous server": "Не удалось подключиться через промежуточный сервер",
- "Failed to connect via relay server": "Не удалось подключиться через сервер ретрансляции",
- "Failed to make direct connection to remote desktop": "Не удалось установить прямое подключение к удаленному рабочему столу",
- "Set Password": "Установить пароль",
- "OS Password": "Пароль операционной системы",
- "install_tip": "В некоторых случаях из-за UAC RustDesk может работать некорректно на удаленном узле. Чтобы избежать UAC, нажмите кнопку ниже, чтобы установить RustDesk в системе",
- "Click to upgrade": "Нажмите, чтобы проверить на наличие обновлений",
- "Click to download": "Нажмите, чтобы скачать",
- "Click to update": "Нажмите, чтобы обновить",
- "Configuration Permissions": "Разрешения на настройки",
- "Configure": "Настроить",
- "config_acc": "Чтобы удаленно управлять своим рабочим столом, вы должны предоставить RustDesk права \"доступа\"",
- "config_screen": "Для удаленного доступа к рабочему столу вы должны предоставить RustDesk права \"снимок экрана\"",
- "Installing ...": "Устанавливаеться...",
- "Install": "Установить",
- "Installation": "Установка",
- "Installation Path": "Папка установки",
- "Create start menu shortcuts": "Создать ярлыки меню \"Пуск\"",
- "Create desktop icon": "Создать значок на рабочем столе",
- "agreement_tip": "Если вы начнете установку, примите лицензионное соглашение",
- "Accept and Install": "Принять и установить",
- "End-user license agreement": "Лицензионное соглашение с конечным пользователем",
- "Generating ...": "Генерация...",
- "Your installation is lower version.": "Ваша инсталяция является более ранней версией",
- "not_close_tcp_tip": "Не закрывать это окно при использовании туннеля",
- "Listening ...": "Ожидаем ...",
- "Remote Host": "Удаленная машина",
- "Remote Port": "Удаленный порт",
- "Action": "Действие",
- "Add": "Добавить",
- "Local Port": "Локальный порт",
- "setup_server_tip": "Для более быстрого подключения настройте свой собственный сервер подключения",
- "Too short, at least 6 characters.": "Слишком коротко, не менее 6 символов",
- "The confirmation is not identical.": "Подтверждение не идентично",
- "Permissions": "Разрешения",
- "Accept": "Принять",
- "Dismiss": "Отклонить",
- "Disconnect": "Отключить",
- "Allow using keyboard and mouse": "Разрешить использование клавиатуры и мыши",
- "Allow using clipboard": "Разрешить использование буфера обмена",
- "Allow hearing sound": "Разрешить передачу звука",
- "Allow file transfer": "Разрешить передачу файлов",
- "File transfer": "Передача файлов",
- "Connected": "Подключено",
- "Direct and encrypted connection": "Прямое и шифрованное соединение",
- "Relayed and encrypted connection": "Коммутируемое и зашифрованное соединение",
- "Direct and unencrypted connection": "Прямое и незашифрованное соединение",
- "Relayed and unencrypted connection": "Коммутируемое и незашифрованное соединение",
- "Enter Remote ID": "Введите удаленный идентификатор",
- "Enter your password": "Введите пароль",
- "Logging in...": "Входим...",
- "Enable RDP session sharing": "Включить общий доступ к сеансу RDP",
- "Auto Login": "Автоматический вход (действителен, только если вы установили \"Завершения пользовательского сеанса после завершения удалённого подключения\"",
- "Enable Direct IP Access": "Включить прямой IP-доступ",
- "Rename": "Переименовать",
- "Space": "Место",
- "Create Desktop Shortcut": "Создать ярлык на рабочем столе",
- "Change Path": "Изменить путь",
- "Create Folder": "Создать папку",
- "Please enter the folder name": "Пожалуйста, введите имя папки",
- "Fix it": "Отремонтировать",
- "Warning": "Предупреждение",
- "Login screen using Wayland is not supported": "Вход в систему с использованием Wayland не поддерживается",
- "Reboot required": "Требуется перезагрузка",
- "Unsupported display server ": "Неподдерживаемый сервер дисплея",
- "x11 expected": "Ожидается X11",
- "Port": "Порт",
- "Settings": "Настройки",
- "Username": "Имя пользователя",
- "Invalid port": "Неверный порт",
- "Closed manually by the peer": "Закрыто узлом вручную",
- "Enable remote configuration modification": "Разрешить удаленное изменение конфигурации",
- "Run without install": "Запустить без установки",
- "Always connected via relay": "Всегда подключен через ретрансляционный сервер",
- "Always connect via relay": "Всегда подключаться через ретрансляционный сервер",
- "whitelist_tip": "Только IP-адреса из белого списка могут получить доступ ко мне",
- "Login": "Войти",
- "Logout": "Выйти",
- "Tags": "Ключевые слова",
- "Search ID": "Поиск по ID",
- "Current Wayland display server is not supported": "Текущий сервер отображения Wayland не поддерживается",
- "whitelist_sep": "Раздельно запятой, точкой с запятой, пробелом или новой строкой",
- "Add ID": "Добавить ID",
- "Add Tag": "Добавить ключевое слово",
- "Unselect all tags": "Отменить выбор всех тегов",
- "Network error": "Ошибка сети",
- "Username missed": "Имя пользователя отсутствует",
- "Password missed": "Забыли пароль",
- "Wrong credentials": "Неверные учетные данные",
- "Edit Tag": "Редактировать тег",
- "Unremember Password": "Не сохранять пароль",
- "Favorites": "Избранное",
- "Add to Favorites": "Добавить в избранное",
- "Remove from Favorites": "Удалить из избранного",
- "Empty": "Пусто",
- "Invalid folder name": "Недопустимое имя папки",
- "Socks5 Proxy": "Прокси-сервер Socks5",
- "Hostname": "Имя ПК",
- "Discovered": "Найдено",
- "install_daemon_tip": "Для запуска при загрузке необходимо установить системную службу",
- "Remote ID": "Удаленный идентификатор",
- "Paste": "Вставить",
- "Paste here?": "Вставить сюда?",
- "Are you sure to close the connection?": "Вы уверены, что хотите закрыть соединение?",
- "Download new version": "Загрузить новую версию",
- "Touch mode": "Сенсорный режим",
- "Mouse mode": "Режим мыши",
- "One-Finger Tap": "Касание одним пальцем",
- "Left Mouse": "Левая кнопка мыши",
- "One-Long Tap": "Одно долгое касание пальцем",
- "Two-Finger Tap": "Касание двумя пальцами",
- "Right Mouse": "Правая мышь",
- "One-Finger Move": "Движение одним пальцем",
- "Double Tap & Move": "Двойное нажатие и перемещение",
- "Mouse Drag": "Перетаскивание мышью",
- "Two-Finger vertically": "Двумя пальцами по вертикали",
- "Mouse Wheel": "Колесико мыши",
- "Two-Finger Move": "Движение двумя пальцами",
- "Canvas Move": "Перемещение холста",
- "Pinch to Zoom": "Щепотка, чтобы увеличить",
- "Canvas Zoom": "Масштаб холста",
- "Reset canvas": "Сбросить холст",
- "No permission of file transfer": "Нет разрешения на передачу файлов",
- "Note": "Примечание",
- "Connection": "Соединение",
- "Share Screen": "Поделиться экраном",
- "CLOSE": "ЗАКРЫТЬ",
- "OPEN": "ОТКРЫТЬ",
- "Chat": "Чат",
- "Total": "Всего",
- "items": "обьекты",
- "Selected": "Выбрано",
- "Screen Capture": "Скриншот",
- "Mouse Control": "Управление мышью",
- "File Transfer": "Передача файлов",
- "Audio Capture": "Захват аудио",
- "File Connection": "Файловое соединение",
- "Screen Connection": "Подключение экрана",
- "Do you accept?": "Вы согласны?",
- "Open System Setting": "Открыть настройки системы",
- "How to get Android input permission?": "Как получить разрешение на ввод Android?",
- "android_input_permission_tip1": "После получения разрешения на ввод удаленное устройство может управлять этим Android-устройством с помощью мыши.",
- "android_input_permission_tip2": "Перейдите на следующую страницу системных настроек, найдите и войдите в [Установленные службы], включите службу [RustDesk Input].",
- "android_new_connection_tip": "Получен новый запрос на управление вашим текущим устройством.",
- "android_service_will_start_tip": "Включение захвата экрана автоматически запускает службу, позволяя другим устройствам запрашивать соединение с этого устройства.",
- "android_stop_service_tip": "Закрытие службы автоматически закроет все установленные соединения.",
- "android_version_audio_tip": "Текущая версия Android не поддерживает захват звука, обновите ее до Android 10 или выше.",
- "android_start_service_tip": "Коснитесь [Запуск промежуточного сервера] или ОТКРЫТЬ разрешение [Скриншот], чтобы запустить службу демонстрации экрана.",
- "Account": "Аккаунт",
- },
- ptbr: {
- "Status": "Status",
- "Your Desktop": "Seu Desktop",
- "desk_tip": "Seu desktop pode ser acessado com este ID e senha.",
- "Password": "Senha",
- "Ready": "Pronto",
- "Established": "Estabelecido",
- "connecting_status": "Conectando à rede do RustDesk...",
- "Enable Service": "Habilitar Serviço",
- "Start Service": "Iniciar Serviço",
- "Service is running": "Serviço está em execução",
- "Service is not running": "Serviço não está em execução",
- "not_ready_status": "Não está pronto. Por favor verifique sua conexão",
- "Control Remote Desktop": "Controle o Desktop à distância",
- "Transfer File": "Transferir Arquivo",
- "Connect": "Conectar",
- "Recent Sessions": "Sessões recentes",
- "Address Book": "Lista de Endereços",
- "Confirmation": "Confirmação",
- "TCP Tunneling": "Tunelamento TCP",
- "Remove": "Remover",
- "Refresh random password": "Atualizar senha aleatória",
- "Set your own password": "Configure sua própria senha",
- "Enable Keyboard/Mouse": "Habilitar Teclado/Mouse",
- "Enable Clipboard": "Habilitar Área de Transferência",
- "Enable File Transfer": "Habilitar Transferência de Arquivos",
- "Enable TCP Tunneling": "Habilitar Tunelamento TCP",
- "IP Whitelisting": "Whitelisting de IP",
- "ID/Relay Server": "Servidor ID/Relay",
- "Stop service": "Parar serviço",
- "Change ID": "Alterar ID",
- "Website": "Website",
- "About": "Sobre",
- "Mute": "Emudecer",
- "Audio Input": "Endtrada de Áudio",
- "ID Server": "Servidor de ID",
- "Relay Server": "Servidor de Relay",
- "API Server": "Servidor da API",
- "invalid_http": "deve iniciar com http:// ou https://",
- "Invalid IP": "IP inválido",
- "id_change_tip": "Somente os caracteres a-z, A-Z, 0-9 e _ (sublinhado) são permitidos. A primeira letra deve ser a-z, A-Z. Comprimento entre 6 e 16.",
- "Invalid format": "Formato inválido",
- "This function is turned off by the server": "Esta funcionalidade foi desligada pelo servidor",
- "Not available": "Indisponível",
- "Too frequent": "Muito frequente",
- "Cancel": "Cancelar",
- "Skip": "Pular",
- "Close": "Fechar",
- "Retry": "Tentar novamente",
- "OK": "OK",
- "Password Required": "Senha Necessária",
- "Please enter your password": "Por favor informe sua senha",
- "Remember password": "Lembrar senha",
- "Wrong Password": "Senha Incorreta",
- "Do you want to enter again?": "Você quer entrar novamente?",
- "Connection Error": "Erro de Conexão",
- "Error": "Erro",
- "Reset by the peer": "Reiniciado pelo par",
- "Connecting...": "Conectando...",
- "Connection in progress. Please wait.": "Conexão em progresso. Aguarde por favor.",
- "Please try 1 minute later": "Por favor tente após 1 minuto",
- "Login Error": "Erro de Login",
- "Successful": "Sucesso",
- "Connected, waiting for image...": "Conectado. Aguardando pela imagem...",
- "Name": "Nome",
- "Type": "Tipo",
- "Modified": "Modificado",
- "Size": "Tamanho",
- "Show Hidden Files": "Mostrar Arquivos Ocultos",
- "Receive": "Receber",
- "Send": "Enviar",
- "Refresh File": "Atualizar Arquivo",
- "Local": "Local",
- "Remote": "Remoto",
- "Remote Computer": "Computador Remoto",
- "Local Computer": "Computador Local",
- "Confirm Delete": "Comfirmar Apagar",
- "Delete": "Apagar",
- "Properties": "Propriedades",
- "Multi Select": "Seleção Múltipla",
- "Empty Directory": "Diretório Vazio",
- "Not an empty directory": "Diretório não está vazio",
- "Are you sure you want to delete this file?": "Tem certeza que deseja apagar este arquivo?",
- "Are you sure you want to delete this empty directory?": "Tem certeza que deseja apagar este diretório vazio?",
- "Are you sure you want to delete the file of this directory?": "Tem certeza que deseja apagar este arquivo deste diretório?",
- "Do this for all conflicts": "Fazer isto para todos os conflitos",
- "This is irreversible!": "Isso é irreversível!",
- "Deleting": "Apagando",
- "files": "arquivos",
- "Waiting": "Aguardando",
- "Finished": "Completo",
- "Speed": "Velocidade",
- "Custom Image Quality": "Qualidade Visual Personalizada",
- "Privacy mode": "Modo privado",
- "Block user input": "Bloquear entrada de usuário",
- "Unblock user input": "Desbloquear entrada de usuário",
- "Adjust Window": "Ajustar Janela",
- "Original": "Original",
- "Shrink": "Reduzir",
- "Stretch": "Aumentar",
- "Good image quality": "Qualidade visual boa",
- "Balanced": "Balanceada",
- "Optimize reaction time": "Otimizar tempo de reação",
- "Custom": "Personalizado",
- "Show remote cursor": "Mostrar cursor remoto",
- "Disable clipboard": "Desabilitar área de transferência",
- "Lock after session end": "Bloquear após o fim da sessão",
- "Insert": "Inserir",
- "Insert Lock": "Inserir Trava",
- "Refresh": "Atualizar",
- "ID does not exist": "ID não existe",
- "Failed to connect to rendezvous server": "Falha ao conectar ao servidor de rendezvous",
- "Please try later": "Por favor tente mais tarde",
- "Remote desktop is offline": "Desktop remoto está offline",
- "Key mismatch": "Chaves incompatíveis",
- "Timeout": "Tempo esgotado",
- "Failed to connect to relay server": "Falha ao conectar ao servidor de relay",
- "Failed to connect via rendezvous server": "Falha ao conectar ao servidor de rendezvous",
- "Failed to connect via relay server": "Falha ao conectar através do servidor de relay",
- "Failed to make direct connection to remote desktop": "Falha ao fazer conexão direta ao desktop remoto",
- "Set Password": "Definir Senha",
- "OS Password": "Senha do SO",
- "install_tip": "Devido ao UAC, o RustDesk não funciona corretamente como o lado remoto em alguns casos. Para evitar o UAC, por favor clique no botão abaixo para instalar o RustDesk no sistema.",
- "Click to upgrade": "Clique para fazer o upgrade",
- "Click to download": "Clique para baixar",
- "Click to update": "Clique para fazer o update",
- "Configuration Permissions": "Permissões de Configuração",
- "Configure": "Configurar",
- "config_acc": "Para controlar seu Desktop remotamente, você precisa conceder ao RustDesk permissões de \"Acessibilidade\".",
- "config_screen": "Para acessar seu Desktop remotamente, você precisa conceder ao RustDesk permissões de \"Gravar a Tela\"/",
- "Installing ...": "Instalando ...",
- "Install": "Instalar",
- "Installation": "Instalação",
- "Installation Path": "Caminho da Instalação",
- "Create start menu shortcuts": "Criar atalhos no menu iniciar",
- "Create desktop icon": "Criar ícone na área de trabalho",
- "agreement_tip": "Ao iniciar a instalação, você concorda com o acordo de licença.",
- "Accept and Install": "Aceitar e Instalar",
- "End-user license agreement": "Acordo de licença do usuário final",
- "Generating ...": "Gerando ...",
- "Your installation is lower version.": "Sua instalação é de uma versão menor.",
- "not_close_tcp_tip": "Não feche esta janela enquanto estiver utilizando o túnel",
- "Listening ...": "Escutando ...",
- "Remote Host": "Host Remoto",
- "Remote Port": "Porta Remota",
- "Action": "Ação",
- "Add": "Adicionar",
- "Local Port": "Porta Local",
- "setup_server_tip": "Para uma conexão mais rápida, por favor configure seu próprio servidor",
- "Too short, at least 6 characters.": "Muito curto, pelo menos 6 caracteres.",
- "The confirmation is not identical.": "A confirmação não é idêntica.",
- "Permissions": "Permissões",
- "Accept": "Aceitar",
- "Dismiss": "Dispensar",
- "Disconnect": "Desconectar",
- "Allow using keyboard and mouse": "Permitir o uso de teclado e mouse",
- "Allow using clipboard": "Permitir o uso da área de transferência",
- "Allow hearing sound": "Permitir escutar som",
- "Allow file transfer": "Permitir transferência de arquivo",
- "File transfer": "Transferência de arquivo",
- "Connected": "Conectado",
- "Direct and encrypted connection": "Conexão direta e criptografada",
- "Relayed and encrypted connection": "Conexão via relay e criptografada",
- "Direct and unencrypted connection": "Conexão direta e não criptografada",
- "Relayed and unencrypted connection": "Conexão via relay e não criptografada",
- "Enter Remote ID": "Informe o ID Remoto",
- "Enter your password": "Informe sua senha",
- "Logging in...": "Fazendo Login...",
- "Enable RDP session sharing": "Habilitar compartilhamento de sessão RDP",
- "Auto Login": "Login Automático (Somente válido se você habilitou \"Bloquear após o fim da sessão\")",
- "Enable Direct IP Access": "Habilitar Acesso IP Direto",
- "Rename": "Renomear",
- "Space": "Espaõ",
- "Create Desktop Shortcut": "Criar Atalho na Área de Trabalho",
- "Change Path": "Alterar Caminho",
- "Create Folder": "Criar Diretório",
- "Please enter the folder name": "Por favor informe o nome do diretório",
- "Fix it": "Conserte",
- "Warning": "Aguardando",
- "Login screen using Wayland is not supported": "Tela de Login utilizando Wayland não é suportada",
- "Reboot required": "Reinicialização necessária",
- "Unsupported display server ": "Servidor de display não suportado",
- "x11 expected": "x11 esperado",
- "Port": "Porta",
- "Settings": "Configurações",
- "Username": "Nome de usuário",
- "Invalid port": "Porta inválida",
- "Closed manually by the peer": "Fechada manualmente pelo par",
- "Enable remote configuration modification": "Habilitar modificações de configuração remotas",
- "Run without install": "Executar sem instalar",
- "Always connected via relay": "Sempre conectado via relay",
- "Always connect via relay": "Sempre conectar via relay",
- "whitelist_tip": "Somente IPs na whitelist podem me acessar",
- "Login": "Login",
- "Logout": "Sair",
- "Tags": "Tags",
- "Search ID": "Buscar ID",
- "Current Wayland display server is not supported": "Servidor de display Wayland atual não é suportado",
- "whitelist_sep": "Separado por vírcula, ponto-e-vírgula, espaços ou nova linha",
- "Add ID": "Adicionar ID",
- "Add Tag": "Adicionar Tag",
- "Unselect all tags": "Desselecionar todas as tags",
- "Network error": "Erro de rede",
- "Username missed": "Nome de usuário faltante",
- "Password missed": "Senha faltante",
- "Wrong credentials": "Nome de usuário ou senha incorretos",
- "Edit Tag": "Editar Tag",
- "Unremember Password": "Esquecer Senha",
- "Favorites": "Favoritos",
- "Add to Favorites": "Adicionar aos Favoritos",
- "Remove from Favorites": "Remover dos Favoritos",
- "Empty": "Vazio",
- "Invalid folder name": "Nome de diretório inválido",
- "Socks5 Proxy": "Proxy Socks5",
- "Hostname": "Nome de anfitrião",
- "Discovered": "Descoberto",
- "install_daemon_tip": "Para inicialização junto ao sistema, você deve instalar o serviço de sistema.",
- "Remote ID": "ID Remoto",
- "Paste": "Colar",
- "Paste here?": "Colar aqui?",
- "Are you sure to close the connection?": "Tem certeza que deseja fechar a conexão?",
- "Download new version": "Baixar nova versão",
- "Touch mode": "Modo toque",
- "Mouse mode": "Modo mouse",
- "One-Finger Tap": "Toque com um dedo",
- "Left Mouse": "Botão esquerdo do mouse",
- "One-Long Tap": "Um toque longo",
- "Two-Finger Tap": "Toque com dois dedos",
- "Right Mouse": "Botão direito do mouse",
- "One-Finger Move": "Mover com um dedo",
- "Double Tap & Move": "Toque duplo & mover",
- "Mouse Drag": "Arrastar com o mouse",
- "Two-Finger vertically": "Dois dedos verticalmente",
- "Mouse Wheel": "Roda do Mouse",
- "Two-Finger Move": "Mover com dois dedos",
- "Canvas Move": "Mover Tela",
- "Pinch to Zoom": "Beliscar para Zoom",
- "Canvas Zoom": "Zoom na Tela",
- "Reset canvas": "Reiniciar tela",
- "No permission of file transfer": "Sem permissões de transferência de arquivo",
- "Note": "Nota",
- "Connection": "Conexão",
- "Share Screen": "Compartilhar Tela",
- "CLOSE": "FECHAR",
- "OPEN": "ABRIR",
- "Chat": "Chat",
- "Total": "Total",
- "items": "itens",
- "Selected": "Selecionado",
- "Screen Capture": "Captura de Tela",
- "Mouse Control": "Controle do Mouse",
- "File Transfer": "Transferência de Arquivo",
- "Audio Capture": "Captura de Áudio",
- "File Connection": "Conexão de Arquivo",
- "Screen Connection": "Conexão de Tela",
- "Do you accept?": "Você aceita?",
- "Open System Setting": "Abrir Configurações do Sistema",
- "How to get Android input permission?": "Como habilitar a permissão de entrada do Android?",
- "android_input_permission_tip1": "Após obter permissão de entrada, o dispositivo remoto pode controlar este dispositivo Android via mouse",
- "android_input_permission_tip2": "Por favor vá para a próxima página de configuração do sistema, encontre e entre [Serviços Instalados], HABILITE o serviço [RustDesk Input]",
- "android_new_connection_tip": "Nova requisição de controle recebida, solicita o controle de seu dispositivo atual.",
- "android_service_will_start_tip": "Habilitar a Captura de Tela irá automaticamente inicalizar o serviço, permitindo que outros dispositivos solicitem uma conexão deste dispositivo.",
- "android_stop_service_tip": "Fechar o serviço irá automaticamente fechar todas as conexões estabelecidas.",
- "android_version_audio_tip": "A versão atual do Android não suporta captura de áudio, por favor atualize para o Android 10 ou maior.",
- "android_start_service_tip": "Toque [Iniciar Serviço] ou ABRA a permissão [Captura de Tela] para iniciar o serviço de compartilhamento de tela.",
- "Account": "Conta",
- },
- de: {
- "Status": "Status",
- "Your Desktop": "Ihr Desktop",
- "desk_tip": "Mit dieser ID und diesem Passwort können Sie auf Ihren Desktop zugreifen.",
- "Password": "Passwort",
- "Ready": "Bereit",
- "Established": "Etabliert",
- "connecting_status": "Verbinden mit dem RustDesk-Netzwerk...",
- "Enable Service": "Verbindungsserver einschalten",
- "Start Service": "Starte Verbindungsserver",
- "Service is running": "Dienst läuft",
- "Service is not running": "Der Verbindungsserver läuft nicht",
- "not_ready_status": "Nicht bereit. Bitte überprüfen Sie Ihre Verbindung",
- "Control Remote Desktop": "Entfernten Desktop steuern",
- "Transfer File": "Datei übertragen",
- "Connect": "Verbinden",
- "Recent Sessions": "Letzte Sitzungen",
- "Address Book": "Adressbuch",
- "Confirmation": "Bestätigung",
- "TCP Tunneling": "TCP Tunneln",
- "Remove": "Entfernen",
- "Refresh random password": "Zufälliges Passwort aktualisieren",
- "Set your own password": "Legen Sie Ihr eigenes Passwort fest",
- "Enable Keyboard/Mouse": "Tastatur/Maus einschalten",
- "Enable Clipboard": "Zwischenablage einschalten",
- "Enable File Transfer": "Dateiübertragung aktivieren",
- "Enable TCP Tunneling": "TCP-Tunneling einschalten",
- "IP Whitelisting": "IP Freigabeliste",
- "ID/Relay Server": "ID/Verbindungsserver",
- "Stop service": "Verbindungsserver ausschalten",
- "Change ID": "ID wechseln",
- "Website": "Webseite",
- "About": "Über",
- "Mute": "Stummschalten",
- "Audio Input": "Audio-Eingang",
- "ID Server": "ID Server",
- "Relay Server": "Verbindungsserver Server",
- "API Server": "API Server",
- "invalid_http": "Muss mit http:// oder https:// beginnen",
- "Invalid IP": "Ungültige IP-Adresse",
- "id_change_tip": "Nur die Zeichen a-z, A-Z, 0-9 und _ (Unterstrich) sind erlaubt. Der erste Buchstabe muss a-z, A-Z sein. Länge zwischen 6 und 16.",
- "Invalid format": "Ungültiges Format",
- "This function is turned off by the server": "Diese Funktion wird vom Server nicht bereitgestellt",
- "Not available": "Nicht verfügbar",
- "Too frequent": "Zu häufig",
- "Cancel": "Abbrechen",
- "Skip": "Überspringen",
- "Close": "Schließen",
- "Retry": "Nochmal versuchen",
- "OK": "OK",
- "Password Required": "Passwort erforderlich",
- "Please enter your password": "Bitte geben Sie Ihr Passwort ein",
- "Remember password": "Passwort merken",
- "Wrong Password": "Falsches Passwort",
- "Do you want to enter again?": "Möchten Sie erneut teilnehmen?",
- "Connection Error": "Verbindungsfehler",
- "Error": "Fehler",
- "Reset by the peer": "Zurücksetzen durch die Gegenstelle",
- "Connecting...": "Verbinden...",
- "Connection in progress. Please wait.": "Die Verbindung wird hergestellt. Bitte warten Sie.",
- "Please try 1 minute later": "Bitte versuchen Sie es 1 Minute später",
- "Login Error": "Anmeldefehler",
- "Successful": "Erfolgreich",
- "Connected, waiting for image...": "Verbunden, warten auf Bild...",
- "Name": "Name",
- "Type": "Typ",
- "Modified": "Geändert",
- "Size": "Größe",
- "Show Hidden Files": "Versteckte Dateien anzeigen",
- "Receive": "Empfangen",
- "Send": "Senden",
- "Refresh File": "Datei aktualisieren",
- "Local": "Lokaler",
- "Remote": "Entfernter",
- "Remote Computer": "Entfernter Computer",
- "Local Computer": "Lokaler Computer",
- "Confirm Delete": "Löschen bestätigen",
- "Delete": "Löschen",
- "Properties": "Eigenschaften",
- "Multi Select": "Mehrfachauswahl",
- "Empty Directory": "Leeres Verzeichnis",
- "Not an empty directory": "Kein leeres Verzeichnis",
- "Are you sure you want to delete this file?": "Sind Sie sicher, dass Sie diese Datei löschen wollen?",
- "Are you sure you want to delete this empty directory?": "Sind Sie sicher, dass Sie dieses leere Verzeichnis löschen möchten?",
- "Are you sure you want to delete the file of this directory?": "Sind Sie sicher, dass Sie die Datei dieses Verzeichnisses löschen möchten?",
- "Do this for all conflicts": "Dies gilt für alle Konflikte",
- "This is irreversible!": "Dies ist irreversibel!",
- "Deleting": "Löschen",
- "files": "Dateien",
- "Waiting": "Warten",
- "Finished": "Fertiggestellt",
- "Speed": "Geschwindigkeit",
- "Custom Image Quality": "Individuelle Bildqualität",
- "Privacy mode": "Datenschutz-Modus",
- "Block user input": "Benutzereingaben blockieren",
- "Unblock user input": "Benutzereingaben freigeben",
- "Adjust Window": "Fenster anpassen",
- "Original": "Original",
- "Shrink": "Geschrumpft",
- "Stretch": "Gestreckt",
- "Good image quality": "Gute Bildqualität",
- "Balanced": "Ausgeglichen",
- "Optimize reaction time": "Optimierte Reaktionszeit",
- "Custom": "Benutzerdefiniert",
- "Show remote cursor": "Ferngesteuerten Cursor anzeigen",
- "Disable clipboard": "Zwischenablage deaktivieren",
- "Lock after session end": "Sperren nach Sitzungsende",
- "Insert": "Einfügen",
- "Insert Lock": "Sperre einfügen",
- "Refresh": "Aktualisieren",
- "ID does not exist": "Die ID existiert nicht",
- "Failed to connect to rendezvous server": "Verbindung zum Verbindungsserver fehlgeschlagen",
- "Please try later": "Bitte versuchen Sie es später",
- "Remote desktop is offline": "Entfernter Desktop ist offline",
- "Key mismatch": "Schlüssel nicht übereinstimmend",
- "Timeout": "Zeitüberschreitung",
- "Failed to connect to relay server": "Verbindung zum Verbindungsserver fehlgeschlagen",
- "Failed to connect via rendezvous server": "Verbindung über rendezvous server fehlgeschlagen",
- "Failed to connect via relay server": "Verbindung über den Verbindungsserver ist fehlgeschlagen",
- "Failed to make direct connection to remote desktop": "Direkte Verbindung zum Entfernten-Desktop konnte nicht hergestellt werden",
- "Set Password": "Passwort festlegen",
- "OS Password": "Betriebssystem-Passwort",
- "install_tip": "Aufgrund der UAC kann RustDesk in manchen Fällen nicht ordnungsgemäß auf der Gegenseite funktionieren. Um UAC zu vermeiden, klicken Sie bitte auf die Schaltfläche unten, um RustDesk auf dem System zu installieren",
- "Click to upgrade": "Zum Upgrade anklicken",
- "Click to download": "Zum Herunterladen klicken",
- "Click to update": "Zum Aktualisieren klicken",
- "Configuration Permissions": "Konfigurationsberechtigungen",
- "Configure": "Konfigurieren",
- "config_acc": "Um Ihren Desktop aus der Ferne zu steuern, müssen Sie RustDesk \"Zugangs\" Rechte erteilen.",
- "config_screen": "Um aus der Ferne auf Ihren Desktop zugreifen zu können, müssen Sie RustDesk \"Bildschirm-Aufnahme\" Berechtigungen erteilen.",
- "Installing ...": "Installiere ...",
- "Install": "Installieren",
- "Installation": "Einrichtung",
- "Installation Path": "Einrichtungs Pfad",
- "Create start menu shortcuts": "Startmenü Verknüpfungen erstellen",
- "Create desktop icon": "Desktop Symbol erstellen",
- "agreement_tip": "Wenn Sie die Einrichtung starten, akzeptieren Sie die Lizenzvereinbarung",
- "Accept and Install": "Akzeptieren und installieren",
- "End-user license agreement": "Lizenzvereinbarung für Endbenutzer",
- "Generating ...": "Generierung ...",
- "Your installation is lower version.": "Ihre Installation ist eine niedrigere Version.",
- "not_close_tcp_tip": "Schließen Sie dieses Fenster nicht, während Sie den Tunnel benutzen.",
- "Listening ...": "Hören ...",
- "Remote Host": "Entfernter Rechner",
- "Remote Port": "Entfernter Port",
- "Action": "Aktion",
- "Add": "Hinzufügen",
- "Local Port": "Lokaler Port",
- "setup_server_tip": "Für eine schnellere Verbindung, richten Sie bitte Ihren eigenen Verbindungsserver ein",
- "Too short, at least 6 characters.": "Zu kurz, mindestens 6 Zeichen.",
- "The confirmation is not identical.": "Die Bestätigung ist nicht identisch.",
- "Permissions": "Berechtigungen",
- "Accept": "Akzeptieren",
- "Dismiss": "Ablehnen",
- "Disconnect": "Verbindung trennen",
- "Allow using keyboard and mouse": "Erlaubt die Verwendung von Tastatur und Maus",
- "Allow using clipboard": "Verwendung der Zwischenablage zulassen",
- "Allow hearing sound": "Erlaubt das Hören von Sound",
- "Allow file transfer": "Dateiübertragung zulassen",
- "File transfer": "Datei Übertragung",
- "Connected": "Verbunden",
- "Direct and encrypted connection": "Direkte und verschlüsselte Verbindung",
- "Relayed and encrypted connection": "Vermittelte und verschlüsselte Verbindung",
- "Direct and unencrypted connection": "Direkte und unverschlüsselte Verbindung",
- "Relayed and unencrypted connection": "Vermittelte und unverschlüsselte Verbindung",
- "Enter Remote ID": "Remote-ID eingeben",
- "Enter your password": "Geben Sie Ihr Passwort ein",
- "Logging in...": "Anmeldung...",
- "Enable RDP session sharing": "RDP-Sitzungsfreigabe aktivieren",
- "Auto Login": "Automatisches Login (nur gültig, wenn Sie \"Sperren nach Sitzungsende\" eingestellt haben)",
- "Enable Direct IP Access": "Direkten IP-Zugang aktivieren",
- "Rename": "Umbenennen",
- "Space": "Platz",
- "Create Desktop Shortcut": "Desktop-Verknüpfung erstellen",
- "Change Path": "Pfad ändern",
- "Create Folder": "Ordner erstellen",
- "Please enter the folder name": "Bitte geben Sie den Ordnernamen ein",
- "Fix it": "Reparieren",
- "Warning": "Warnung",
- "Login screen using Wayland is not supported": "Anmeldebildschirm mit Wayland wird nicht unterstützt",
- "Reboot required": "Neustart erforderlich",
- "Unsupported display server ": "Nicht unterstützter Display-Server",
- "x11 expected": "X11 erwartet",
- "Port": "Port",
- "Settings": "Einstellungen",
- "Username": " Benutzername",
- "Invalid port": "Ungültiger Port",
- "Closed manually by the peer": "Vom Peer manuell geschlossen",
- "Enable remote configuration modification": "Änderung der Fernkonfiguration zulassen",
- "Run without install": "Ohne Installation ausführen",
- "Always connected via relay": "Immer über Verbindungsserver verbunden",
- "Always connect via relay": "Verbindung immer über Verbindungsserver",
- "whitelist_tip": "Nur IPs auf der Freigabeliste können auf mich zugreifen",
- "Login": "Anmeldung",
- "Logout": "Abmeldung",
- "Tags": "Stichworte",
- "Search ID": "Suche ID",
- "Current Wayland display server is not supported": "Der aktuelle Wayland-Anzeigeserver wird nicht unterstützt",
- "whitelist_sep": "Getrennt durch Komma, Semikolon, Leerzeichen oder Zeilenumbruch",
- "Add ID": "ID hinzufügen",
- "Add Tag": "Stichwort hinzufügen",
- "Unselect all tags": "Alle Stichworte abwählen",
- "Network error": "Netzwerkfehler",
- "Username missed": "Benutzername fehlt",
- "Password missed": "Passwort vergessen",
- "Wrong credentials": "Falsche Anmeldedaten",
- "Edit Tag": "Stichwort bearbeiten",
- "Unremember Password": "Passwort nicht merken",
- "Favorites": "Favoriten",
- "Add to Favorites": "Zu Favoriten hinzufügen",
- "Remove from Favorites": "Entferne von Favoriten",
- "Empty": "Leer",
- "Invalid folder name": "Ungültiger Ordnername",
- "Socks5 Proxy": "Socks5 Proxy",
- "Hostname": "Rechnername",
- "Discovered": "Gefunden",
- "install_daemon_tip": "Um beim Booten zu starten, müssen Sie den Systemdienst installieren",
- "Remote ID": "Entfernte ID",
- "Paste": "Einfügen",
- "Paste here?": "Hier einfügen?",
- "Are you sure to close the connection?": "Sind Sie sicher, dass Sie die Verbindung schließen wollen?",
- "Download new version": "Neue Version herunterladen",
- "Touch mode": "Touch-Modus",
- "Mouse mode": "Mouse-Modus",
- "One-Finger Tap": "Ein Fingertipp",
- "Left Mouse": "Linke Maus",
- "One-Long Tap": "Tippen Sie mit einem Finger lang",
- "Two-Finger Tap": "Zwei Finger tippen",
- "Right Mouse": "Rechte Maus",
- "One-Finger Move": "Eine Fingerbewegung",
- "Double Tap & Move": "Doppeltippen und verschieben",
- "Mouse Drag": "Maus ziehen",
- "Two-Finger vertically": "Zwei Finger vertikal",
- "Mouse Wheel": "Mausrad",
- "Two-Finger Move": "Zwei Finger Bewegung",
- "Canvas Move": "Leinwand bewegen",
- "Pinch to Zoom": "Zum Zoomen kneifen",
- "Canvas Zoom": "Leinwand Zoom",
- "Reset canvas": "Anzeige zurücksetzen",
- "No permission of file transfer": "Keine Erlaubnis zur Dateiübertragung",
- "Note": "Notiz",
- "Connection": "Verbindung",
- "Share Screen": "Bildschirm freigeben",
- "CLOSE": "NAH DRAN",
- "OPEN": "OFFEN",
- "Chat": "Plaudern",
- "Total": "Gesamt",
- "items": "Artikel",
- "Selected": "Ausgewählt",
- "Screen Capture": "Bildschirmaufnahme",
- "Mouse Control": "Maussteuerung",
- "File Transfer": "Datei Übertragung",
- "Audio Capture": "Audioaufnahme",
- "File Connection": "Dateiverbindung",
- "Screen Connection": "Bildschirmanschluss",
- "Do you accept?": "Akzeptieren Sie?",
- "Open System Setting": "Systemeinstellung öffnen",
- "How to get Android input permission?": "Wie erhalte ich eine Android-Eingabeberechtigung?",
- "android_input_permission_tip1": "Nach Erhalt der Eingabeerlaubnis kann das entfernte Gerät dieses Android-Gerät per Maus steuern",
- "android_input_permission_tip2": "Bitte gehen Sie zur nächsten Systemeinstellungsseite, suchen und geben Sie [Installierte Dienste] ein, schalten Sie den Dienst [RustDesk Input] ein",
- "android_new_connection_tip": "Es wurde eine neue Steuerungsanforderung empfangen, die Ihr aktuelles Gerät steuern möchte.",
- "android_service_will_start_tip": "Durch das Einschalten der Bildschirmaufnahme wird der Dienst automatisch gestartet, sodass andere Geräte eine Verbindung von diesem Gerät anfordern können.",
- "android_stop_service_tip": "Durch das Schließen des Dienstes werden automatisch alle hergestellten Verbindungen geschlossen.",
- "android_version_audio_tip": "Die aktuelle Android-Version unterstützt keine Audioaufnahme, bitte aktualisieren Sie auf Android 10 oder höher.",
- "android_start_service_tip": "Tippen Sie auf [Dienst starten] oder ÖFFNEN Sie die Berechtigung [Bildschirmaufnahme], um den Bildschirmfreigabedienst zu starten.",
- "Account": "Konto",
- },
- eo: {
- "Status": "Stato",
- "Your Desktop": "Via aparato",
- "desk_tip": "Via aparato povas esti alirita kun tiu identigilo kaj pasvorto",
- "Password": "Pasvorto",
- "Ready": "Preta",
- "Established": "",
- "connecting_status": "Konektante al la reto RustDesk...",
- "Enable Service": "Ebligi servon",
- "Start Service": "Starti servon",
- "Service is running": "",
- "Service is not running": "La servo ne funkcias",
- "not_ready_status": "Ne preta, bonvolu kontroli la retkonekto",
- "Control Remote Desktop": "Kontroli foran aparaton",
- "Transfer File": "Transigi dosieron",
- "Connect": "Konekti al",
- "Recent Sessions": "Lastaj sesioj",
- "Address Book": "Adresaro",
- "Confirmation": "Konfirmacio",
- "TCP Tunneling": "Tunelado TCP",
- "Remove": "Forigi",
- "Refresh random password": "Regeneri hazardan pasvorton",
- "Set your own password": "Agordi vian propran pasvorton",
- "Enable Keyboard/Mouse": "Ebligi klavaro/muso",
- "Enable Clipboard": "Sinkronigi poŝon",
- "Enable File Transfer": "Ebligi dosiertransigado",
- "Enable TCP Tunneling": "Ebligi tunelado TCP",
- "IP Whitelisting": "Listo de IP akceptataj",
- "ID/Relay Server": "Identigila/Relajsa servilo",
- "Stop service": "Haltu servon",
- "Change ID": "Ŝanĝi identigilon",
- "Website": "Retejo",
- "About": "Pri",
- "Mute": "Muta",
- "Audio Input": "Aŭdia enigo",
- "ID Server": "Servilo de identigiloj",
- "Relay Server": "Relajsa servilo",
- "API Server": "Servilo de API",
- "invalid_http": "Devas komenci kun http:// aŭ https://",
- "Invalid IP": "IP nevalida",
- "id_change_tip": "Nur la signoj a-z, A-Z, 0-9, _ (substreko) povas esti uzataj. La unua litero povas esti inter a-z, A-Z. La longeco devas esti inter 6 kaj 16.",
- "Invalid format": "Formato nevalida",
- "This function is turned off by the server": "Tiu funkcio estas malebligata de la servilo",
- "Not available": "Nedisponebla",
- "Too frequent": "Tro ofte ŝanĝita, bonvolu reprovi poste",
- "Cancel": "Nuligi",
- "Skip": "Ignori",
- "Close": "Fermi",
- "Retry": "Reprovi",
- "OK": "Konfermi",
- "Password Required": "Pasvorto deviga",
- "Please enter your password": "Bonvolu tajpi vian pasvorton",
- "Remember password": "Memori pasvorton",
- "Wrong Password": "Erara pasvorto",
- "Do you want to enter again?": "Ĉu vi aliri denove?",
- "Connection Error": "Eraro de konektado",
- "Error": "Eraro",
- "Reset by the peer": "La konekto estas fermita de la samtavolano",
- "Connecting...": "Konektante...",
- "Connection in progress. Please wait.": "Konektado farata. Bonvolu atendi.",
- "Please try 1 minute later": "Reprovi post 1 minuto",
- "Login Error": "Eraro de konektado",
- "Successful": "Sukceso",
- "Connected, waiting for image...": "Konektita, atendante bildon...",
- "Name": "Nomo",
- "Type": "",
- "Modified": "Modifita",
- "Size": "Grandeco",
- "Show Hidden Files": "Montri kaŝitajn dosierojn",
- "Receive": "Akcepti",
- "Send": "Sendi",
- "Refresh File": "",
- "Local": "",
- "Remote": "",
- "Remote Computer": "Fora komputilo",
- "Local Computer": "Loka komputilo",
- "Confirm Delete": "Konfermi la forigo",
- "Delete": "",
- "Properties": "",
- "Multi Select": "",
- "Empty Directory": "",
- "Not an empty directory": "",
- "Are you sure you want to delete this file?": "Ĉu vi vere volas forigi tiun dosieron?",
- "Are you sure you want to delete this empty directory?": "",
- "Are you sure you want to delete the file of this directory?": "",
- "Do this for all conflicts": "Same por ĉiuj konfliktoj",
- "This is irreversible!": "",
- "Deleting": "Forigado",
- "files": "dosiero",
- "Waiting": "Atendante...",
- "Finished": "Finita",
- "Speed": "",
- "Custom Image Quality": "Agordi bildan kvaliton",
- "Privacy mode": "Modo privata",
- "Block user input": "Bloki uzanta enigo",
- "Unblock user input": "Malbloki uzanta enigo",
- "Adjust Window": "Adapti fenestro",
- "Original": "Originala rilatumo",
- "Shrink": "Ŝrumpi",
- "Stretch": "Streĉi",
- "Good image quality": "Bona bilda kvalito",
- "Balanced": "Normala bilda kvalito",
- "Optimize reaction time": "Optimigi reakcia tempo",
- "Custom": "Personigi bilda kvalito",
- "Show remote cursor": "Montri foran kursoron",
- "Disable clipboard": "Malebligi poŝon",
- "Lock after session end": "Ŝlosi foran komputilon post malkonektado",
- "Insert": "Enmeti",
- "Insert Lock": "Ŝlosi foran komputilon",
- "Refresh": "Refreŝigi ekranon",
- "ID does not exist": "La identigilo ne ekzistas",
- "Failed to connect to rendezvous server": "Malsukcesis konekti al la servilo rendezvous",
- "Please try later": "Bonvolu provi poste",
- "Remote desktop is offline": "La fora aparato estas senkonektita",
- "Key mismatch": "Miskongruo de klavoj",
- "Timeout": "Konekta posttempo",
- "Failed to connect to relay server": "Malsukcesis konekti al la relajsa servilo",
- "Failed to connect via rendezvous server": "Malsukcesis konekti per servilo rendezvous",
- "Failed to connect via relay server": "Malsukcesis konekti per relajsa servilo",
- "Failed to make direct connection to remote desktop": "Malsukcesis konekti direkte",
- "Set Password": "Agordi pasvorton",
- "OS Password": "Pasvorto de la operaciumo",
- "install_tip": "Vi ne uzas instalita versio. Pro limigoj pro UAC, kiel aparato kontrolata, en kelkaj kazoj, ne estos ebla kontroli la muson kaj klavaron aŭ registri la ekranon. Bonvolu alkliku la butonon malsupre por instali RustDesk sur la operaciumo por eviti la demando supre.",
- "Click to upgrade": "Alklaki por plibonigi",
- "Click to download": "Alklaki por elŝuti",
- "Click to update": "Alklaki por ĝisdatigi",
- "Configuration Permissions": "Permesoj de konfigurado",
- "Configure": "Konfiguri",
- "config_acc": "Por uzi vian foran aparaton, bonvolu doni la permeson \"alirebleco\" al RustDesk.",
- "config_screen": "Por uzi vian foran aparaton, bonvolu doni la permeson \"ekranregistrado\" al RustDesk.",
- "Installing ...": "Instalante...",
- "Install": "Instali",
- "Installation": "Instalado",
- "Installation Path": "Vojo de instalo",
- "Create start menu shortcuts": "Aldoni ligilojn sur la startmenuo",
- "Create desktop icon": "Aldoni ligilojn sur la labortablo",
- "agreement_tip": "Starti la instaladon signifas akcepti la permesilon.",
- "Accept and Install": "Akcepti kaj instali",
- "End-user license agreement": "Uzanta permesilon",
- "Generating ...": "Generante...",
- "Your installation is lower version.": "Via versio de instalaĵo estas pli malalta ol la lasta.",
- "not_close_tcp_tip": "Bonvolu ne fermu tiun fenestron dum la uzo de la tunelo",
- "Listening ...": "Atendante konekton al la tunelo...",
- "Remote Host": "Fora gastiganto",
- "Remote Port": "Fora pordo",
- "Action": "Ago",
- "Add": "Aldoni",
- "Local Port": "Loka pordo",
- "setup_server_tip": "Se vi bezonas pli rapida konekcio, vi povas krei vian propran servilon",
- "Too short, at least 6 characters.": "Tro mallonga, almenaŭ 6 signoj.",
- "The confirmation is not identical.": "Ambaŭ enigoj ne kongruas",
- "Permissions": "Permesoj",
- "Accept": "Akcepti",
- "Dismiss": "Malakcepti",
- "Disconnect": "Malkonekti",
- "Allow using keyboard and mouse": "Permesi la uzon de la klavaro kaj muso",
- "Allow using clipboard": "Permesi la uzon de la poŝo",
- "Allow hearing sound": "Permesi la uzon de la sono",
- "Allow file transfer": "Permesi la dosiertransigadon",
- "File transfer": "Dosiertransigado",
- "Connected": "Konektata",
- "Direct and encrypted connection": "Konekcio direkta ĉifrata",
- "Relayed and encrypted connection": "Konekcio relajsa ĉifrata",
- "Direct and unencrypted connection": "Konekcio direkta neĉifrata",
- "Relayed and unencrypted connection": "Konekcio relajsa neĉifrata",
- "Enter Remote ID": "Tajpu foran identigilon",
- "Enter your password": "Tajpu vian pasvorton",
- "Logging in...": "Konektante...",
- "Enable RDP session sharing": "Ebligi la kundivido de sesio RDP",
- "Auto Login": "Aŭtomata konektado (la ŝloso nur estos ebligita post la malebligado de la unua parametro)",
- "Enable Direct IP Access": "Permesi direkta eniro per IP",
- "Rename": "Renomi",
- "Space": "Spaco",
- "Create Desktop Shortcut": "Krei ligilon sur la labortablon",
- "Change Path": "Ŝanĝi vojon",
- "Create Folder": "Krei dosierujon",
- "Please enter the folder name": "Bonvolu enigi la dosiernomon",
- "Fix it": "Riparu ĝin",
- "Warning": "Averto",
- "Login screen using Wayland is not supported": "Konektajn ekranojn uzantajn Wayland ne estas subtenitaj",
- "Reboot required": "Restarto deviga",
- "Unsupported display server ": "La aktuala bilda servilo ne estas subtenita",
- "x11 expected": "Bonvolu uzi x11",
- "Port": "Pordo",
- "Settings": "Agordoj",
- "Username": " Uzanta nomo",
- "Invalid port": "Pordo nevalida",
- "Closed manually by the peer": "Manuale fermita de la samtavolano",
- "Enable remote configuration modification": "Permesi foran redaktadon de la konfiguracio",
- "Run without install": "Plenumi sen instali",
- "Always connected via relay": "Ĉiam konektata per relajso",
- "Always connect via relay": "Ĉiam konekti per relajso",
- "whitelist_tip": "Nur la IP en la blanka listo povas kontroli mian komputilon",
- "Login": "Konekti",
- "Logout": "Malkonekti",
- "Tags": "Etikedi",
- "Search ID": "Serĉi ID",
- "Current Wayland display server is not supported": "La aktuala bilda servilo Wayland ne estas subtenita",
- "whitelist_sep": "Vi povas uzi komon, punktokomon, spacon aŭ linsalton kiel apartigilo",
- "Add ID": "Aldoni identigilo",
- "Add Tag": "Aldoni etikedo",
- "Unselect all tags": "Malselekti ĉiujn etikedojn",
- "Network error": "Reta eraro",
- "Username missed": "Uzantnomo forgesita",
- "Password missed": "Pasvorto forgesita",
- "Wrong credentials": "Identigilo aŭ pasvorto erara",
- "Edit Tag": "Redakti etikedo",
- "Unremember Password": "Forgesi pasvorton",
- "Favorites": "Favorataj",
- "Add to Favorites": "Aldoni al la favorataj",
- "Remove from Favorites": "Forigi el la favorataj",
- "Empty": "Malplena",
- "Invalid folder name": "Dosiernomo nevalida",
- "Socks5 Proxy": "Socks5 prokura servilo",
- "Hostname": "Nomo de gastiga",
- "Discovered": "Malkovritaj",
- "install_daemon_tip": "",
- "Remote ID": "Fora identigilo",
- "Paste": "Alglui",
- "Paste here?": "",
- "Are you sure to close the connection?": "Ĉu vi vere volas fermi la konekton?",
- "Download new version": "Elŝuti la novan version",
- "Touch mode": "Tuŝa modo",
- "Mouse mode": "",
- "One-Finger Tap": "",
- "Left Mouse": "",
- "One-Long Tap": "",
- "Two-Finger Tap": "",
- "Right Mouse": "",
- "One-Finger Move": "",
- "Double Tap & Move": "",
- "Mouse Drag": "",
- "Two-Finger vertically": "",
- "Mouse Wheel": "",
- "Two-Finger Move": "",
- "Canvas Move": "",
- "Pinch to Zoom": "",
- "Canvas Zoom": "",
- "Reset canvas": "Restarigi kanvaso",
- "No permission of file transfer": "Neniu permeso de dosiertransigo",
- "Note": "Notu",
- "Connection": "",
- "Share Screen": "",
- "CLOSE": "",
- "OPEN": "",
- "Chat": "",
- "Total": "",
- "items": "",
- "Selected": "",
- "Screen Capture": "",
- "Mouse Control": "",
- "File Transfer": "",
- "Audio Capture": "",
- "File Connection": "",
- "Screen Connection": "",
- "Do you accept?": "",
- "Open System Setting": "",
- "How to get Android input permission?": "",
- "android_input_permission_tip1": "",
- "android_input_permission_tip2": "",
- "android_new_connection_tip": "",
- "android_service_will_start_tip": "",
- "android_stop_service_tip": "",
- "android_version_audio_tip": "",
- "android_start_service_tip": "",
- "Account": "",
- },
- cn: {
- "Status": "状态",
- "Your Desktop": "你的桌面",
- "desk_tip": "你的桌面可以通过下面的ID和密码访问。",
- "Password": "密码",
- "Ready": "就绪",
- "Established": "已建立",
- "connecting_status": "正在接入RustDesk网络...",
- "Enable Service": "允许服务",
- "Start Service": "启动服务",
- "Service is running": "服务正在运行",
- "Service is not running": "服务没有启动",
- "not_ready_status": "未就绪,请检查网络连接",
- "Control Remote Desktop": "控制远程桌面",
- "Transfer File": "传输文件",
- "Connect": "连接",
- "Recent Sessions": "最近访问过",
- "Address Book": "地址簿",
- "Confirmation": "确认",
- "TCP Tunneling": "TCP隧道",
- "Remove": "删除",
- "Refresh random password": "刷新随机密码",
- "Set your own password": "设置密码",
- "Enable Keyboard/Mouse": "允许控制键盘/鼠标",
- "Enable Clipboard": "允许同步剪贴板",
- "Enable File Transfer": "允许传输文件",
- "Enable TCP Tunneling": "允许建立TCP隧道",
- "IP Whitelisting": "IP白名单",
- "ID/Relay Server": "ID/中继服务器",
- "Stop service": "停止服务",
- "Change ID": "改变ID",
- "Website": "网站",
- "About": "关于",
- "Mute": "静音",
- "Audio Input": "音频输入",
- "ID Server": "ID服务器",
- "Relay Server": "中继服务器",
- "API Server": "API服务器",
- "invalid_http": "必须以http://或者https://开头",
- "Invalid IP": "无效IP",
- "id_change_tip": "只可以使用字母a-z, A-Z, 0-9, _ (下划线)。首字母必须是a-z, A-Z。长度在6与16之间。",
- "Invalid format": "无效格式",
- "This function is turned off by the server": "服务器关闭了此功能",
- "Not available": "已被占用",
- "Too frequent": "修改太频繁,请稍后再试",
- "Cancel": "取消",
- "Skip": "跳过",
- "Close": "关闭",
- "Retry": "再试",
- "OK": "确认",
- "Password Required": "需要密码",
- "Please enter your password": "请输入密码",
- "Remember password": "记住密码",
- "Wrong Password": "密码错误",
- "Do you want to enter again?": "还想输入一次吗?",
- "Connection Error": "连接错误",
- "Error": "错误",
- "Reset by the peer": "连接被对方关闭",
- "Connecting...": "正在连接...",
- "Connection in progress. Please wait.": "连接进行中,请稍等。",
- "Please try 1 minute later": "一分钟后再试",
- "Login Error": "登录错误",
- "Successful": "成功",
- "Connected, waiting for image...": "已连接,等待画面传输...",
- "Name": "名称",
- "Type": "类型",
- "Modified": "修改时间",
- "Size": "大小",
- "Show Hidden Files": "显示隐藏文件",
- "Receive": "接受",
- "Send": "发送",
- "Refresh File": "刷新文件",
- "Local": "本地",
- "Remote": "远程",
- "Remote Computer": "远程电脑",
- "Local Computer": "本地电脑",
- "Confirm Delete": "确认删除",
- "Delete": "删除",
- "Properties": "属性",
- "Multi Select": "多选",
- "Empty Directory": "空文件夹",
- "Not an empty directory": "这不是一个空文件夹",
- "Are you sure you want to delete this file?": "是否删除此文件?",
- "Are you sure you want to delete this empty directory?": "是否删除此空文件夹?",
- "Are you sure you want to delete the file of this directory?": "是否删除文件夹下的文件?",
- "Do this for all conflicts": "应用于其它冲突",
- "This is irreversible!": "此操作不可逆!",
- "Deleting": "正在删除",
- "files": "文件",
- "Waiting": "等待...",
- "Finished": "完成",
- "Speed": "速度",
- "Custom Image Quality": "设置画面质量",
- "Privacy mode": "隐私模式",
- "Block user input": "阻止用户输入",
- "Unblock user input": "取消阻止用户输入",
- "Adjust Window": "调节窗口",
- "Original": "原始比例",
- "Shrink": "收缩",
- "Stretch": "伸展",
- "Good image quality": "好画质",
- "Balanced": "一般画质",
- "Optimize reaction time": "优化反应时间",
- "Custom": "自定义画质",
- "Show remote cursor": "显示远程光标",
- "Disable clipboard": "禁止剪贴板",
- "Lock after session end": "断开后锁定远程电脑",
- "Insert": "插入",
- "Insert Lock": "锁定远程电脑",
- "Refresh": "刷新画面",
- "ID does not exist": "ID不存在",
- "Failed to connect to rendezvous server": "连接注册服务器失败",
- "Please try later": "请稍后再试",
- "Remote desktop is offline": "远程电脑不在线",
- "Key mismatch": "Key不匹配",
- "Timeout": "连接超时",
- "Failed to connect to relay server": "无法连接到中继服务器",
- "Failed to connect via rendezvous server": "无法通过注册服务器建立连接",
- "Failed to connect via relay server": "无法通过中继服务器建立连接",
- "Failed to make direct connection to remote desktop": "无法建立直接连接",
- "Set Password": "设置密码",
- "OS Password": "操作系统密码",
- "install_tip": "你正在运行未安装版本,由于UAC限制,作为被控端,会在某些情况下无法控制鼠标键盘,或者录制屏幕,请点击下面的按钮将RustDesk安装到系统,从而规避上述问题。",
- "Click to upgrade": "点击这里升级",
- "Click to download": "点击这里下载",
- "Click to update": "点击这里更新",
- "Configuration Permissions": "配置权限",
- "Configure": "配置",
- "config_acc": "为了能够远程控制你的桌面, 请给予RustDesk\"辅助功能\" 权限。",
- "config_screen": "为了能够远程访问你的桌面, 请给予RustDesk\"屏幕录制\" 权限。",
- "Installing ...": "安装 ...",
- "Install": "安装",
- "Installation": "安装",
- "Installation Path": "安装路径",
- "Create start menu shortcuts": "创建启动菜单快捷方式",
- "Create desktop icon": "创建桌面图标",
- "agreement_tip": "开始安装即表示接受许可协议。",
- "Accept and Install": "同意并安装",
- "End-user license agreement": "用户协议",
- "Generating ...": "正在产生 ...",
- "Your installation is lower version.": "你安装的版本比当前运行的低。",
- "not_close_tcp_tip": "请在使用隧道的时候,不要关闭本窗口",
- "Listening ...": "正在等待隧道连接 ...",
- "Remote Host": "远程主机",
- "Remote Port": "远程端口",
- "Action": "动作",
- "Add": "添加",
- "Local Port": "本地端口",
- "setup_server_tip": "如果需要更快连接速度,你可以选择自建服务器",
- "Too short, at least 6 characters.": "太短了,至少6个字符",
- "The confirmation is not identical.": "两次输入不匹配",
- "Permissions": "权限",
- "Accept": "接受",
- "Dismiss": "拒绝",
- "Disconnect": "断开连接",
- "Allow using keyboard and mouse": "允许使用键盘鼠标",
- "Allow using clipboard": "允许使用剪贴板",
- "Allow hearing sound": "允许听到声音",
- "Allow file transfer": "允许文件传输",
- "File transfer": "文件传输",
- "Connected": "已经连接",
- "Direct and encrypted connection": "加密直连",
- "Relayed and encrypted connection": "加密中继连接",
- "Direct and unencrypted connection": "非加密直连",
- "Relayed and unencrypted connection": "非加密中继连接",
- "Enter Remote ID": "输入对方ID",
- "Enter your password": "输入密码",
- "Logging in...": "正在登录...",
- "Enable RDP session sharing": "允许RDP会话共享",
- "Auto Login": "自动登录(设置断开后锁定才有效)",
- "Enable Direct IP Access": "允许IP直接访问",
- "Rename": "改名",
- "Space": "空格",
- "Create Desktop Shortcut": "创建桌面快捷方式",
- "Change Path": "改变路径",
- "Create Folder": "创建文件夹",
- "Please enter the folder name": "请输入文件夹名称",
- "Fix it": "修复",
- "Warning": "警告",
- "Login screen using Wayland is not supported": "不支持使用 Wayland 登录界面",
- "Reboot required": "重启后才能生效",
- "Unsupported display server ": "不支持当前显示服务器",
- "x11 expected": "请切换到 x11",
- "Port": "端口",
- "Settings": "设置",
- "Username": " 用户名",
- "Invalid port": "无效端口",
- "Closed manually by the peer": "被对方手动关闭",
- "Enable remote configuration modification": "允许远程修改配置",
- "Run without install": "无安装运行",
- "Always connected via relay": "强制走中继连接",
- "Always connect via relay": "强制走中继连接",
- "whitelist_tip": "只有白名单里的ip才能访问我",
- "Login": "登录",
- "Logout": "登出",
- "Tags": "标签",
- "Search ID": "查找ID",
- "Current Wayland display server is not supported": "不支持 Wayland 显示服务器",
- "whitelist_sep": "可以使用逗号,分号,空格或者换行符作为分隔符",
- "Add ID": "增加ID",
- "Add Tag": "增加标签",
- "Unselect all tags": "取消选择所有标签",
- "Network error": "网络错误",
- "Username missed": "用户名没有填写",
- "Password missed": "密码没有填写",
- "Wrong credentials": "用户名或者密码错误",
- "Edit Tag": "修改标签",
- "Unremember Password": "忘掉密码",
- "Favorites": "收藏",
- "Add to Favorites": "加入到收藏",
- "Remove from Favorites": "从收藏中删除",
- "Empty": "空空如也",
- "Invalid folder name": "无效文件夹名称",
- "Socks5 Proxy": "Socks5 代理",
- "Hostname": "主机名",
- "Discovered": "已发现",
- "install_daemon_tip": "为了开机启动,请安装系统服务。",
- "Remote ID": "远程ID",
- "Paste": "粘贴",
- "Paste here?": "粘贴到这里?",
- "Are you sure to close the connection?": "是否确认关闭连接?",
- "Download new version": "下载新版本",
- "Touch mode": "触屏模式",
- "Mouse mode": "鼠标模式",
- "One-Finger Tap": "单指轻触",
- "Left Mouse": "鼠标左键",
- "One-Long Tap": "单指长按",
- "Two-Finger Tap": "双指轻触",
- "Right Mouse": "鼠标右键",
- "One-Finger Move": "单指移动",
- "Double Tap & Move": "双击并移动",
- "Mouse Drag": "鼠标选中拖动",
- "Two-Finger vertically": "双指垂直滑动",
- "Mouse Wheel": "鼠标滚轮",
- "Two-Finger Move": "双指移动",
- "Canvas Move": "移动画布",
- "Pinch to Zoom": "双指缩放",
- "Canvas Zoom": "缩放画布",
- "Reset canvas": "重置画布",
- "No permission of file transfer": "没有文件传输权限",
- "Note": "备注",
- "Connection": "连接",
- "Share Screen": "共享屏幕",
- "CLOSE": "关闭",
- "OPEN": "开启",
- "Chat": "聊天消息",
- "Total": "总计",
- "items": "个项目",
- "Selected": "已选择",
- "Screen Capture": "屏幕录制",
- "Mouse Control": "鼠标输入",
- "File Transfer": "文件传输",
- "Audio Capture": "音频录制",
- "File Connection": "文件连接",
- "Screen Connection": "屏幕连接",
- "Do you accept?": "是否接受?",
- "Open System Setting": "打开系统设置",
- "How to get Android input permission?": "如何获取安卓的输入权限?",
- "android_input_permission_tip1": "获取输入权限后可以让远程设备通过鼠标控制这台安卓设备",
- "android_input_permission_tip2": "请在接下来的系统设置页面里,找到并进入 [已安装的服务] 页面,将 [RustDesk Input] 服务开启",
- "android_new_connection_tip": "收到新的连接控制请求,对方想要控制你当前的设备。",
- "android_service_will_start_tip": "开启录屏权限将自动开启服务,允许其他设备向此设备请求建立连接。",
- "android_stop_service_tip": "关闭服务将自动关闭所有已建立的连接。",
- "android_version_audio_tip": "当前安卓版本不支持音频录制,请升级至安卓10或更高。",
- "android_start_service_tip": "点击 [启动服务] 或打开 [屏幕录制] 权限开启手机屏幕共享服务。",
- "Account": "账号",
- },
- it: {
- "Status": "Stato",
- "Your Desktop": "Il tuo desktop",
- "desk_tip": "Puoi accedere al tuo desktop usando l'ID e la password riportati qui.",
- "Password": "Password",
- "Ready": "Pronto",
- "Established": "Stabilito",
- "connecting_status": "Connessione alla rete RustDesk in corso...",
- "Enable Service": "Abilita servizio",
- "Start Service": "Avvia servizio",
- "Service is running": "Il servizio è in esecuzione",
- "Service is not running": "Il servizio non è in esecuzione",
- "not_ready_status": "Non pronto. Verifica la tua connessione",
- "Control Remote Desktop": "Controlla una scrivania remota",
- "Transfer File": "Trasferisci file",
- "Connect": "Connetti",
- "Recent Sessions": "Sessioni recenti",
- "Address Book": "Rubrica",
- "Confirmation": "Conferma",
- "TCP Tunneling": "Tunnel TCP",
- "Remove": "Rimuovi",
- "Refresh random password": "Nuova password casuale",
- "Set your own password": "Imposta la tua password",
- "Enable Keyboard/Mouse": "Abilita tastiera/mouse",
- "Enable Clipboard": "Abilita appunti",
- "Enable File Transfer": "Abilita trasferimento file",
- "Enable TCP Tunneling": "Abilita tunnel TCP",
- "IP Whitelisting": "IP autorizzati",
- "ID/Relay Server": "Server ID/Relay",
- "Stop service": "Arresta servizio",
- "Change ID": "Cambia ID",
- "Website": "Sito web",
- "About": "Informazioni",
- "Mute": "Silenzia",
- "Audio Input": "Input audio",
- "ID Server": "ID server",
- "Relay Server": "Server relay",
- "API Server": "Server API",
- "invalid_http": "deve iniziare con http:// o https://",
- "Invalid IP": "Indirizzo IP non valido",
- "id_change_tip": "Puoi usare solo i caratteri a-z, A-Z, 0-9 e _ (underscore). Il primo carattere deve essere a-z o A-Z. La lunghezza deve essere fra 6 e 16 caratteri.",
- "Invalid format": "Formato non valido",
- "This function is turned off by the server": "Questa funzione è disabilitata sul server",
- "Not available": "Non disponibile",
- "Too frequent": "Troppo frequente",
- "Cancel": "Annulla",
- "Skip": "Ignora",
- "Close": "Chiudi",
- "Retry": "Riprova",
- "OK": "OK",
- "Password Required": "Password richiesta",
- "Please enter your password": "Inserisci la tua password",
- "Remember password": "Ricorda password",
- "Wrong Password": "Password errata",
- "Do you want to enter again?": "Vuoi riprovare?",
- "Connection Error": "Errore di connessione",
- "Error": "Errore",
- "Reset by the peer": "Reimpostata dal peer",
- "Connecting...": "Connessione...",
- "Connection in progress. Please wait.": "Connessione in corso. Attendi.",
- "Please try 1 minute later": "Per favore riprova fra 1 minuto",
- "Login Error": "Errore di login",
- "Successful": "Successo",
- "Connected, waiting for image...": "Connesso, in attesa dell'immagine...",
- "Name": "Nome",
- "Type": "Tipo",
- "Modified": "Modificato",
- "Size": "Dimensione",
- "Show Hidden Files": "Mostra file nascosti",
- "Receive": "Ricevi",
- "Send": "Invia",
- "Refresh File": "Aggiorna file",
- "Local": "Locale",
- "Remote": "Remote",
- "Remote Computer": "Computer remoto",
- "Local Computer": "Computer locale",
- "Confirm Delete": "Conferma cancellazione",
- "Delete": "Eliminare",
- "Properties": "Proprietà",
- "Multi Select": "Selezione multipla",
- "Empty Directory": "Directory vuota",
- "Not an empty directory": "Non una directory vuota",
- "Are you sure you want to delete this file?": "Vuoi davvero eliminare questo file?",
- "Are you sure you want to delete this empty directory?": "Sei sicuro di voler eliminare questa directory vuota?",
- "Are you sure you want to delete the file of this directory?": "Sei sicuro di voler eliminare il file di questa directory?",
- "Do this for all conflicts": "Ricorca questa scelta per tutti i conflitti",
- "This is irreversible!": "Questo è irreversibile!",
- "Deleting": "Cancellazione di",
- "files": "file",
- "Waiting": "In attesa",
- "Finished": "Terminato",
- "Speed": "Velocità",
- "Custom Image Quality": "Qualità immagine personalizzata",
- "Privacy mode": "Modalità privacy",
- "Block user input": "Blocca l'input dell'utente",
- "Unblock user input": "Sbloccare l'input dell'utente",
- "Adjust Window": "Adatta la finestra",
- "Original": "Originale",
- "Shrink": "Restringi",
- "Stretch": "Allarga",
- "Good image quality": "Buona qualità immagine",
- "Balanced": "Bilanciato",
- "Optimize reaction time": "Ottimizza il tempo di reazione",
- "Custom": "Personalizzato",
- "Show remote cursor": "Mostra il cursore remoto",
- "Disable clipboard": "Disabilita appunti",
- "Lock after session end": "Blocca al termine della sessione",
- "Insert": "Inserisci",
- "Insert Lock": "Blocco inserimento",
- "Refresh": "Aggiorna",
- "ID does not exist": "L'ID non esiste",
- "Failed to connect to rendezvous server": "Errore di connessione al server rendezvous",
- "Please try later": "Riprova più tardi",
- "Remote desktop is offline": "Il desktop remoto è offline",
- "Key mismatch": "La chiave non corrisponde",
- "Timeout": "Timeout",
- "Failed to connect to relay server": "Errore di connessione al server relay",
- "Failed to connect via rendezvous server": "Errore di connessione tramite il server rendezvous",
- "Failed to connect via relay server": "Errore di connessione tramite il server relay",
- "Failed to make direct connection to remote desktop": "Impossibile connettersi direttamente al desktop remoto",
- "Set Password": "Imposta password",
- "OS Password": "Password del sistema operativo",
- "install_tip": "A causa del Controllo Account Utente, RustDesk potrebbe non funzionare correttamente come desktop remoto. Per evitare questo problema, fai click sul tasto qui sotto per installare RustDesk a livello di sistema.",
- "Click to upgrade": "Fai click per aggiornare",
- "Click to download": "Cliquez per scaricare",
- "Click to update": "Fare clic per aggiornare",
- "Configuration Permissions": "Permessi di configurazione",
- "Configure": "Configura",
- "config_acc": "Per controllare il tuo desktop dall'esterno, devi fornire a RustDesk il permesso \"Accessibilità\".",
- "config_screen": "Per controllare il tuo desktop dall'esterno, devi fornire a RustDesk il permesso \"Registrazione schermo\".",
- "Installing ...": "Installazione ...",
- "Install": "Installa",
- "Installation": "Installazione",
- "Installation Path": "Percorso di installazione",
- "Create start menu shortcuts": "Crea i collegamenti nel menu di avvio",
- "Create desktop icon": "Crea un'icona sul desktop",
- "agreement_tip": "Avviando l'installazione, accetti i termini del contratto di licenza.",
- "Accept and Install": "Accetta e installa",
- "End-user license agreement": "Contratto di licenza con l'utente finale",
- "Generating ...": "Generazione ...",
- "Your installation is lower version.": "La tua installazione non è aggiornata.",
- "not_close_tcp_tip": "Non chiudere questa finestra mentre stai usando il tunnel",
- "Listening ...": "In ascolto ...",
- "Remote Host": "Host remoto",
- "Remote Port": "Porta remota",
- "Action": "Azione",
- "Add": "Aggiungi",
- "Local Port": "Porta locale",
- "setup_server_tip": "Per una connessione più veloce, configura un tuo server",
- "Too short, at least 6 characters.": "Troppo breve, almeno 6 caratteri",
- "The confirmation is not identical.": "La conferma non corrisponde",
- "Permissions": "Permessi",
- "Accept": "Accetta",
- "Dismiss": "Rifiuta",
- "Disconnect": "Disconnetti",
- "Allow using keyboard and mouse": "Consenti l'uso di tastiera e mouse",
- "Allow using clipboard": "Consenti l'uso degli appunti",
- "Allow hearing sound": "Consenti la riproduzione dell'audio",
- "Allow file transfer": "Consenti trasferimento file",
- "File transfer": "Trasferimento di file",
- "Connected": "Connesso",
- "Direct and encrypted connection": "Connessione diretta e cifrata",
- "Relayed and encrypted connection": "Connessione tramite relay e cifrata",
- "Direct and unencrypted connection": "Connessione diretta e non cifrata",
- "Relayed and unencrypted connection": "Connessione tramite relay e non cifrata",
- "Enter Remote ID": "Inserisci l'ID remoto",
- "Enter your password": "Inserisci la tua password",
- "Logging in...": "Autenticazione...",
- "Enable RDP session sharing": "Abilita la condivisione della sessione RDP",
- "Auto Login": "Login automatico",
- "Enable Direct IP Access": "Abilita l'accesso diretto tramite IP",
- "Rename": "Rinomina",
- "Space": "Spazio",
- "Create Desktop Shortcut": "Crea collegamento sul desktop",
- "Change Path": "Cambia percorso",
- "Create Folder": "Crea cartella",
- "Please enter the folder name": "Inserisci il nome della cartella",
- "Fix it": "Risolvi",
- "Warning": "Avviso",
- "Login screen using Wayland is not supported": "La schermata di login non è supportata utilizzando Wayland",
- "Reboot required": "Riavvio necessario",
- "Unsupported display server ": "Display server non supportato",
- "x11 expected": "x11 necessario",
- "Port": "Porta",
- "Settings": "Impostazioni",
- "Username": " Nome utente",
- "Invalid port": "Porta non valida",
- "Closed manually by the peer": "Chiuso manualmente dal peer",
- "Enable remote configuration modification": "Abilita la modifica remota della configurazione",
- "Run without install": "Avvia senza installare",
- "Always connected via relay": "Connesso sempre tramite relay",
- "Always connect via relay": "Connetti sempre tramite relay",
- "whitelist_tip": "Solo gli indirizzi IP autorizzati possono connettersi a questo desktop",
- "Login": "Accedi",
- "Logout": "Esci",
- "Tags": "Tag",
- "Search ID": "Cerca ID",
- "Current Wayland display server is not supported": "Questo display server Wayland non è supportato",
- "whitelist_sep": "Separati da virgola, punto e virgola, spazio o a capo",
- "Add ID": "Aggiungi ID",
- "Add Tag": "Aggiungi tag",
- "Unselect all tags": "Deseleziona tutti i tag",
- "Network error": "Errore di rete",
- "Username missed": "Nome utente dimenticato",
- "Password missed": "Password dimenticata",
- "Wrong credentials": "Credenziali errate",
- "Edit Tag": "Modifica tag",
- "Unremember Password": "Non ricordare la password",
- "Favorites": "Preferiti",
- "Add to Favorites": "Aggiungi ai preferiti",
- "Remove from Favorites": "Rimuovi dai preferiti",
- "Empty": "Vuoto",
- "Invalid folder name": "Nome della cartella non valido",
- "Socks5 Proxy": "Socks5 Proxy",
- "Hostname": "Nome host",
- "Discovered": "Scoperto",
- "install_daemon_tip": "Per iniziare all'avvio, è necessario installare il servizio di sistema.",
- "Remote ID": "ID remoto",
- "Paste": "Impasto",
- "Paste here?": "Incolla qui?",
- "Are you sure to close the connection?": "Sei sicuro di chiudere la connessione?",
- "Download new version": "Scarica nuova versione",
- "Touch mode": "Modalità tocco",
- "Mouse mode": "Modalità mouse",
- "One-Finger Tap": "Tocca con un dito",
- "Left Mouse": "Mouse sinistro",
- "One-Long Tap": "Tocco lungo con un dito",
- "Two-Finger Tap": "Tocca con due dita",
- "Right Mouse": "Mouse destro",
- "One-Finger Move": "Movimento con un dito",
- "Double Tap & Move": "Tocca due volte e sposta",
- "Mouse Drag": "Trascina il mouse",
- "Two-Finger vertically": "Due dita in verticale",
- "Mouse Wheel": "Rotellina del mouse",
- "Two-Finger Move": "Movimento con due dita",
- "Canvas Move": "Sposta tela",
- "Pinch to Zoom": "Pizzica per zoomare",
- "Canvas Zoom": "Zoom tela",
- "Reset canvas": "Ripristina tela",
- "No permission of file transfer": "Nessun permesso di trasferimento di file",
- "Note": "Nota",
- "Connection": "Connessione",
- "Share Screen": "Condividi schermo",
- "CLOSE": "CHIUDERE",
- "OPEN": "APRIRE",
- "Chat": "Chiacchierata",
- "Total": "Totale",
- "items": "Oggetti",
- "Selected": "Selezionato",
- "Screen Capture": "Cattura schermo",
- "Mouse Control": "Controllo del mouse",
- "File Transfer": "Trasferimento di file",
- "Audio Capture": "Acquisizione audio",
- "File Connection": "Connessione file",
- "Screen Connection": "Connessione schermo",
- "Do you accept?": "Accetti?",
- "Open System Setting": "Apri Impostazioni di sistema",
- "How to get Android input permission?": "Come ottenere l'autorizzazione di input Android?",
- "android_input_permission_tip1": "Dopo aver ottenuto l'autorizzazione di input, il dispositivo remoto può controllare questo dispositivo Android tramite il mouse",
- "android_input_permission_tip2": "Vai alla pagina delle impostazioni di sistema successiva, trova e accedi a [Servizi installati], attiva il servizio [RustDesk Input]",
- "android_new_connection_tip": "È stata ricevuta una nuova richiesta di controllo, desidera controllare il dispositivo corrente.",
- "android_service_will_start_tip": "L'attivazione di Cattura schermo avvierà automaticamente il servizio, consentendo ad altri dispositivi di richiedere una connessione da questo dispositivo.",
- "android_stop_service_tip": "La chiusura del servizio chiuderà automaticamente tutte le connessioni stabilite.",
- "android_version_audio_tip": "L'attuale versione di Android non supporta l'acquisizione audio, esegui l'upgrade ad Android 10 o versioni successive.",
- "android_start_service_tip": "Toccare [Avvia servizio] o APRI l'autorizzazione [Cattura schermo] per avviare il servizio di condivisione dello schermo.",
- "Account": "Account",
- },
- tw: {
- "Status": "狀態",
- "Your Desktop": "您的桌面",
- "desk_tip": "您可以透過此 ID 及密碼存取您的桌面",
- "Password": "密碼",
- "Ready": "就緒",
- "Established": "已建立",
- "connecting_status": "正在連接至 RustDesk 網路...",
- "Enable Service": "啟用服務",
- "Start Service": "啟動服務",
- "Service is running": "服務正在運行",
- "Service is not running": "服務尚未執行",
- "not_ready_status": "尚未就緒。請檢查您的網路連線",
- "Control Remote Desktop": "控制遠端桌面",
- "Transfer File": "傳輸檔案",
- "Connect": "連接",
- "Recent Sessions": "近期的工作階段",
- "Address Book": "通訊錄",
- "Confirmation": "確認",
- "TCP Tunneling": "TCP 通道",
- "Remove": "移除",
- "Refresh random password": "重新產生隨機密碼",
- "Set your own password": "自行設置密碼",
- "Enable Keyboard/Mouse": "啟用鍵盤/滑鼠",
- "Enable Clipboard": "啟用剪貼簿",
- "Enable File Transfer": "啟用檔案傳輸",
- "Enable TCP Tunneling": "啟用 TCP 通道",
- "IP Whitelisting": "IP 白名單",
- "ID/Relay Server": "ID/轉送伺服器",
- "Stop service": "停止服務",
- "Change ID": "更改 ID",
- "Website": "網站",
- "About": "關於",
- "Mute": "靜音",
- "Audio Input": "音訊輸入",
- "ID Server": "ID 伺服器",
- "Relay Server": "轉送伺服器",
- "API Server": "API 伺服器",
- "invalid_http": "開頭必須為 http:// 或 https://",
- "Invalid IP": "IP 無效",
- "id_change_tip": "僅能使用以下字元:a-z、A-Z、0-9、_ (底線)。首字元必須為 a-z 或 A-Z。長度介於 6 到 16 之間。",
- "Invalid format": "格式無效",
- "This function is turned off by the server": "此功能已被伺服器停用",
- "Not available": "無法使用",
- "Too frequent": "修改過於頻繁,請稍後再試。",
- "Cancel": "取消",
- "Skip": "跳過",
- "Close": "關閉",
- "Retry": "重試",
- "OK": "確定",
- "Password Required": "需要密碼",
- "Please enter your password": "請輸入您的密碼",
- "Remember password": "記住密碼",
- "Wrong Password": "密碼錯誤",
- "Do you want to enter again?": "您要重新輸入嗎?",
- "Connection Error": "連線錯誤",
- "Error": "錯誤",
- "Reset by the peer": "對方重置了連線",
- "Connecting...": "正在連接...",
- "Connection in progress. Please wait.": "正在連接,請稍候。",
- "Please try 1 minute later": "請於 1 分鐘後再試",
- "Login Error": "登入錯誤",
- "Successful": "成功",
- "Connected, waiting for image...": "已連線,等待畫面傳輸...",
- "Name": "名稱",
- "Type": "類型",
- "Modified": "修改時間",
- "Size": "大小",
- "Show Hidden Files": "顯示隱藏檔案",
- "Receive": "接收",
- "Send": "傳送",
- "Refresh File": "刷新文件",
- "Local": "本地",
- "Remote": "遠端",
- "Remote Computer": "遠端電腦",
- "Local Computer": "本地電腦",
- "Confirm Delete": "確認刪除",
- "Delete": "刪除",
- "Properties": "屬性",
- "Multi Select": "多選",
- "Empty Directory": "空文件夾",
- "Not an empty directory": "不是一個空文件夾",
- "Are you sure you want to delete this file?": "您確定要刪除此檔案嗎?",
- "Are you sure you want to delete this empty directory?": "您確定要刪除此空文件夾?",
- "Are you sure you want to delete the file of this directory?": "您確定要刪除文件夾下的文件?",
- "Do this for all conflicts": "套用到其他衝突",
- "This is irreversible!": "此操作不可逆!",
- "Deleting": "正在刪除",
- "files": "檔案",
- "Waiting": "正在等候...",
- "Finished": "已完成",
- "Speed": "速度",
- "Custom Image Quality": "自訂圖片品質",
- "Privacy mode": "隱私模式",
- "Block user input": "封鎖使用者輸入",
- "Unblock user input": "取消封鎖使用者輸入",
- "Adjust Window": "調整視窗",
- "Original": "原始",
- "Shrink": "縮減",
- "Stretch": "延展",
- "Good image quality": "畫面品質良好",
- "Balanced": "平衡",
- "Optimize reaction time": "回應速度最佳化",
- "Custom": "自訂",
- "Show remote cursor": "顯示遠端游標",
- "Disable clipboard": "停用剪貼簿",
- "Lock after session end": "工作階段結束後鎖定電腦",
- "Insert": "插入",
- "Insert Lock": "鎖定遠端電腦",
- "Refresh": "重新載入",
- "ID does not exist": "ID 不存在",
- "Failed to connect to rendezvous server": "無法連接至 rendezvous 伺服器",
- "Please try later": "請稍候再試",
- "Remote desktop is offline": "遠端電腦離線",
- "Key mismatch": "金鑰不符",
- "Timeout": "逾時",
- "Failed to connect to relay server": "無法連接至轉送伺服器",
- "Failed to connect via rendezvous server": "無法透過 rendezvous 伺服器連接",
- "Failed to connect via relay server": "無法透過轉送伺服器連接",
- "Failed to make direct connection to remote desktop": "無法直接連線至遠端電腦",
- "Set Password": "設置密碼",
- "OS Password": "作業系統密碼",
- "install_tip": "UAC 會導致 RustDesk 在某些情況下無法正常以遠端電腦運作。若要避開 UAC,請點擊下方按鈕將 RustDesk 安裝到系統中。",
- "Click to upgrade": "點擊以升級",
- "Click to download": "點擊以下載",
- "Click to update": "點擊以更新",
- "Configuration Permissions": "設定權限",
- "Configure": "設定",
- "config_acc": "您需要授予 RustDesk 「協助工具」 權限才能遠端存取電腦。",
- "config_screen": "您需要授予 RustDesk 「畫面錄製」 權限才能遠端存取電腦。",
- "Installing ...": "正在安裝...",
- "Install": "安裝",
- "Installation": "安裝",
- "Installation Path": "安裝路徑",
- "Create start menu shortcuts": "建立開始選單捷徑",
- "Create desktop icon": "建立桌面圖示",
- "agreement_tip": "",
- "Accept and Install": "接受並安裝",
- "End-user license agreement": "使用者授權合約",
- "Generating ...": "正在產生 ...",
- "Your installation is lower version.": "您的安裝版本過舊。",
- "not_close_tcp_tip": "使用通道時請不要關閉此視窗",
- "Listening ...": "正在等待通道連接...",
- "Remote Host": "遠端主機",
- "Remote Port": "遠端連接埠",
- "Action": "操作",
- "Add": "新增",
- "Local Port": "本機連接埠",
- "setup_server_tip": "若您需要更快的連接速度,可以選擇自行建立伺服器",
- "Too short, at least 6 characters.": "過短,至少需 6 個字元。",
- "The confirmation is not identical.": "兩次輸入不相符",
- "Permissions": "權限",
- "Accept": "接受",
- "Dismiss": "關閉",
- "Disconnect": "斷開連線",
- "Allow using keyboard and mouse": "允許使用鍵盤和滑鼠",
- "Allow using clipboard": "允許使用剪貼簿",
- "Allow hearing sound": "允許分享音訊",
- "Allow file transfer": "允許文件傳輸",
- "File transfer": "文件傳輸",
- "Connected": "已連接",
- "Direct and encrypted connection": "加密直接連線",
- "Relayed and encrypted connection": "加密轉送連線",
- "Direct and unencrypted connection": "未加密直接連線",
- "Relayed and unencrypted connection": "未加密轉送連線",
- "Enter Remote ID": "輸入遠端 ID",
- "Enter your password": "輸入您的密碼",
- "Logging in...": "正在登入...",
- "Enable RDP session sharing": "啟用 RDP 工作階段共享",
- "Auto Login": "自動登入 (鎖定將在設定關閉後套用)",
- "Enable Direct IP Access": "允許 IP 直接存取",
- "Rename": "重新命名",
- "Space": "空白",
- "Create Desktop Shortcut": "建立桌面捷徑",
- "Change Path": "更改路徑",
- "Create Folder": "建立資料夾",
- "Please enter the folder name": "請輸入資料夾名稱",
- "Fix it": "修復",
- "Warning": "警告",
- "Login screen using Wayland is not supported": "不支援使用 Wayland 的登入畫面",
- "Reboot required": "需要重新啟動",
- "Unsupported display server ": "不支援顯示伺服器",
- "x11 expected": "預期 x11",
- "Port": "連接埠",
- "Settings": "設定",
- "Username": " 使用者名稱",
- "Invalid port": "連接埠無效",
- "Closed manually by the peer": "由對方手動關閉",
- "Enable remote configuration modification": "啟用遠端更改設定",
- "Run without install": "跳過安裝直接執行",
- "Always connected via relay": "一律透過轉送連線",
- "Always connect via relay": "一律透過轉送連線",
- "whitelist_tip": "只有白名單中的 IP 可以存取",
- "Login": "登入",
- "Logout": "登出",
- "Tags": "標籤",
- "Search ID": "搜尋 ID",
- "Current Wayland display server is not supported": "目前不支援 Wayland 顯示伺服器",
- "whitelist_sep": "使用逗號、分號、空白,或是換行來分隔",
- "Add ID": "新增 ID",
- "Add Tag": "新增標籤",
- "Unselect all tags": "取消選取所有標籤",
- "Network error": "網路錯誤",
- "Username missed": "缺少使用者名稱",
- "Password missed": "缺少密碼",
- "Wrong credentials": "提供的登入資訊有誤",
- "Edit Tag": "編輯標籤",
- "Unremember Password": "忘掉密碼",
- "Favorites": "收藏",
- "Add to Favorites": "加入到收藏",
- "Remove from Favorites": "從收藏中刪除",
- "Empty": "空空如也",
- "Invalid folder name": "資料夾名稱無效",
- "Socks5 Proxy": "Socks5 代理",
- "Hostname": "主機名稱",
- "Discovered": "已發現",
- "install_daemon_tip": "為了開機啟動,請安裝系統服務。",
- "Remote ID": "遠端 ID",
- "Paste": "貼上",
- "Paste here?": "貼上到這裡?",
- "Are you sure to close the connection?": "您確定要關閉連線嗎?",
- "Download new version": "下載新版本",
- "Touch mode": "觸控模式",
- "Mouse mode": "鼠標模式",
- "One-Finger Tap": "單指輕觸",
- "Left Mouse": "鼠標左鍵",
- "One-Long Tap": "單指長按",
- "Two-Finger Tap": "雙指輕觸",
- "Right Mouse": "鼠標右鍵",
- "One-Finger Move": "單指移動",
- "Double Tap & Move": "雙擊並移動",
- "Mouse Drag": "鼠標選中拖動",
- "Two-Finger vertically": "雙指垂直滑動",
- "Mouse Wheel": "鼠標滾輪",
- "Two-Finger Move": "雙指移動",
- "Canvas Move": "移動畫布",
- "Pinch to Zoom": "雙指縮放",
- "Canvas Zoom": "縮放畫布",
- "Reset canvas": "重置畫布",
- "No permission of file transfer": "無文件傳輸權限",
- "Note": "備註",
- "Connection": "連接",
- "Share Screen": "屏幕錄製",
- "CLOSE": "關閉",
- "OPEN": "開啟",
- "Chat": "聊天消息",
- "Total": "總計",
- "items": "個項目",
- "Selected": "已選擇",
- "Screen Capture": "屏幕錄製",
- "Mouse Control": "鼠標輸入",
- "File Transfer": "文件傳輸",
- "Audio Capture": "音頻錄製",
- "File Connection": "文件連接",
- "Screen Connection": "屏幕連接",
- "Do you accept?": "是否接受?",
- "Open System Setting": "打開系統設置",
- "How to get Android input permission?": "如何獲取安卓的輸入權限?",
- "android_input_permission_tip1": "獲取輸入權限後可以讓遠程設備通過鼠標控制這台安卓設備",
- "android_input_permission_tip2": "請在接下來的系統設置頁面裡,找到並進入 [已安裝的服務] 頁面,將 [RustDesk Input] 服務開啟",
- "android_new_connection_tip": "收到新的連接控制請求,對方想要控制你當前的設備",
- "android_service_will_start_tip": "開啟錄屏權限將自動開啟服務,允許其他設備向此設備請求建立連接。",
- "android_stop_service_tip": "關閉服務將自動關閉所有已建立的連接。",
- "android_version_audio_tip": "當前安卓版本不支持音頻錄製,請升級至安卓10或更高。",
- "android_start_service_tip": "點擊 [啟動服務] 或打開 [屏幕錄製] 權限開啟手機屏幕共享服務。",
- "Account": "帳戶",
- },
- en: {
- "desk_tip": "Your desktop can be accessed with this ID and password.",
- "connecting_status": "Connecting to the RustDesk network...",
- "not_ready_status": "Not ready. Please check your connection",
- "id_change_tip": "Only a-z, A-Z, 0-9 and _ (underscore) characters allowed. The first letter must be a-z, A-Z. Length between 6 and 16.",
- "install_tip": "Due to UAC, RustDesk can not work properly as the remote side in some cases. To avoid UAC, please click the button below to install RustDesk to the system.",
- "config_acc": "In order to control your Desktop remotely, you need to grant RustDesk \"Accessibility\" permissions.",
- "config_screen": "In order to access your Desktop remotely, you need to grant RustDesk \"Screen Recording\" permissions.",
- "agreement_tip": "By starting the installation, you accept the license agreement.",
- "not_close_tcp_tip": "Don't close this window while you are using the tunnel",
- "setup_server_tip": "For faster connection, please set up your own server",
- "Auto Login": "Auto Login (Only valid if you set \"Lock after session end\")",
- "whitelist_tip": "Only whitelisted IP can access me",
- "whitelist_sep": "Seperated by comma, semicolon, spaces or new line",
- "Wrong credentials": "Wrong username or password",
- "invalid_http": "must start with http:// or https://",
- "install_daemon_tip": "For starting on boot, you need to install system service.",
- "android_input_permission_tip1": "After obtaining the input permission, the remote device can control this Android device by mouse",
- "android_input_permission_tip2": "Please go to the next system settings page,find and enter [Installed Services],turn [RustDesk Input] service ON",
- "android_new_connection_tip": "New control request has been received,it want to control your current device.",
- "android_service_will_start_tip": "Turning on the Screen Capture will automatically start the service,allowing other devices to request a connection from this device.",
- "android_stop_service_tip": "Closing the service will automatically close all established connections.",
- "android_version_audio_tip": "The current Android version does not support audio capture, please upgrade to Android 10 or higher.",
- "android_start_service_tip": "Tap [Start Service] or OPEN [Screen Capture] permission to start the screen sharing service.",
- },
- fr: {
- "Status": "Statut",
- "Your Desktop": "Votre bureau",
- "desk_tip": "Votre bureau est accessible via l'identifiant et le mot de passe ci-dessous.",
- "Password": "Mot de passe",
- "Ready": "Prêt",
- "Established": "Établi",
- "connecting_status": "Connexion au réseau RustDesk...",
- "Enable Service": "Autoriser le service",
- "Start Service": "Démarrer le service",
- "Service is running": "Le service est en cours d'exécution",
- "Service is not running": "Le service ne fonctionne pas",
- "not_ready_status": "Pas prêt, veuillez vérifier la connexion réseau",
- "Control Remote Desktop": "Contrôler le bureau à distance",
- "Transfer File": "Transférer le fichier",
- "Connect": "Connecter",
- "Recent Sessions": "Sessions récentes",
- "Address Book": "Carnet d'adresses",
- "Confirmation": "Confirmation",
- "TCP Tunneling": "Tunneling TCP",
- "Remove": "Supprimer",
- "Refresh random password": "Actualiser le mot de passe aléatoire",
- "Set your own password": "Définir votre propre mot de passe",
- "Enable Keyboard/Mouse": "Activer le contrôle clavier/souris",
- "Enable Clipboard": "Activer la synchronisation du presse-papier",
- "Enable File Transfer": "Activer le transfert de fichiers",
- "Enable TCP Tunneling": "Activer le tunneling TCP",
- "IP Whitelisting": "Liste blanche IP",
- "ID/Relay Server": "ID/Serveur Relais",
- "Stop service": "Arrêter le service",
- "Change ID": "Changer d'ID",
- "Website": "Site Web",
- "About": "À propos de",
- "Mute": "Muet",
- "Audio Input": "Entrée audio",
- "ID Server": "Serveur ID",
- "Relay Server": "Serveur relais",
- "API Server": "Serveur API",
- "invalid_http": "Doit commencer par http:// ou https://",
- "Invalid IP": "IP invalide",
- "id_change_tip": "Seules les lettres a-z, A-Z, 0-9, _ (trait de soulignement) peuvent être utilisées. La première lettre doit être a-z, A-Z. La longueur doit être comprise entre 6 et 16.",
- "Invalid format": "Format invalide",
- "This function is turned off by the server": "Cette fonction est désactivée par le serveur",
- "Not available": "Indisponible",
- "Too frequent": "Modifié trop fréquemment, veuillez réessayer plus tard",
- "Cancel": "Annuler",
- "Skip": "Ignorer",
- "Close": "Fermer",
- "Retry": "Réessayer",
- "OK": "Confirmer",
- "Password Required": "Mot de passe requis",
- "Please enter your password": "Veuillez saisir votre mot de passe",
- "Remember password": "Mémoriser le mot de passe",
- "Wrong Password": "Mauvais mot de passe",
- "Do you want to enter again?": "Voulez-vous participer à nouveau ?",
- "Connection Error": "Erreur de connexion",
- "Error": "Erreur",
- "Reset by the peer": "La connexion a été fermée par le pair",
- "Connecting...": "Connexion...",
- "Connection in progress. Please wait.": "Connexion en cours. Veuillez patienter.",
- "Please try 1 minute later": "Réessayez dans une minute",
- "Login Error": "Erreur de connexion",
- "Successful": "Succès",
- "Connected, waiting for image...": "Connecté, en attente de transmission d'image...",
- "Name": "Nom",
- "Type": "Taper",
- "Modified": "Modifié",
- "Size": "Taille",
- "Show Hidden Files": "Afficher les fichiers cachés",
- "Receive": "Accepter",
- "Send": "Envoyer",
- "Refresh File": "Actualiser le fichier",
- "Local": "Local",
- "Remote": "Distant",
- "Remote Computer": "Ordinateur distant",
- "Local Computer": "Ordinateur local",
- "Confirm Delete": "Confirmer la suppression",
- "Delete": "Supprimer",
- "Properties": "Propriétés",
- "Multi Select": "Choix multiple",
- "Empty Directory": "Répertoire vide",
- "Not an empty directory": "Pas un répertoire vide",
- "Are you sure you want to delete this file?": "Voulez-vous vraiment supprimer ce fichier?",
- "Are you sure you want to delete this empty directory?": "Voulez-vous vraiment supprimer ce répertoire vide ?",
- "Are you sure you want to delete the file of this directory?": "Voulez-vous vraiment supprimer le fichier de ce répertoire ?",
- "Do this for all conflicts": "Appliquer à d'autres conflits",
- "This is irreversible!": "C'est irréversible !",
- "Deleting": "Suppression",
- "files": "fichier",
- "Waiting": "En attente...",
- "Finished": "Terminé",
- "Speed": "Vitesse",
- "Custom Image Quality": "Définir la qualité d'image",
- "Privacy mode": "Mode privé",
- "Block user input": "Bloquer la saisie de l'utilisateur",
- "Unblock user input": "Débloquer l'entrée de l'utilisateur",
- "Adjust Window": "Ajuster la fenêtre",
- "Original": "Ratio d'origine",
- "Shrink": "Rétrécir",
- "Stretch": "Étirer",
- "Good image quality": "Bonne qualité d'image",
- "Balanced": "Qualité d'image normale",
- "Optimize reaction time": "Optimiser le temps de réaction",
- "Custom": "Qualité d'image personnalisée",
- "Show remote cursor": "Afficher le curseur distant",
- "Disable clipboard": "Désactiver le presse-papier",
- "Lock after session end": "Verrouiller l'ordinateur distant après la déconnexion",
- "Insert": "Insérer",
- "Insert Lock": "Verrouiller l'ordinateur distant",
- "Refresh": "Rafraîchir l'écran",
- "ID does not exist": "L'ID n'existe pas",
- "Failed to connect to rendezvous server": "Échec de la connexion au serveur rendezvous",
- "Please try later": "Veuillez essayer plus tard",
- "Remote desktop is offline": "Le bureau à distance est hors ligne",
- "Key mismatch": "Discordance de clés",
- "Timeout": "Connexion expirée",
- "Failed to connect to relay server": "Échec de la connexion au serveur relais",
- "Failed to connect via rendezvous server": "Échec de l'établissement d'une connexion via le serveur rendezvous",
- "Failed to connect via relay server": "Impossible d'établir une connexion via le serveur relais",
- "Failed to make direct connection to remote desktop": "Impossible d'établir une connexion directe",
- "Set Password": "Définir le mot de passe",
- "OS Password": "Mot de passe du système d'exploitation",
- "install_tip": "Vous utilisez une version non installée. En raison des restrictions UAC, en tant que terminal contrôlé, dans certains cas, il ne sera pas en mesure de contrôler la souris et le clavier ou d'enregistrer l'écran. Veuillez cliquer sur le bouton ci-dessous pour installer RustDesk au système pour éviter la question ci-dessus.",
- "Click to upgrade": "Cliquez pour mettre à niveau",
- "Click to download": "Cliquez pour télécharger",
- "Click to update": "Cliquez pour mettre à jour",
- "Configuration Permissions": "Autorisations de configuration",
- "Configure": "Configurer",
- "config_acc": "Afin de pouvoir contrôler votre bureau à distance, veuillez donner l'autorisation \"accessibilité\" à RustDesk.",
- "config_screen": "Afin de pouvoir accéder à votre bureau à distance, veuillez donner à RustDesk l'autorisation \"enregistrement d'écran\".",
- "Installing ...": "Installation...",
- "Install": "Installer",
- "Installation": "Installation",
- "Installation Path": "Chemin d'installation",
- "Create start menu shortcuts": "Créer des raccourcis dans le menu démarrer",
- "Create desktop icon": "Créer une icône sur le bureau",
- "agreement_tip": "Démarrer l'installation signifie accepter le contrat de licence.",
- "Accept and Install": "Accepter et installer",
- "End-user license agreement": "Contrat d'utilisateur",
- "Generating ...": "Génération...",
- "Your installation is lower version.": "La version que vous avez installée est inférieure à la version en cours d'exécution.",
- "not_close_tcp_tip": "Veuillez ne pas fermer cette fenêtre lors de l'utilisation du tunnel",
- "Listening ...": "En attente de connexion tunnel...",
- "Remote Host": "Hôte distant",
- "Remote Port": "Port distant",
- "Action": "Action",
- "Add": "Ajouter",
- "Local Port": "Port local",
- "setup_server_tip": "Si vous avez besoin d'une vitesse de connexion plus rapide, vous pouvez choisir de créer votre propre serveur",
- "Too short, at least 6 characters.": "Trop court, au moins 6 caractères.",
- "The confirmation is not identical.": "Les deux entrées ne correspondent pas",
- "Permissions": "Autorisations",
- "Accept": "Accepter",
- "Dismiss": "Rejeter",
- "Disconnect": "Déconnecter",
- "Allow using keyboard and mouse": "Autoriser l'utilisation du clavier et de la souris",
- "Allow using clipboard": "Autoriser l'utilisation du presse-papier",
- "Allow hearing sound": "Autoriser l'audition du son",
- "Allow file transfer": "Autoriser le transfert de fichiers",
- "File transfer": "Transfert de fichiers",
- "Connected": "Connecté",
- "Direct and encrypted connection": "Connexion directe chiffrée",
- "Relayed and encrypted connection": "Connexion relais chiffrée",
- "Direct and unencrypted connection": "Connexion directe non chiffrée",
- "Relayed and unencrypted connection": "Connexion relais non chiffrée",
- "Enter Remote ID": "Entrez l'ID de l'appareil à distance",
- "Enter your password": "Entrez votre mot de passe",
- "Logging in...": "Se connecter...",
- "Enable RDP session sharing": "Activer le partage de session RDP",
- "Auto Login": "Connexion automatique (le verrouillage ne sera effectif qu'après la désactivation du premier paramètre)",
- "Enable Direct IP Access": "Autoriser l'accès direct par IP",
- "Rename": "Renommer",
- "Space": "Espace",
- "Create Desktop Shortcut": "Créer un raccourci sur le bureau",
- "Change Path": "Changer de chemin",
- "Create Folder": "Créer un dossier",
- "Please enter the folder name": "Veuillez saisir le nom du dossier",
- "Fix it": "Réparez-le",
- "Warning": "Avertissement",
- "Login screen using Wayland is not supported": "L'écran de connexion utilisant Wayland n'est pas pris en charge",
- "Reboot required": "Redémarrage pour prendre effet",
- "Unsupported display server ": "Le serveur d'affichage actuel n'est pas pris en charge",
- "x11 expected": "Veuillez passer à x11",
- "Port": "Port",
- "Settings": "Paramètres",
- "Username": " Nom d'utilisateur",
- "Invalid port": "Port invalide",
- "Closed manually by the peer": "Fermé manuellement par le pair",
- "Enable remote configuration modification": "Autoriser la modification de la configuration à distance",
- "Run without install": "Exécuter sans installer",
- "Always connected via relay": "Forcer la connexion relais",
- "Always connect via relay": "Forcer la connexion relais",
- "whitelist_tip": "Seul l'IP dans la liste blanche peut accéder à mon appareil",
- "Login": "Connexion",
- "Logout": "Déconnexion",
- "Tags": "Étiqueter",
- "Search ID": "Rechercher un ID",
- "Current Wayland display server is not supported": "Le serveur d'affichage Wayland n'est pas pris en charge",
- "whitelist_sep": "Vous pouvez utiliser une virgule, un point-virgule, un espace ou une nouvelle ligne comme séparateur",
- "Add ID": "Ajouter un ID",
- "Add Tag": "Ajouter une balise",
- "Unselect all tags": "Désélectionner toutes les balises",
- "Network error": "Erreur réseau",
- "Username missed": "Nom d'utilisateur manqué",
- "Password missed": "Mot de passe manqué",
- "Wrong credentials": "Identifiant ou mot de passe erroné",
- "Edit Tag": "Modifier la balise",
- "Unremember Password": "Mot de passe oublié",
- "Favorites": "Favoris",
- "Add to Favorites": "Ajouter aux Favoris",
- "Remove from Favorites": "Retirer des favoris",
- "Empty": "Vide",
- "Invalid folder name": "Nom de dossier invalide",
- "Socks5 Proxy": "Socks5 Agents",
- "Hostname": "Nom d'hôte",
- "Discovered": "Découvert",
- "install_daemon_tip": "Pour démarrer au démarrage, vous devez installer le service système.",
- "Remote ID": "ID de l'appareil à distance",
- "Paste": "Coller",
- "Paste here?": "Coller ici ?",
- "Are you sure to close the connection?": "Êtes-vous sûr de fermer la connexion?",
- "Download new version": "Télécharger la nouvelle version",
- "Touch mode": "Mode tactile",
- "Mouse mode": "Mode souris",
- "One-Finger Tap": "Tapez d'un doigt",
- "Left Mouse": "Souris gauche",
- "One-Long Tap": "Un long robinet",
- "Two-Finger Tap": "Tapez à deux doigts",
- "Right Mouse": "Bouton droit de la souris",
- "One-Finger Move": "Mouvement à un doigt",
- "Double Tap & Move": "Appuyez deux fois et déplacez",
- "Mouse Drag": "Glissement de la souris",
- "Two-Finger vertically": "Deux doigts verticalement",
- "Mouse Wheel": "Roulette de la souris",
- "Two-Finger Move": "Mouvement à deux doigts",
- "Canvas Move": "Déplacement de la toile",
- "Pinch to Zoom": "Pincer pour zoomer",
- "Canvas Zoom": "Zoom sur la toile",
- "Reset canvas": "Réinitialiser le canevas",
- "No permission of file transfer": "Aucune autorisation de transfert de fichiers",
- "Note": "Noter",
- "Connection": "Connexion",
- "Share Screen": "Partager l'écran",
- "CLOSE": "FERMER",
- "OPEN": "OUVRIR",
- "Chat": "Discuter",
- "Total": "Total",
- "items": "éléments",
- "Selected": "Choisi",
- "Screen Capture": "Capture d'écran",
- "Mouse Control": "Contrôle de la souris",
- "File Transfer": "Transfert de fichier",
- "Audio Capture": "Capture audio",
- "File Connection": "Connexion de fichier",
- "Screen Connection": "Connexion de l'écran",
- "Do you accept?": "Do you accept?",
- "Open System Setting": "Ouvrir les paramètres système",
- "How to get Android input permission?": "Comment obtenir l'autorisation d'entrée Android ?",
- "android_input_permission_tip1": "Après avoir obtenu l'autorisation d'entrée, l'appareil distant peut contrôler cet appareil Android avec la souris",
- "android_input_permission_tip2": "Veuillez accéder à la page suivante des paramètres système, recherchez et entrez [Services installés], activez le service [RustDesk Input]",
- "android_new_connection_tip": "Une nouvelle demande de contrôle a été reçue, elle souhaite contrôler votre appareil actuel.",
- "android_service_will_start_tip": "L'activation de la capture d'écran démarrera automatiquement le service, permettant à d'autres appareils de demander une connexion à partir de cet appareil.",
- "android_stop_service_tip": "La fermeture du service fermera automatiquement toutes les connexions établies.",
- "android_version_audio_tip": "La version actuelle d'Android ne prend pas en charge la capture audio, veuillez passer à Android 10 ou supérieur.",
- "android_start_service_tip": "Appuyez sur [Démarrer le service] ou sur l'autorisation OUVRIR [Capture d'écran] pour démarrer le service de partage d'écran.",
- "Account": "Compte",
- },
-}
-
-export function checkIfRetry(msgtype: string, title: string, text: string) {
- return msgtype == "error"
-&& title == "Connection Error"
-&& text.toLowerCase().indexOf("offline") < 0
-&& text.toLowerCase().indexOf("exist") < 0
-&& text.toLowerCase().indexOf("handshake") < 0
-&& text.toLowerCase().indexOf("failed") < 0
-&& text.toLowerCase().indexOf("resolve") < 0
-&& text.toLowerCase().indexOf("mismatch") < 0
-&& text.toLowerCase().indexOf("manually") < 0
-&& text.toLowerCase().indexOf("not allowed") < 0
-
-;}
-
-export const KEY_MAP: any = {
- "VK_A": "a",
- "VK_B": "b",
- "VK_C": "c",
- "VK_D": "d",
- "VK_E": "e",
- "VK_F": "f",
- "VK_G": "g",
- "VK_H": "h",
- "VK_I": "i",
- "VK_J": "j",
- "VK_K": "k",
- "VK_L": "l",
- "VK_M": "m",
- "VK_N": "n",
- "VK_O": "o",
- "VK_P": "p",
- "VK_Q": "q",
- "VK_R": "r",
- "VK_S": "s",
- "VK_T": "t",
- "VK_U": "u",
- "VK_V": "v",
- "VK_W": "w",
- "VK_X": "x",
- "VK_Y": "y",
- "VK_Z": "z",
- "VK_0": "0",
- "VK_1": "1",
- "VK_2": "2",
- "VK_3": "3",
- "VK_4": "4",
- "VK_5": "5",
- "VK_6": "6",
- "VK_7": "7",
- "VK_8": "8",
- "VK_9": "9",
- "VK_COMMA": ",",
- "VK_SLASH": "/",
- "VK_SEMICOLON": ";",
- "VK_QUOTE": "\'",
- "VK_LBRACKET": "[",
- "VK_RBRACKET": "]",
- "VK_BACKSLASH": "\\",
- "VK_MINUS": "-",
- "VK_PLUS": "=",
- "VK_DIVIDE": "Divide",
- "VK_MULTIPLY": "Multiply",
- "VK_SUBTRACT": "Subtract",
- "VK_ADD": "Add",
- "VK_DECIMAL": "Decimal",
- "VK_F1": "F1",
- "VK_F2": "F2",
- "VK_F3": "F3",
- "VK_F4": "F4",
- "VK_F5": "F5",
- "VK_F6": "F6",
- "VK_F7": "F7",
- "VK_F8": "F8",
- "VK_F9": "F9",
- "VK_F10": "F10",
- "VK_F11": "F11",
- "VK_F12": "F12",
- "VK_ENTER": "Return",
- "VK_CANCEL": "Cancel",
- "VK_BACK": "Backspace",
- "VK_TAB": "Tab",
- "VK_CLEAR": "Clear",
- "VK_RETURN": "Return",
- "VK_SHIFT": "Shift",
- "VK_CONTROL": "Control",
- "VK_MENU": "Alt",
- "VK_PAUSE": "Pause",
- "VK_CAPITAL": "CapsLock",
- "VK_KANA": "Kana",
- "VK_HANGUL": "Hangul",
- "VK_JUNJA": "Junja",
- "VK_FINAL": "Final",
- "VK_HANJA": "Hanja",
- "VK_KANJI": "Kanji",
- "VK_ESCAPE": "Escape",
- "VK_CONVERT": "Convert",
- "VK_SPACE": "Space",
- "VK_PRIOR": "PageUp",
- "VK_NEXT": "PageDown",
- "VK_END": "End",
- "VK_HOME": "Home",
- "VK_LEFT": "LeftArrow",
- "VK_UP": "UpArrow",
- "VK_RIGHT": "RightArrow",
- "VK_DOWN": "DownArrow",
- "VK_SELECT": "Select",
- "VK_PRINT": "Print",
- "VK_EXECUTE": "Execute",
- "VK_SNAPSHOT": "Snapshot",
- "VK_INSERT": "Insert",
- "VK_DELETE": "Delete",
- "VK_HELP": "Help",
- "VK_SLEEP": "Sleep",
- "VK_SEPARATOR": "Separator",
- "VK_NUMPAD0": "Numpad0",
- "VK_NUMPAD1": "Numpad1",
- "VK_NUMPAD2": "Numpad2",
- "VK_NUMPAD3": "Numpad3",
- "VK_NUMPAD4": "Numpad4",
- "VK_NUMPAD5": "Numpad5",
- "VK_NUMPAD6": "Numpad6",
- "VK_NUMPAD7": "Numpad7",
- "VK_NUMPAD8": "Numpad8",
- "VK_NUMPAD9": "Numpad9",
- "Apps": "Apps",
- "Meta": "Meta",
- "RAlt": "RAlt",
- "RWin": "RWin",
- "RControl": "RControl",
- "RShift": "RShift",
- "CTRL_ALT_DEL": "CtrlAltDel",
- "LOCK_SCREEN": "LockScreen",
-
-}
-export const version = "1.1.9"
-
diff --git a/src/message.ts b/src/message.ts
deleted file mode 100644
index 17cb09931..000000000
--- a/src/message.ts
+++ /dev/null
@@ -1,6198 +0,0 @@
-/* eslint-disable */
-import Long from "long";
-import _m0 from "protobufjs/minimal";
-
-export const protobufPackage = "hbb";
-
-export enum ControlKey {
- Unknown = 0,
- Alt = 1,
- Backspace = 2,
- CapsLock = 3,
- Control = 4,
- Delete = 5,
- DownArrow = 6,
- End = 7,
- Escape = 8,
- F1 = 9,
- F10 = 10,
- F11 = 11,
- F12 = 12,
- F2 = 13,
- F3 = 14,
- F4 = 15,
- F5 = 16,
- F6 = 17,
- F7 = 18,
- F8 = 19,
- F9 = 20,
- Home = 21,
- LeftArrow = 22,
- /** Meta - / meta key (also known as "windows"; "super"; and "command") */
- Meta = 23,
- /** Option - / option key on macOS (alt key on Linux and Windows) */
- Option = 24,
- PageDown = 25,
- PageUp = 26,
- Return = 27,
- RightArrow = 28,
- Shift = 29,
- Space = 30,
- Tab = 31,
- UpArrow = 32,
- Numpad0 = 33,
- Numpad1 = 34,
- Numpad2 = 35,
- Numpad3 = 36,
- Numpad4 = 37,
- Numpad5 = 38,
- Numpad6 = 39,
- Numpad7 = 40,
- Numpad8 = 41,
- Numpad9 = 42,
- Cancel = 43,
- Clear = 44,
- /** Menu - deprecated, use Alt instead */
- Menu = 45,
- Pause = 46,
- Kana = 47,
- Hangul = 48,
- Junja = 49,
- Final = 50,
- Hanja = 51,
- Kanji = 52,
- Convert = 53,
- Select = 54,
- Print = 55,
- Execute = 56,
- Snapshot = 57,
- Insert = 58,
- Help = 59,
- Sleep = 60,
- Separator = 61,
- Scroll = 62,
- NumLock = 63,
- RWin = 64,
- Apps = 65,
- Multiply = 66,
- Add = 67,
- Subtract = 68,
- Decimal = 69,
- Divide = 70,
- Equals = 71,
- NumpadEnter = 72,
- RShift = 73,
- RControl = 74,
- RAlt = 75,
- CtrlAltDel = 100,
- LockScreen = 101,
- UNRECOGNIZED = -1,
-}
-
-export function controlKeyFromJSON(object: any): ControlKey {
- switch (object) {
- case 0:
- case "Unknown":
- return ControlKey.Unknown;
- case 1:
- case "Alt":
- return ControlKey.Alt;
- case 2:
- case "Backspace":
- return ControlKey.Backspace;
- case 3:
- case "CapsLock":
- return ControlKey.CapsLock;
- case 4:
- case "Control":
- return ControlKey.Control;
- case 5:
- case "Delete":
- return ControlKey.Delete;
- case 6:
- case "DownArrow":
- return ControlKey.DownArrow;
- case 7:
- case "End":
- return ControlKey.End;
- case 8:
- case "Escape":
- return ControlKey.Escape;
- case 9:
- case "F1":
- return ControlKey.F1;
- case 10:
- case "F10":
- return ControlKey.F10;
- case 11:
- case "F11":
- return ControlKey.F11;
- case 12:
- case "F12":
- return ControlKey.F12;
- case 13:
- case "F2":
- return ControlKey.F2;
- case 14:
- case "F3":
- return ControlKey.F3;
- case 15:
- case "F4":
- return ControlKey.F4;
- case 16:
- case "F5":
- return ControlKey.F5;
- case 17:
- case "F6":
- return ControlKey.F6;
- case 18:
- case "F7":
- return ControlKey.F7;
- case 19:
- case "F8":
- return ControlKey.F8;
- case 20:
- case "F9":
- return ControlKey.F9;
- case 21:
- case "Home":
- return ControlKey.Home;
- case 22:
- case "LeftArrow":
- return ControlKey.LeftArrow;
- case 23:
- case "Meta":
- return ControlKey.Meta;
- case 24:
- case "Option":
- return ControlKey.Option;
- case 25:
- case "PageDown":
- return ControlKey.PageDown;
- case 26:
- case "PageUp":
- return ControlKey.PageUp;
- case 27:
- case "Return":
- return ControlKey.Return;
- case 28:
- case "RightArrow":
- return ControlKey.RightArrow;
- case 29:
- case "Shift":
- return ControlKey.Shift;
- case 30:
- case "Space":
- return ControlKey.Space;
- case 31:
- case "Tab":
- return ControlKey.Tab;
- case 32:
- case "UpArrow":
- return ControlKey.UpArrow;
- case 33:
- case "Numpad0":
- return ControlKey.Numpad0;
- case 34:
- case "Numpad1":
- return ControlKey.Numpad1;
- case 35:
- case "Numpad2":
- return ControlKey.Numpad2;
- case 36:
- case "Numpad3":
- return ControlKey.Numpad3;
- case 37:
- case "Numpad4":
- return ControlKey.Numpad4;
- case 38:
- case "Numpad5":
- return ControlKey.Numpad5;
- case 39:
- case "Numpad6":
- return ControlKey.Numpad6;
- case 40:
- case "Numpad7":
- return ControlKey.Numpad7;
- case 41:
- case "Numpad8":
- return ControlKey.Numpad8;
- case 42:
- case "Numpad9":
- return ControlKey.Numpad9;
- case 43:
- case "Cancel":
- return ControlKey.Cancel;
- case 44:
- case "Clear":
- return ControlKey.Clear;
- case 45:
- case "Menu":
- return ControlKey.Menu;
- case 46:
- case "Pause":
- return ControlKey.Pause;
- case 47:
- case "Kana":
- return ControlKey.Kana;
- case 48:
- case "Hangul":
- return ControlKey.Hangul;
- case 49:
- case "Junja":
- return ControlKey.Junja;
- case 50:
- case "Final":
- return ControlKey.Final;
- case 51:
- case "Hanja":
- return ControlKey.Hanja;
- case 52:
- case "Kanji":
- return ControlKey.Kanji;
- case 53:
- case "Convert":
- return ControlKey.Convert;
- case 54:
- case "Select":
- return ControlKey.Select;
- case 55:
- case "Print":
- return ControlKey.Print;
- case 56:
- case "Execute":
- return ControlKey.Execute;
- case 57:
- case "Snapshot":
- return ControlKey.Snapshot;
- case 58:
- case "Insert":
- return ControlKey.Insert;
- case 59:
- case "Help":
- return ControlKey.Help;
- case 60:
- case "Sleep":
- return ControlKey.Sleep;
- case 61:
- case "Separator":
- return ControlKey.Separator;
- case 62:
- case "Scroll":
- return ControlKey.Scroll;
- case 63:
- case "NumLock":
- return ControlKey.NumLock;
- case 64:
- case "RWin":
- return ControlKey.RWin;
- case 65:
- case "Apps":
- return ControlKey.Apps;
- case 66:
- case "Multiply":
- return ControlKey.Multiply;
- case 67:
- case "Add":
- return ControlKey.Add;
- case 68:
- case "Subtract":
- return ControlKey.Subtract;
- case 69:
- case "Decimal":
- return ControlKey.Decimal;
- case 70:
- case "Divide":
- return ControlKey.Divide;
- case 71:
- case "Equals":
- return ControlKey.Equals;
- case 72:
- case "NumpadEnter":
- return ControlKey.NumpadEnter;
- case 73:
- case "RShift":
- return ControlKey.RShift;
- case 74:
- case "RControl":
- return ControlKey.RControl;
- case 75:
- case "RAlt":
- return ControlKey.RAlt;
- case 100:
- case "CtrlAltDel":
- return ControlKey.CtrlAltDel;
- case 101:
- case "LockScreen":
- return ControlKey.LockScreen;
- case -1:
- case "UNRECOGNIZED":
- default:
- return ControlKey.UNRECOGNIZED;
- }
-}
-
-export function controlKeyToJSON(object: ControlKey): string {
- switch (object) {
- case ControlKey.Unknown:
- return "Unknown";
- case ControlKey.Alt:
- return "Alt";
- case ControlKey.Backspace:
- return "Backspace";
- case ControlKey.CapsLock:
- return "CapsLock";
- case ControlKey.Control:
- return "Control";
- case ControlKey.Delete:
- return "Delete";
- case ControlKey.DownArrow:
- return "DownArrow";
- case ControlKey.End:
- return "End";
- case ControlKey.Escape:
- return "Escape";
- case ControlKey.F1:
- return "F1";
- case ControlKey.F10:
- return "F10";
- case ControlKey.F11:
- return "F11";
- case ControlKey.F12:
- return "F12";
- case ControlKey.F2:
- return "F2";
- case ControlKey.F3:
- return "F3";
- case ControlKey.F4:
- return "F4";
- case ControlKey.F5:
- return "F5";
- case ControlKey.F6:
- return "F6";
- case ControlKey.F7:
- return "F7";
- case ControlKey.F8:
- return "F8";
- case ControlKey.F9:
- return "F9";
- case ControlKey.Home:
- return "Home";
- case ControlKey.LeftArrow:
- return "LeftArrow";
- case ControlKey.Meta:
- return "Meta";
- case ControlKey.Option:
- return "Option";
- case ControlKey.PageDown:
- return "PageDown";
- case ControlKey.PageUp:
- return "PageUp";
- case ControlKey.Return:
- return "Return";
- case ControlKey.RightArrow:
- return "RightArrow";
- case ControlKey.Shift:
- return "Shift";
- case ControlKey.Space:
- return "Space";
- case ControlKey.Tab:
- return "Tab";
- case ControlKey.UpArrow:
- return "UpArrow";
- case ControlKey.Numpad0:
- return "Numpad0";
- case ControlKey.Numpad1:
- return "Numpad1";
- case ControlKey.Numpad2:
- return "Numpad2";
- case ControlKey.Numpad3:
- return "Numpad3";
- case ControlKey.Numpad4:
- return "Numpad4";
- case ControlKey.Numpad5:
- return "Numpad5";
- case ControlKey.Numpad6:
- return "Numpad6";
- case ControlKey.Numpad7:
- return "Numpad7";
- case ControlKey.Numpad8:
- return "Numpad8";
- case ControlKey.Numpad9:
- return "Numpad9";
- case ControlKey.Cancel:
- return "Cancel";
- case ControlKey.Clear:
- return "Clear";
- case ControlKey.Menu:
- return "Menu";
- case ControlKey.Pause:
- return "Pause";
- case ControlKey.Kana:
- return "Kana";
- case ControlKey.Hangul:
- return "Hangul";
- case ControlKey.Junja:
- return "Junja";
- case ControlKey.Final:
- return "Final";
- case ControlKey.Hanja:
- return "Hanja";
- case ControlKey.Kanji:
- return "Kanji";
- case ControlKey.Convert:
- return "Convert";
- case ControlKey.Select:
- return "Select";
- case ControlKey.Print:
- return "Print";
- case ControlKey.Execute:
- return "Execute";
- case ControlKey.Snapshot:
- return "Snapshot";
- case ControlKey.Insert:
- return "Insert";
- case ControlKey.Help:
- return "Help";
- case ControlKey.Sleep:
- return "Sleep";
- case ControlKey.Separator:
- return "Separator";
- case ControlKey.Scroll:
- return "Scroll";
- case ControlKey.NumLock:
- return "NumLock";
- case ControlKey.RWin:
- return "RWin";
- case ControlKey.Apps:
- return "Apps";
- case ControlKey.Multiply:
- return "Multiply";
- case ControlKey.Add:
- return "Add";
- case ControlKey.Subtract:
- return "Subtract";
- case ControlKey.Decimal:
- return "Decimal";
- case ControlKey.Divide:
- return "Divide";
- case ControlKey.Equals:
- return "Equals";
- case ControlKey.NumpadEnter:
- return "NumpadEnter";
- case ControlKey.RShift:
- return "RShift";
- case ControlKey.RControl:
- return "RControl";
- case ControlKey.RAlt:
- return "RAlt";
- case ControlKey.CtrlAltDel:
- return "CtrlAltDel";
- case ControlKey.LockScreen:
- return "LockScreen";
- default:
- return "UNKNOWN";
- }
-}
-
-export enum FileType {
- Dir = 0,
- DirLink = 2,
- DirDrive = 3,
- File = 4,
- FileLink = 5,
- UNRECOGNIZED = -1,
-}
-
-export function fileTypeFromJSON(object: any): FileType {
- switch (object) {
- case 0:
- case "Dir":
- return FileType.Dir;
- case 2:
- case "DirLink":
- return FileType.DirLink;
- case 3:
- case "DirDrive":
- return FileType.DirDrive;
- case 4:
- case "File":
- return FileType.File;
- case 5:
- case "FileLink":
- return FileType.FileLink;
- case -1:
- case "UNRECOGNIZED":
- default:
- return FileType.UNRECOGNIZED;
- }
-}
-
-export function fileTypeToJSON(object: FileType): string {
- switch (object) {
- case FileType.Dir:
- return "Dir";
- case FileType.DirLink:
- return "DirLink";
- case FileType.DirDrive:
- return "DirDrive";
- case FileType.File:
- return "File";
- case FileType.FileLink:
- return "FileLink";
- default:
- return "UNKNOWN";
- }
-}
-
-export enum ImageQuality {
- NotSet = 0,
- Low = 2,
- Balanced = 3,
- Best = 4,
- UNRECOGNIZED = -1,
-}
-
-export function imageQualityFromJSON(object: any): ImageQuality {
- switch (object) {
- case 0:
- case "NotSet":
- return ImageQuality.NotSet;
- case 2:
- case "Low":
- return ImageQuality.Low;
- case 3:
- case "Balanced":
- return ImageQuality.Balanced;
- case 4:
- case "Best":
- return ImageQuality.Best;
- case -1:
- case "UNRECOGNIZED":
- default:
- return ImageQuality.UNRECOGNIZED;
- }
-}
-
-export function imageQualityToJSON(object: ImageQuality): string {
- switch (object) {
- case ImageQuality.NotSet:
- return "NotSet";
- case ImageQuality.Low:
- return "Low";
- case ImageQuality.Balanced:
- return "Balanced";
- case ImageQuality.Best:
- return "Best";
- default:
- return "UNKNOWN";
- }
-}
-
-export interface VP9 {
- data: Uint8Array;
- key: boolean;
- pts: number;
-}
-
-export interface VP9s {
- frames: VP9[];
-}
-
-export interface RGB {
- compress: boolean;
-}
-
-/** planes data send directly in binary for better use arraybuffer on web */
-export interface YUV {
- compress: boolean;
- stride: number;
-}
-
-export interface VideoFrame {
- vp9s: VP9s | undefined;
- rgb: RGB | undefined;
- yuv: YUV | undefined;
-}
-
-export interface IdPk {
- id: string;
- pk: Uint8Array;
-}
-
-export interface DisplayInfo {
- x: number;
- y: number;
- width: number;
- height: number;
- name: string;
- online: boolean;
-}
-
-export interface PortForward {
- host: string;
- port: number;
-}
-
-export interface FileTransfer {
- dir: string;
- show_hidden: boolean;
-}
-
-export interface LoginRequest {
- username: string;
- password: Uint8Array;
- my_id: string;
- my_name: string;
- option: OptionMessage | undefined;
- file_transfer: FileTransfer | undefined;
- port_forward: PortForward | undefined;
- video_ack_required: boolean;
-}
-
-export interface ChatMessage {
- text: string;
-}
-
-export interface PeerInfo {
- username: string;
- hostname: string;
- platform: string;
- displays: DisplayInfo[];
- current_display: number;
- sas_enabled: boolean;
- version: string;
- conn_id: number;
-}
-
-export interface LoginResponse {
- error: string | undefined;
- peer_info: PeerInfo | undefined;
-}
-
-export interface MouseEvent {
- mask: number;
- x: number;
- y: number;
- modifiers: ControlKey[];
-}
-
-export interface KeyEvent {
- down: boolean;
- press: boolean;
- control_key: ControlKey | undefined;
- chr: number | undefined;
- unicode: number | undefined;
- seq: string | undefined;
- modifiers: ControlKey[];
-}
-
-export interface CursorData {
- id: number;
- hotx: number;
- hoty: number;
- width: number;
- height: number;
- colors: Uint8Array;
-}
-
-export interface CursorPosition {
- x: number;
- y: number;
-}
-
-export interface Hash {
- salt: string;
- challenge: string;
-}
-
-export interface Clipboard {
- compress: boolean;
- content: Uint8Array;
-}
-
-export interface FileEntry {
- entry_type: FileType;
- name: string;
- is_hidden: boolean;
- size: number;
- modified_time: number;
-}
-
-export interface FileDirectory {
- id: number;
- path: string;
- entries: FileEntry[];
-}
-
-export interface ReadDir {
- path: string;
- include_hidden: boolean;
-}
-
-export interface ReadAllFiles {
- id: number;
- path: string;
- include_hidden: boolean;
-}
-
-export interface FileAction {
- read_dir: ReadDir | undefined;
- send: FileTransferSendRequest | undefined;
- receive: FileTransferReceiveRequest | undefined;
- create: FileDirCreate | undefined;
- remove_dir: FileRemoveDir | undefined;
- remove_file: FileRemoveFile | undefined;
- all_files: ReadAllFiles | undefined;
- cancel: FileTransferCancel | undefined;
-}
-
-export interface FileTransferCancel {
- id: number;
-}
-
-export interface FileResponse {
- dir: FileDirectory | undefined;
- block: FileTransferBlock | undefined;
- error: FileTransferError | undefined;
- done: FileTransferDone | undefined;
-}
-
-export interface FileTransferBlock {
- id: number;
- file_num: number;
- data: Uint8Array;
- compressed: boolean;
-}
-
-export interface FileTransferError {
- id: number;
- error: string;
- file_num: number;
-}
-
-export interface FileTransferSendRequest {
- id: number;
- path: string;
- include_hidden: boolean;
-}
-
-export interface FileTransferDone {
- id: number;
- file_num: number;
-}
-
-export interface FileTransferReceiveRequest {
- id: number;
- /** path written to */
- path: string;
- files: FileEntry[];
-}
-
-export interface FileRemoveDir {
- id: number;
- path: string;
- recursive: boolean;
-}
-
-export interface FileRemoveFile {
- id: number;
- path: string;
- file_num: number;
-}
-
-export interface FileDirCreate {
- id: number;
- path: string;
-}
-
-/** main logic from freeRDP */
-export interface CliprdrMonitorReady {
- conn_id: number;
-}
-
-export interface CliprdrFormat {
- conn_id: number;
- id: number;
- format: string;
-}
-
-export interface CliprdrServerFormatList {
- conn_id: number;
- formats: CliprdrFormat[];
-}
-
-export interface CliprdrServerFormatListResponse {
- conn_id: number;
- msg_flags: number;
-}
-
-export interface CliprdrServerFormatDataRequest {
- conn_id: number;
- requested_format_id: number;
-}
-
-export interface CliprdrServerFormatDataResponse {
- conn_id: number;
- msg_flags: number;
- format_data: Uint8Array;
-}
-
-export interface CliprdrFileContentsRequest {
- conn_id: number;
- stream_id: number;
- list_index: number;
- dw_flags: number;
- n_position_low: number;
- n_position_high: number;
- cb_requested: number;
- have_clip_data_id: boolean;
- clip_data_id: number;
-}
-
-export interface CliprdrFileContentsResponse {
- conn_id: number;
- msg_flags: number;
- stream_id: number;
- requested_data: Uint8Array;
-}
-
-export interface Cliprdr {
- ready: CliprdrMonitorReady | undefined;
- format_list: CliprdrServerFormatList | undefined;
- format_list_response: CliprdrServerFormatListResponse | undefined;
- format_data_request: CliprdrServerFormatDataRequest | undefined;
- format_data_response: CliprdrServerFormatDataResponse | undefined;
- file_contents_request: CliprdrFileContentsRequest | undefined;
- file_contents_response: CliprdrFileContentsResponse | undefined;
-}
-
-export interface SwitchDisplay {
- display: number;
- x: number;
- y: number;
- width: number;
- height: number;
-}
-
-export interface PermissionInfo {
- permission: PermissionInfo_Permission;
- enabled: boolean;
-}
-
-export enum PermissionInfo_Permission {
- Keyboard = 0,
- Clipboard = 2,
- Audio = 3,
- File = 4,
- UNRECOGNIZED = -1,
-}
-
-export function permissionInfo_PermissionFromJSON(
- object: any
-): PermissionInfo_Permission {
- switch (object) {
- case 0:
- case "Keyboard":
- return PermissionInfo_Permission.Keyboard;
- case 2:
- case "Clipboard":
- return PermissionInfo_Permission.Clipboard;
- case 3:
- case "Audio":
- return PermissionInfo_Permission.Audio;
- case 4:
- case "File":
- return PermissionInfo_Permission.File;
- case -1:
- case "UNRECOGNIZED":
- default:
- return PermissionInfo_Permission.UNRECOGNIZED;
- }
-}
-
-export function permissionInfo_PermissionToJSON(
- object: PermissionInfo_Permission
-): string {
- switch (object) {
- case PermissionInfo_Permission.Keyboard:
- return "Keyboard";
- case PermissionInfo_Permission.Clipboard:
- return "Clipboard";
- case PermissionInfo_Permission.Audio:
- return "Audio";
- case PermissionInfo_Permission.File:
- return "File";
- default:
- return "UNKNOWN";
- }
-}
-
-export interface OptionMessage {
- image_quality: ImageQuality;
- lock_after_session_end: OptionMessage_BoolOption;
- show_remote_cursor: OptionMessage_BoolOption;
- privacy_mode: OptionMessage_BoolOption;
- block_input: OptionMessage_BoolOption;
- custom_image_quality: number;
- disable_audio: OptionMessage_BoolOption;
- disable_clipboard: OptionMessage_BoolOption;
- enable_file_transfer: OptionMessage_BoolOption;
-}
-
-export enum OptionMessage_BoolOption {
- NotSet = 0,
- No = 1,
- Yes = 2,
- UNRECOGNIZED = -1,
-}
-
-export function optionMessage_BoolOptionFromJSON(
- object: any
-): OptionMessage_BoolOption {
- switch (object) {
- case 0:
- case "NotSet":
- return OptionMessage_BoolOption.NotSet;
- case 1:
- case "No":
- return OptionMessage_BoolOption.No;
- case 2:
- case "Yes":
- return OptionMessage_BoolOption.Yes;
- case -1:
- case "UNRECOGNIZED":
- default:
- return OptionMessage_BoolOption.UNRECOGNIZED;
- }
-}
-
-export function optionMessage_BoolOptionToJSON(
- object: OptionMessage_BoolOption
-): string {
- switch (object) {
- case OptionMessage_BoolOption.NotSet:
- return "NotSet";
- case OptionMessage_BoolOption.No:
- return "No";
- case OptionMessage_BoolOption.Yes:
- return "Yes";
- default:
- return "UNKNOWN";
- }
-}
-
-export interface OptionResponse {
- opt: OptionMessage | undefined;
- error: string;
-}
-
-export interface TestDelay {
- time: number;
- from_client: boolean;
-}
-
-export interface PublicKey {
- asymmetric_value: Uint8Array;
- symmetric_value: Uint8Array;
-}
-
-export interface SignedId {
- id: Uint8Array;
-}
-
-export interface AudioFormat {
- sample_rate: number;
- channels: number;
-}
-
-export interface AudioFrame {
- data: Uint8Array;
-}
-
-export interface Misc {
- chat_message: ChatMessage | undefined;
- switch_display: SwitchDisplay | undefined;
- permission_info: PermissionInfo | undefined;
- option: OptionMessage | undefined;
- audio_format: AudioFormat | undefined;
- close_reason: string | undefined;
- refresh_video: boolean | undefined;
- option_response: OptionResponse | undefined;
- video_received: boolean | undefined;
-}
-
-export interface Message {
- signed_id: SignedId | undefined;
- public_key: PublicKey | undefined;
- test_delay: TestDelay | undefined;
- video_frame: VideoFrame | undefined;
- login_request: LoginRequest | undefined;
- login_response: LoginResponse | undefined;
- hash: Hash | undefined;
- mouse_event: MouseEvent | undefined;
- audio_frame: AudioFrame | undefined;
- cursor_data: CursorData | undefined;
- cursor_position: CursorPosition | undefined;
- cursor_id: number | undefined;
- key_event: KeyEvent | undefined;
- clipboard: Clipboard | undefined;
- file_action: FileAction | undefined;
- file_response: FileResponse | undefined;
- misc: Misc | undefined;
- cliprdr: Cliprdr | undefined;
-}
-
-function createBaseVP9(): VP9 {
- return { data: new Uint8Array(), key: false, pts: 0 };
-}
-
-export const VP9 = {
- encode(message: VP9, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
- if (message.data.length !== 0) {
- writer.uint32(10).bytes(message.data);
- }
- if (message.key === true) {
- writer.uint32(16).bool(message.key);
- }
- if (message.pts !== 0) {
- writer.uint32(24).int64(message.pts);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): VP9 {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseVP9();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.data = reader.bytes();
- break;
- case 2:
- message.key = reader.bool();
- break;
- case 3:
- message.pts = longToNumber(reader.int64() as Long);
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): VP9 {
- return {
- data: isSet(object.data)
- ? bytesFromBase64(object.data)
- : new Uint8Array(),
- key: isSet(object.key) ? Boolean(object.key) : false,
- pts: isSet(object.pts) ? Number(object.pts) : 0,
- };
- },
-
- toJSON(message: VP9): unknown {
- const obj: any = {};
- message.data !== undefined &&
- (obj.data = base64FromBytes(
- message.data !== undefined ? message.data : new Uint8Array()
- ));
- message.key !== undefined && (obj.key = message.key);
- message.pts !== undefined && (obj.pts = Math.round(message.pts));
- return obj;
- },
-
- fromPartial, I>>(object: I): VP9 {
- const message = createBaseVP9();
- message.data = object.data ?? new Uint8Array();
- message.key = object.key ?? false;
- message.pts = object.pts ?? 0;
- return message;
- },
-};
-
-function createBaseVP9s(): VP9s {
- return { frames: [] };
-}
-
-export const VP9s = {
- encode(message: VP9s, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
- for (const v of message.frames) {
- VP9.encode(v!, writer.uint32(10).fork()).ldelim();
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): VP9s {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseVP9s();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.frames.push(VP9.decode(reader, reader.uint32()));
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): VP9s {
- return {
- frames: Array.isArray(object?.frames)
- ? object.frames.map((e: any) => VP9.fromJSON(e))
- : [],
- };
- },
-
- toJSON(message: VP9s): unknown {
- const obj: any = {};
- if (message.frames) {
- obj.frames = message.frames.map((e) => (e ? VP9.toJSON(e) : undefined));
- } else {
- obj.frames = [];
- }
- return obj;
- },
-
- fromPartial, I>>(object: I): VP9s {
- const message = createBaseVP9s();
- message.frames = object.frames?.map((e) => VP9.fromPartial(e)) || [];
- return message;
- },
-};
-
-function createBaseRGB(): RGB {
- return { compress: false };
-}
-
-export const RGB = {
- encode(message: RGB, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
- if (message.compress === true) {
- writer.uint32(8).bool(message.compress);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): RGB {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseRGB();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.compress = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): RGB {
- return {
- compress: isSet(object.compress) ? Boolean(object.compress) : false,
- };
- },
-
- toJSON(message: RGB): unknown {
- const obj: any = {};
- message.compress !== undefined && (obj.compress = message.compress);
- return obj;
- },
-
- fromPartial, I>>(object: I): RGB {
- const message = createBaseRGB();
- message.compress = object.compress ?? false;
- return message;
- },
-};
-
-function createBaseYUV(): YUV {
- return { compress: false, stride: 0 };
-}
-
-export const YUV = {
- encode(message: YUV, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
- if (message.compress === true) {
- writer.uint32(8).bool(message.compress);
- }
- if (message.stride !== 0) {
- writer.uint32(16).int32(message.stride);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): YUV {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseYUV();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.compress = reader.bool();
- break;
- case 2:
- message.stride = reader.int32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): YUV {
- return {
- compress: isSet(object.compress) ? Boolean(object.compress) : false,
- stride: isSet(object.stride) ? Number(object.stride) : 0,
- };
- },
-
- toJSON(message: YUV): unknown {
- const obj: any = {};
- message.compress !== undefined && (obj.compress = message.compress);
- message.stride !== undefined && (obj.stride = Math.round(message.stride));
- return obj;
- },
-
- fromPartial, I>>(object: I): YUV {
- const message = createBaseYUV();
- message.compress = object.compress ?? false;
- message.stride = object.stride ?? 0;
- return message;
- },
-};
-
-function createBaseVideoFrame(): VideoFrame {
- return { vp9s: undefined, rgb: undefined, yuv: undefined };
-}
-
-export const VideoFrame = {
- encode(
- message: VideoFrame,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.vp9s !== undefined) {
- VP9s.encode(message.vp9s, writer.uint32(50).fork()).ldelim();
- }
- if (message.rgb !== undefined) {
- RGB.encode(message.rgb, writer.uint32(58).fork()).ldelim();
- }
- if (message.yuv !== undefined) {
- YUV.encode(message.yuv, writer.uint32(66).fork()).ldelim();
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): VideoFrame {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseVideoFrame();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 6:
- message.vp9s = VP9s.decode(reader, reader.uint32());
- break;
- case 7:
- message.rgb = RGB.decode(reader, reader.uint32());
- break;
- case 8:
- message.yuv = YUV.decode(reader, reader.uint32());
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): VideoFrame {
- return {
- vp9s: isSet(object.vp9s) ? VP9s.fromJSON(object.vp9s) : undefined,
- rgb: isSet(object.rgb) ? RGB.fromJSON(object.rgb) : undefined,
- yuv: isSet(object.yuv) ? YUV.fromJSON(object.yuv) : undefined,
- };
- },
-
- toJSON(message: VideoFrame): unknown {
- const obj: any = {};
- message.vp9s !== undefined &&
- (obj.vp9s = message.vp9s ? VP9s.toJSON(message.vp9s) : undefined);
- message.rgb !== undefined &&
- (obj.rgb = message.rgb ? RGB.toJSON(message.rgb) : undefined);
- message.yuv !== undefined &&
- (obj.yuv = message.yuv ? YUV.toJSON(message.yuv) : undefined);
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): VideoFrame {
- const message = createBaseVideoFrame();
- message.vp9s =
- object.vp9s !== undefined && object.vp9s !== null
- ? VP9s.fromPartial(object.vp9s)
- : undefined;
- message.rgb =
- object.rgb !== undefined && object.rgb !== null
- ? RGB.fromPartial(object.rgb)
- : undefined;
- message.yuv =
- object.yuv !== undefined && object.yuv !== null
- ? YUV.fromPartial(object.yuv)
- : undefined;
- return message;
- },
-};
-
-function createBaseIdPk(): IdPk {
- return { id: "", pk: new Uint8Array() };
-}
-
-export const IdPk = {
- encode(message: IdPk, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
- if (message.id !== "") {
- writer.uint32(10).string(message.id);
- }
- if (message.pk.length !== 0) {
- writer.uint32(18).bytes(message.pk);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): IdPk {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseIdPk();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.id = reader.string();
- break;
- case 2:
- message.pk = reader.bytes();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): IdPk {
- return {
- id: isSet(object.id) ? String(object.id) : "",
- pk: isSet(object.pk) ? bytesFromBase64(object.pk) : new Uint8Array(),
- };
- },
-
- toJSON(message: IdPk): unknown {
- const obj: any = {};
- message.id !== undefined && (obj.id = message.id);
- message.pk !== undefined &&
- (obj.pk = base64FromBytes(
- message.pk !== undefined ? message.pk : new Uint8Array()
- ));
- return obj;
- },
-
- fromPartial, I>>(object: I): IdPk {
- const message = createBaseIdPk();
- message.id = object.id ?? "";
- message.pk = object.pk ?? new Uint8Array();
- return message;
- },
-};
-
-function createBaseDisplayInfo(): DisplayInfo {
- return { x: 0, y: 0, width: 0, height: 0, name: "", online: false };
-}
-
-export const DisplayInfo = {
- encode(
- message: DisplayInfo,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.x !== 0) {
- writer.uint32(8).sint32(message.x);
- }
- if (message.y !== 0) {
- writer.uint32(16).sint32(message.y);
- }
- if (message.width !== 0) {
- writer.uint32(24).int32(message.width);
- }
- if (message.height !== 0) {
- writer.uint32(32).int32(message.height);
- }
- if (message.name !== "") {
- writer.uint32(42).string(message.name);
- }
- if (message.online === true) {
- writer.uint32(48).bool(message.online);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): DisplayInfo {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseDisplayInfo();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.x = reader.sint32();
- break;
- case 2:
- message.y = reader.sint32();
- break;
- case 3:
- message.width = reader.int32();
- break;
- case 4:
- message.height = reader.int32();
- break;
- case 5:
- message.name = reader.string();
- break;
- case 6:
- message.online = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): DisplayInfo {
- return {
- x: isSet(object.x) ? Number(object.x) : 0,
- y: isSet(object.y) ? Number(object.y) : 0,
- width: isSet(object.width) ? Number(object.width) : 0,
- height: isSet(object.height) ? Number(object.height) : 0,
- name: isSet(object.name) ? String(object.name) : "",
- online: isSet(object.online) ? Boolean(object.online) : false,
- };
- },
-
- toJSON(message: DisplayInfo): unknown {
- const obj: any = {};
- message.x !== undefined && (obj.x = Math.round(message.x));
- message.y !== undefined && (obj.y = Math.round(message.y));
- message.width !== undefined && (obj.width = Math.round(message.width));
- message.height !== undefined && (obj.height = Math.round(message.height));
- message.name !== undefined && (obj.name = message.name);
- message.online !== undefined && (obj.online = message.online);
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): DisplayInfo {
- const message = createBaseDisplayInfo();
- message.x = object.x ?? 0;
- message.y = object.y ?? 0;
- message.width = object.width ?? 0;
- message.height = object.height ?? 0;
- message.name = object.name ?? "";
- message.online = object.online ?? false;
- return message;
- },
-};
-
-function createBasePortForward(): PortForward {
- return { host: "", port: 0 };
-}
-
-export const PortForward = {
- encode(
- message: PortForward,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.host !== "") {
- writer.uint32(10).string(message.host);
- }
- if (message.port !== 0) {
- writer.uint32(16).int32(message.port);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): PortForward {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBasePortForward();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.host = reader.string();
- break;
- case 2:
- message.port = reader.int32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): PortForward {
- return {
- host: isSet(object.host) ? String(object.host) : "",
- port: isSet(object.port) ? Number(object.port) : 0,
- };
- },
-
- toJSON(message: PortForward): unknown {
- const obj: any = {};
- message.host !== undefined && (obj.host = message.host);
- message.port !== undefined && (obj.port = Math.round(message.port));
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): PortForward {
- const message = createBasePortForward();
- message.host = object.host ?? "";
- message.port = object.port ?? 0;
- return message;
- },
-};
-
-function createBaseFileTransfer(): FileTransfer {
- return { dir: "", show_hidden: false };
-}
-
-export const FileTransfer = {
- encode(
- message: FileTransfer,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.dir !== "") {
- writer.uint32(10).string(message.dir);
- }
- if (message.show_hidden === true) {
- writer.uint32(16).bool(message.show_hidden);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): FileTransfer {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseFileTransfer();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.dir = reader.string();
- break;
- case 2:
- message.show_hidden = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): FileTransfer {
- return {
- dir: isSet(object.dir) ? String(object.dir) : "",
- show_hidden: isSet(object.show_hidden)
- ? Boolean(object.show_hidden)
- : false,
- };
- },
-
- toJSON(message: FileTransfer): unknown {
- const obj: any = {};
- message.dir !== undefined && (obj.dir = message.dir);
- message.show_hidden !== undefined &&
- (obj.show_hidden = message.show_hidden);
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): FileTransfer {
- const message = createBaseFileTransfer();
- message.dir = object.dir ?? "";
- message.show_hidden = object.show_hidden ?? false;
- return message;
- },
-};
-
-function createBaseLoginRequest(): LoginRequest {
- return {
- username: "",
- password: new Uint8Array(),
- my_id: "",
- my_name: "",
- option: undefined,
- file_transfer: undefined,
- port_forward: undefined,
- video_ack_required: false,
- };
-}
-
-export const LoginRequest = {
- encode(
- message: LoginRequest,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.username !== "") {
- writer.uint32(10).string(message.username);
- }
- if (message.password.length !== 0) {
- writer.uint32(18).bytes(message.password);
- }
- if (message.my_id !== "") {
- writer.uint32(34).string(message.my_id);
- }
- if (message.my_name !== "") {
- writer.uint32(42).string(message.my_name);
- }
- if (message.option !== undefined) {
- OptionMessage.encode(message.option, writer.uint32(50).fork()).ldelim();
- }
- if (message.file_transfer !== undefined) {
- FileTransfer.encode(
- message.file_transfer,
- writer.uint32(58).fork()
- ).ldelim();
- }
- if (message.port_forward !== undefined) {
- PortForward.encode(
- message.port_forward,
- writer.uint32(66).fork()
- ).ldelim();
- }
- if (message.video_ack_required === true) {
- writer.uint32(72).bool(message.video_ack_required);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): LoginRequest {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseLoginRequest();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.username = reader.string();
- break;
- case 2:
- message.password = reader.bytes();
- break;
- case 4:
- message.my_id = reader.string();
- break;
- case 5:
- message.my_name = reader.string();
- break;
- case 6:
- message.option = OptionMessage.decode(reader, reader.uint32());
- break;
- case 7:
- message.file_transfer = FileTransfer.decode(reader, reader.uint32());
- break;
- case 8:
- message.port_forward = PortForward.decode(reader, reader.uint32());
- break;
- case 9:
- message.video_ack_required = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): LoginRequest {
- return {
- username: isSet(object.username) ? String(object.username) : "",
- password: isSet(object.password)
- ? bytesFromBase64(object.password)
- : new Uint8Array(),
- my_id: isSet(object.my_id) ? String(object.my_id) : "",
- my_name: isSet(object.my_name) ? String(object.my_name) : "",
- option: isSet(object.option)
- ? OptionMessage.fromJSON(object.option)
- : undefined,
- file_transfer: isSet(object.file_transfer)
- ? FileTransfer.fromJSON(object.file_transfer)
- : undefined,
- port_forward: isSet(object.port_forward)
- ? PortForward.fromJSON(object.port_forward)
- : undefined,
- video_ack_required: isSet(object.video_ack_required)
- ? Boolean(object.video_ack_required)
- : false,
- };
- },
-
- toJSON(message: LoginRequest): unknown {
- const obj: any = {};
- message.username !== undefined && (obj.username = message.username);
- message.password !== undefined &&
- (obj.password = base64FromBytes(
- message.password !== undefined ? message.password : new Uint8Array()
- ));
- message.my_id !== undefined && (obj.my_id = message.my_id);
- message.my_name !== undefined && (obj.my_name = message.my_name);
- message.option !== undefined &&
- (obj.option = message.option
- ? OptionMessage.toJSON(message.option)
- : undefined);
- message.file_transfer !== undefined &&
- (obj.file_transfer = message.file_transfer
- ? FileTransfer.toJSON(message.file_transfer)
- : undefined);
- message.port_forward !== undefined &&
- (obj.port_forward = message.port_forward
- ? PortForward.toJSON(message.port_forward)
- : undefined);
- message.video_ack_required !== undefined &&
- (obj.video_ack_required = message.video_ack_required);
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): LoginRequest {
- const message = createBaseLoginRequest();
- message.username = object.username ?? "";
- message.password = object.password ?? new Uint8Array();
- message.my_id = object.my_id ?? "";
- message.my_name = object.my_name ?? "";
- message.option =
- object.option !== undefined && object.option !== null
- ? OptionMessage.fromPartial(object.option)
- : undefined;
- message.file_transfer =
- object.file_transfer !== undefined && object.file_transfer !== null
- ? FileTransfer.fromPartial(object.file_transfer)
- : undefined;
- message.port_forward =
- object.port_forward !== undefined && object.port_forward !== null
- ? PortForward.fromPartial(object.port_forward)
- : undefined;
- message.video_ack_required = object.video_ack_required ?? false;
- return message;
- },
-};
-
-function createBaseChatMessage(): ChatMessage {
- return { text: "" };
-}
-
-export const ChatMessage = {
- encode(
- message: ChatMessage,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.text !== "") {
- writer.uint32(10).string(message.text);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): ChatMessage {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseChatMessage();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.text = reader.string();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): ChatMessage {
- return {
- text: isSet(object.text) ? String(object.text) : "",
- };
- },
-
- toJSON(message: ChatMessage): unknown {
- const obj: any = {};
- message.text !== undefined && (obj.text = message.text);
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): ChatMessage {
- const message = createBaseChatMessage();
- message.text = object.text ?? "";
- return message;
- },
-};
-
-function createBasePeerInfo(): PeerInfo {
- return {
- username: "",
- hostname: "",
- platform: "",
- displays: [],
- current_display: 0,
- sas_enabled: false,
- version: "",
- conn_id: 0,
- };
-}
-
-export const PeerInfo = {
- encode(
- message: PeerInfo,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.username !== "") {
- writer.uint32(10).string(message.username);
- }
- if (message.hostname !== "") {
- writer.uint32(18).string(message.hostname);
- }
- if (message.platform !== "") {
- writer.uint32(26).string(message.platform);
- }
- for (const v of message.displays) {
- DisplayInfo.encode(v!, writer.uint32(34).fork()).ldelim();
- }
- if (message.current_display !== 0) {
- writer.uint32(40).int32(message.current_display);
- }
- if (message.sas_enabled === true) {
- writer.uint32(48).bool(message.sas_enabled);
- }
- if (message.version !== "") {
- writer.uint32(58).string(message.version);
- }
- if (message.conn_id !== 0) {
- writer.uint32(64).int32(message.conn_id);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): PeerInfo {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBasePeerInfo();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.username = reader.string();
- break;
- case 2:
- message.hostname = reader.string();
- break;
- case 3:
- message.platform = reader.string();
- break;
- case 4:
- message.displays.push(DisplayInfo.decode(reader, reader.uint32()));
- break;
- case 5:
- message.current_display = reader.int32();
- break;
- case 6:
- message.sas_enabled = reader.bool();
- break;
- case 7:
- message.version = reader.string();
- break;
- case 8:
- message.conn_id = reader.int32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): PeerInfo {
- return {
- username: isSet(object.username) ? String(object.username) : "",
- hostname: isSet(object.hostname) ? String(object.hostname) : "",
- platform: isSet(object.platform) ? String(object.platform) : "",
- displays: Array.isArray(object?.displays)
- ? object.displays.map((e: any) => DisplayInfo.fromJSON(e))
- : [],
- current_display: isSet(object.current_display)
- ? Number(object.current_display)
- : 0,
- sas_enabled: isSet(object.sas_enabled)
- ? Boolean(object.sas_enabled)
- : false,
- version: isSet(object.version) ? String(object.version) : "",
- conn_id: isSet(object.conn_id) ? Number(object.conn_id) : 0,
- };
- },
-
- toJSON(message: PeerInfo): unknown {
- const obj: any = {};
- message.username !== undefined && (obj.username = message.username);
- message.hostname !== undefined && (obj.hostname = message.hostname);
- message.platform !== undefined && (obj.platform = message.platform);
- if (message.displays) {
- obj.displays = message.displays.map((e) =>
- e ? DisplayInfo.toJSON(e) : undefined
- );
- } else {
- obj.displays = [];
- }
- message.current_display !== undefined &&
- (obj.current_display = Math.round(message.current_display));
- message.sas_enabled !== undefined &&
- (obj.sas_enabled = message.sas_enabled);
- message.version !== undefined && (obj.version = message.version);
- message.conn_id !== undefined &&
- (obj.conn_id = Math.round(message.conn_id));
- return obj;
- },
-
- fromPartial, I>>(object: I): PeerInfo {
- const message = createBasePeerInfo();
- message.username = object.username ?? "";
- message.hostname = object.hostname ?? "";
- message.platform = object.platform ?? "";
- message.displays =
- object.displays?.map((e) => DisplayInfo.fromPartial(e)) || [];
- message.current_display = object.current_display ?? 0;
- message.sas_enabled = object.sas_enabled ?? false;
- message.version = object.version ?? "";
- message.conn_id = object.conn_id ?? 0;
- return message;
- },
-};
-
-function createBaseLoginResponse(): LoginResponse {
- return { error: undefined, peer_info: undefined };
-}
-
-export const LoginResponse = {
- encode(
- message: LoginResponse,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.error !== undefined) {
- writer.uint32(10).string(message.error);
- }
- if (message.peer_info !== undefined) {
- PeerInfo.encode(message.peer_info, writer.uint32(18).fork()).ldelim();
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): LoginResponse {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseLoginResponse();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.error = reader.string();
- break;
- case 2:
- message.peer_info = PeerInfo.decode(reader, reader.uint32());
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): LoginResponse {
- return {
- error: isSet(object.error) ? String(object.error) : undefined,
- peer_info: isSet(object.peer_info)
- ? PeerInfo.fromJSON(object.peer_info)
- : undefined,
- };
- },
-
- toJSON(message: LoginResponse): unknown {
- const obj: any = {};
- message.error !== undefined && (obj.error = message.error);
- message.peer_info !== undefined &&
- (obj.peer_info = message.peer_info
- ? PeerInfo.toJSON(message.peer_info)
- : undefined);
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): LoginResponse {
- const message = createBaseLoginResponse();
- message.error = object.error ?? undefined;
- message.peer_info =
- object.peer_info !== undefined && object.peer_info !== null
- ? PeerInfo.fromPartial(object.peer_info)
- : undefined;
- return message;
- },
-};
-
-function createBaseMouseEvent(): MouseEvent {
- return { mask: 0, x: 0, y: 0, modifiers: [] };
-}
-
-export const MouseEvent = {
- encode(
- message: MouseEvent,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.mask !== 0) {
- writer.uint32(8).int32(message.mask);
- }
- if (message.x !== 0) {
- writer.uint32(16).sint32(message.x);
- }
- if (message.y !== 0) {
- writer.uint32(24).sint32(message.y);
- }
- writer.uint32(34).fork();
- for (const v of message.modifiers) {
- writer.int32(v);
- }
- writer.ldelim();
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): MouseEvent {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseMouseEvent();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.mask = reader.int32();
- break;
- case 2:
- message.x = reader.sint32();
- break;
- case 3:
- message.y = reader.sint32();
- break;
- case 4:
- if ((tag & 7) === 2) {
- const end2 = reader.uint32() + reader.pos;
- while (reader.pos < end2) {
- message.modifiers.push(reader.int32() as any);
- }
- } else {
- message.modifiers.push(reader.int32() as any);
- }
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): MouseEvent {
- return {
- mask: isSet(object.mask) ? Number(object.mask) : 0,
- x: isSet(object.x) ? Number(object.x) : 0,
- y: isSet(object.y) ? Number(object.y) : 0,
- modifiers: Array.isArray(object?.modifiers)
- ? object.modifiers.map((e: any) => controlKeyFromJSON(e))
- : [],
- };
- },
-
- toJSON(message: MouseEvent): unknown {
- const obj: any = {};
- message.mask !== undefined && (obj.mask = Math.round(message.mask));
- message.x !== undefined && (obj.x = Math.round(message.x));
- message.y !== undefined && (obj.y = Math.round(message.y));
- if (message.modifiers) {
- obj.modifiers = message.modifiers.map((e) => controlKeyToJSON(e));
- } else {
- obj.modifiers = [];
- }
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): MouseEvent {
- const message = createBaseMouseEvent();
- message.mask = object.mask ?? 0;
- message.x = object.x ?? 0;
- message.y = object.y ?? 0;
- message.modifiers = object.modifiers?.map((e) => e) || [];
- return message;
- },
-};
-
-function createBaseKeyEvent(): KeyEvent {
- return {
- down: false,
- press: false,
- control_key: undefined,
- chr: undefined,
- unicode: undefined,
- seq: undefined,
- modifiers: [],
- };
-}
-
-export const KeyEvent = {
- encode(
- message: KeyEvent,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.down === true) {
- writer.uint32(8).bool(message.down);
- }
- if (message.press === true) {
- writer.uint32(16).bool(message.press);
- }
- if (message.control_key !== undefined) {
- writer.uint32(24).int32(message.control_key);
- }
- if (message.chr !== undefined) {
- writer.uint32(32).uint32(message.chr);
- }
- if (message.unicode !== undefined) {
- writer.uint32(40).uint32(message.unicode);
- }
- if (message.seq !== undefined) {
- writer.uint32(50).string(message.seq);
- }
- writer.uint32(66).fork();
- for (const v of message.modifiers) {
- writer.int32(v);
- }
- writer.ldelim();
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): KeyEvent {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseKeyEvent();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.down = reader.bool();
- break;
- case 2:
- message.press = reader.bool();
- break;
- case 3:
- message.control_key = reader.int32() as any;
- break;
- case 4:
- message.chr = reader.uint32();
- break;
- case 5:
- message.unicode = reader.uint32();
- break;
- case 6:
- message.seq = reader.string();
- break;
- case 8:
- if ((tag & 7) === 2) {
- const end2 = reader.uint32() + reader.pos;
- while (reader.pos < end2) {
- message.modifiers.push(reader.int32() as any);
- }
- } else {
- message.modifiers.push(reader.int32() as any);
- }
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): KeyEvent {
- return {
- down: isSet(object.down) ? Boolean(object.down) : false,
- press: isSet(object.press) ? Boolean(object.press) : false,
- control_key: isSet(object.control_key)
- ? controlKeyFromJSON(object.control_key)
- : undefined,
- chr: isSet(object.chr) ? Number(object.chr) : undefined,
- unicode: isSet(object.unicode) ? Number(object.unicode) : undefined,
- seq: isSet(object.seq) ? String(object.seq) : undefined,
- modifiers: Array.isArray(object?.modifiers)
- ? object.modifiers.map((e: any) => controlKeyFromJSON(e))
- : [],
- };
- },
-
- toJSON(message: KeyEvent): unknown {
- const obj: any = {};
- message.down !== undefined && (obj.down = message.down);
- message.press !== undefined && (obj.press = message.press);
- message.control_key !== undefined &&
- (obj.control_key =
- message.control_key !== undefined
- ? controlKeyToJSON(message.control_key)
- : undefined);
- message.chr !== undefined && (obj.chr = Math.round(message.chr));
- message.unicode !== undefined &&
- (obj.unicode = Math.round(message.unicode));
- message.seq !== undefined && (obj.seq = message.seq);
- if (message.modifiers) {
- obj.modifiers = message.modifiers.map((e) => controlKeyToJSON(e));
- } else {
- obj.modifiers = [];
- }
- return obj;
- },
-
- fromPartial, I>>(object: I): KeyEvent {
- const message = createBaseKeyEvent();
- message.down = object.down ?? false;
- message.press = object.press ?? false;
- message.control_key = object.control_key ?? undefined;
- message.chr = object.chr ?? undefined;
- message.unicode = object.unicode ?? undefined;
- message.seq = object.seq ?? undefined;
- message.modifiers = object.modifiers?.map((e) => e) || [];
- return message;
- },
-};
-
-function createBaseCursorData(): CursorData {
- return {
- id: 0,
- hotx: 0,
- hoty: 0,
- width: 0,
- height: 0,
- colors: new Uint8Array(),
- };
-}
-
-export const CursorData = {
- encode(
- message: CursorData,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.id !== 0) {
- writer.uint32(8).uint64(message.id);
- }
- if (message.hotx !== 0) {
- writer.uint32(16).sint32(message.hotx);
- }
- if (message.hoty !== 0) {
- writer.uint32(24).sint32(message.hoty);
- }
- if (message.width !== 0) {
- writer.uint32(32).int32(message.width);
- }
- if (message.height !== 0) {
- writer.uint32(40).int32(message.height);
- }
- if (message.colors.length !== 0) {
- writer.uint32(50).bytes(message.colors);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): CursorData {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseCursorData();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.id = longToNumber(reader.uint64() as Long);
- break;
- case 2:
- message.hotx = reader.sint32();
- break;
- case 3:
- message.hoty = reader.sint32();
- break;
- case 4:
- message.width = reader.int32();
- break;
- case 5:
- message.height = reader.int32();
- break;
- case 6:
- message.colors = reader.bytes();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): CursorData {
- return {
- id: isSet(object.id) ? Number(object.id) : 0,
- hotx: isSet(object.hotx) ? Number(object.hotx) : 0,
- hoty: isSet(object.hoty) ? Number(object.hoty) : 0,
- width: isSet(object.width) ? Number(object.width) : 0,
- height: isSet(object.height) ? Number(object.height) : 0,
- colors: isSet(object.colors)
- ? bytesFromBase64(object.colors)
- : new Uint8Array(),
- };
- },
-
- toJSON(message: CursorData): unknown {
- const obj: any = {};
- message.id !== undefined && (obj.id = Math.round(message.id));
- message.hotx !== undefined && (obj.hotx = Math.round(message.hotx));
- message.hoty !== undefined && (obj.hoty = Math.round(message.hoty));
- message.width !== undefined && (obj.width = Math.round(message.width));
- message.height !== undefined && (obj.height = Math.round(message.height));
- message.colors !== undefined &&
- (obj.colors = base64FromBytes(
- message.colors !== undefined ? message.colors : new Uint8Array()
- ));
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): CursorData {
- const message = createBaseCursorData();
- message.id = object.id ?? 0;
- message.hotx = object.hotx ?? 0;
- message.hoty = object.hoty ?? 0;
- message.width = object.width ?? 0;
- message.height = object.height ?? 0;
- message.colors = object.colors ?? new Uint8Array();
- return message;
- },
-};
-
-function createBaseCursorPosition(): CursorPosition {
- return { x: 0, y: 0 };
-}
-
-export const CursorPosition = {
- encode(
- message: CursorPosition,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.x !== 0) {
- writer.uint32(8).sint32(message.x);
- }
- if (message.y !== 0) {
- writer.uint32(16).sint32(message.y);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): CursorPosition {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseCursorPosition();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.x = reader.sint32();
- break;
- case 2:
- message.y = reader.sint32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): CursorPosition {
- return {
- x: isSet(object.x) ? Number(object.x) : 0,
- y: isSet(object.y) ? Number(object.y) : 0,
- };
- },
-
- toJSON(message: CursorPosition): unknown {
- const obj: any = {};
- message.x !== undefined && (obj.x = Math.round(message.x));
- message.y !== undefined && (obj.y = Math.round(message.y));
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): CursorPosition {
- const message = createBaseCursorPosition();
- message.x = object.x ?? 0;
- message.y = object.y ?? 0;
- return message;
- },
-};
-
-function createBaseHash(): Hash {
- return { salt: "", challenge: "" };
-}
-
-export const Hash = {
- encode(message: Hash, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
- if (message.salt !== "") {
- writer.uint32(10).string(message.salt);
- }
- if (message.challenge !== "") {
- writer.uint32(18).string(message.challenge);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): Hash {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseHash();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.salt = reader.string();
- break;
- case 2:
- message.challenge = reader.string();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): Hash {
- return {
- salt: isSet(object.salt) ? String(object.salt) : "",
- challenge: isSet(object.challenge) ? String(object.challenge) : "",
- };
- },
-
- toJSON(message: Hash): unknown {
- const obj: any = {};
- message.salt !== undefined && (obj.salt = message.salt);
- message.challenge !== undefined && (obj.challenge = message.challenge);
- return obj;
- },
-
- fromPartial, I>>(object: I): Hash {
- const message = createBaseHash();
- message.salt = object.salt ?? "";
- message.challenge = object.challenge ?? "";
- return message;
- },
-};
-
-function createBaseClipboard(): Clipboard {
- return { compress: false, content: new Uint8Array() };
-}
-
-export const Clipboard = {
- encode(
- message: Clipboard,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.compress === true) {
- writer.uint32(8).bool(message.compress);
- }
- if (message.content.length !== 0) {
- writer.uint32(18).bytes(message.content);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): Clipboard {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseClipboard();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.compress = reader.bool();
- break;
- case 2:
- message.content = reader.bytes();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): Clipboard {
- return {
- compress: isSet(object.compress) ? Boolean(object.compress) : false,
- content: isSet(object.content)
- ? bytesFromBase64(object.content)
- : new Uint8Array(),
- };
- },
-
- toJSON(message: Clipboard): unknown {
- const obj: any = {};
- message.compress !== undefined && (obj.compress = message.compress);
- message.content !== undefined &&
- (obj.content = base64FromBytes(
- message.content !== undefined ? message.content : new Uint8Array()
- ));
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): Clipboard {
- const message = createBaseClipboard();
- message.compress = object.compress ?? false;
- message.content = object.content ?? new Uint8Array();
- return message;
- },
-};
-
-function createBaseFileEntry(): FileEntry {
- return {
- entry_type: 0,
- name: "",
- is_hidden: false,
- size: 0,
- modified_time: 0,
- };
-}
-
-export const FileEntry = {
- encode(
- message: FileEntry,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.entry_type !== 0) {
- writer.uint32(8).int32(message.entry_type);
- }
- if (message.name !== "") {
- writer.uint32(18).string(message.name);
- }
- if (message.is_hidden === true) {
- writer.uint32(24).bool(message.is_hidden);
- }
- if (message.size !== 0) {
- writer.uint32(32).uint64(message.size);
- }
- if (message.modified_time !== 0) {
- writer.uint32(40).uint64(message.modified_time);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): FileEntry {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseFileEntry();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.entry_type = reader.int32() as any;
- break;
- case 2:
- message.name = reader.string();
- break;
- case 3:
- message.is_hidden = reader.bool();
- break;
- case 4:
- message.size = longToNumber(reader.uint64() as Long);
- break;
- case 5:
- message.modified_time = longToNumber(reader.uint64() as Long);
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): FileEntry {
- return {
- entry_type: isSet(object.entry_type)
- ? fileTypeFromJSON(object.entry_type)
- : 0,
- name: isSet(object.name) ? String(object.name) : "",
- is_hidden: isSet(object.is_hidden) ? Boolean(object.is_hidden) : false,
- size: isSet(object.size) ? Number(object.size) : 0,
- modified_time: isSet(object.modified_time)
- ? Number(object.modified_time)
- : 0,
- };
- },
-
- toJSON(message: FileEntry): unknown {
- const obj: any = {};
- message.entry_type !== undefined &&
- (obj.entry_type = fileTypeToJSON(message.entry_type));
- message.name !== undefined && (obj.name = message.name);
- message.is_hidden !== undefined && (obj.is_hidden = message.is_hidden);
- message.size !== undefined && (obj.size = Math.round(message.size));
- message.modified_time !== undefined &&
- (obj.modified_time = Math.round(message.modified_time));
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): FileEntry {
- const message = createBaseFileEntry();
- message.entry_type = object.entry_type ?? 0;
- message.name = object.name ?? "";
- message.is_hidden = object.is_hidden ?? false;
- message.size = object.size ?? 0;
- message.modified_time = object.modified_time ?? 0;
- return message;
- },
-};
-
-function createBaseFileDirectory(): FileDirectory {
- return { id: 0, path: "", entries: [] };
-}
-
-export const FileDirectory = {
- encode(
- message: FileDirectory,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.id !== 0) {
- writer.uint32(8).int32(message.id);
- }
- if (message.path !== "") {
- writer.uint32(18).string(message.path);
- }
- for (const v of message.entries) {
- FileEntry.encode(v!, writer.uint32(26).fork()).ldelim();
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): FileDirectory {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseFileDirectory();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.id = reader.int32();
- break;
- case 2:
- message.path = reader.string();
- break;
- case 3:
- message.entries.push(FileEntry.decode(reader, reader.uint32()));
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): FileDirectory {
- return {
- id: isSet(object.id) ? Number(object.id) : 0,
- path: isSet(object.path) ? String(object.path) : "",
- entries: Array.isArray(object?.entries)
- ? object.entries.map((e: any) => FileEntry.fromJSON(e))
- : [],
- };
- },
-
- toJSON(message: FileDirectory): unknown {
- const obj: any = {};
- message.id !== undefined && (obj.id = Math.round(message.id));
- message.path !== undefined && (obj.path = message.path);
- if (message.entries) {
- obj.entries = message.entries.map((e) =>
- e ? FileEntry.toJSON(e) : undefined
- );
- } else {
- obj.entries = [];
- }
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): FileDirectory {
- const message = createBaseFileDirectory();
- message.id = object.id ?? 0;
- message.path = object.path ?? "";
- message.entries =
- object.entries?.map((e) => FileEntry.fromPartial(e)) || [];
- return message;
- },
-};
-
-function createBaseReadDir(): ReadDir {
- return { path: "", include_hidden: false };
-}
-
-export const ReadDir = {
- encode(
- message: ReadDir,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.path !== "") {
- writer.uint32(10).string(message.path);
- }
- if (message.include_hidden === true) {
- writer.uint32(16).bool(message.include_hidden);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): ReadDir {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseReadDir();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.path = reader.string();
- break;
- case 2:
- message.include_hidden = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): ReadDir {
- return {
- path: isSet(object.path) ? String(object.path) : "",
- include_hidden: isSet(object.include_hidden)
- ? Boolean(object.include_hidden)
- : false,
- };
- },
-
- toJSON(message: ReadDir): unknown {
- const obj: any = {};
- message.path !== undefined && (obj.path = message.path);
- message.include_hidden !== undefined &&
- (obj.include_hidden = message.include_hidden);
- return obj;
- },
-
- fromPartial, I>>(object: I): ReadDir {
- const message = createBaseReadDir();
- message.path = object.path ?? "";
- message.include_hidden = object.include_hidden ?? false;
- return message;
- },
-};
-
-function createBaseReadAllFiles(): ReadAllFiles {
- return { id: 0, path: "", include_hidden: false };
-}
-
-export const ReadAllFiles = {
- encode(
- message: ReadAllFiles,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.id !== 0) {
- writer.uint32(8).int32(message.id);
- }
- if (message.path !== "") {
- writer.uint32(18).string(message.path);
- }
- if (message.include_hidden === true) {
- writer.uint32(24).bool(message.include_hidden);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): ReadAllFiles {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseReadAllFiles();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.id = reader.int32();
- break;
- case 2:
- message.path = reader.string();
- break;
- case 3:
- message.include_hidden = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): ReadAllFiles {
- return {
- id: isSet(object.id) ? Number(object.id) : 0,
- path: isSet(object.path) ? String(object.path) : "",
- include_hidden: isSet(object.include_hidden)
- ? Boolean(object.include_hidden)
- : false,
- };
- },
-
- toJSON(message: ReadAllFiles): unknown {
- const obj: any = {};
- message.id !== undefined && (obj.id = Math.round(message.id));
- message.path !== undefined && (obj.path = message.path);
- message.include_hidden !== undefined &&
- (obj.include_hidden = message.include_hidden);
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): ReadAllFiles {
- const message = createBaseReadAllFiles();
- message.id = object.id ?? 0;
- message.path = object.path ?? "";
- message.include_hidden = object.include_hidden ?? false;
- return message;
- },
-};
-
-function createBaseFileAction(): FileAction {
- return {
- read_dir: undefined,
- send: undefined,
- receive: undefined,
- create: undefined,
- remove_dir: undefined,
- remove_file: undefined,
- all_files: undefined,
- cancel: undefined,
- };
-}
-
-export const FileAction = {
- encode(
- message: FileAction,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.read_dir !== undefined) {
- ReadDir.encode(message.read_dir, writer.uint32(10).fork()).ldelim();
- }
- if (message.send !== undefined) {
- FileTransferSendRequest.encode(
- message.send,
- writer.uint32(18).fork()
- ).ldelim();
- }
- if (message.receive !== undefined) {
- FileTransferReceiveRequest.encode(
- message.receive,
- writer.uint32(26).fork()
- ).ldelim();
- }
- if (message.create !== undefined) {
- FileDirCreate.encode(message.create, writer.uint32(34).fork()).ldelim();
- }
- if (message.remove_dir !== undefined) {
- FileRemoveDir.encode(
- message.remove_dir,
- writer.uint32(42).fork()
- ).ldelim();
- }
- if (message.remove_file !== undefined) {
- FileRemoveFile.encode(
- message.remove_file,
- writer.uint32(50).fork()
- ).ldelim();
- }
- if (message.all_files !== undefined) {
- ReadAllFiles.encode(message.all_files, writer.uint32(58).fork()).ldelim();
- }
- if (message.cancel !== undefined) {
- FileTransferCancel.encode(
- message.cancel,
- writer.uint32(66).fork()
- ).ldelim();
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): FileAction {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseFileAction();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.read_dir = ReadDir.decode(reader, reader.uint32());
- break;
- case 2:
- message.send = FileTransferSendRequest.decode(
- reader,
- reader.uint32()
- );
- break;
- case 3:
- message.receive = FileTransferReceiveRequest.decode(
- reader,
- reader.uint32()
- );
- break;
- case 4:
- message.create = FileDirCreate.decode(reader, reader.uint32());
- break;
- case 5:
- message.remove_dir = FileRemoveDir.decode(reader, reader.uint32());
- break;
- case 6:
- message.remove_file = FileRemoveFile.decode(reader, reader.uint32());
- break;
- case 7:
- message.all_files = ReadAllFiles.decode(reader, reader.uint32());
- break;
- case 8:
- message.cancel = FileTransferCancel.decode(reader, reader.uint32());
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): FileAction {
- return {
- read_dir: isSet(object.read_dir)
- ? ReadDir.fromJSON(object.read_dir)
- : undefined,
- send: isSet(object.send)
- ? FileTransferSendRequest.fromJSON(object.send)
- : undefined,
- receive: isSet(object.receive)
- ? FileTransferReceiveRequest.fromJSON(object.receive)
- : undefined,
- create: isSet(object.create)
- ? FileDirCreate.fromJSON(object.create)
- : undefined,
- remove_dir: isSet(object.remove_dir)
- ? FileRemoveDir.fromJSON(object.remove_dir)
- : undefined,
- remove_file: isSet(object.remove_file)
- ? FileRemoveFile.fromJSON(object.remove_file)
- : undefined,
- all_files: isSet(object.all_files)
- ? ReadAllFiles.fromJSON(object.all_files)
- : undefined,
- cancel: isSet(object.cancel)
- ? FileTransferCancel.fromJSON(object.cancel)
- : undefined,
- };
- },
-
- toJSON(message: FileAction): unknown {
- const obj: any = {};
- message.read_dir !== undefined &&
- (obj.read_dir = message.read_dir
- ? ReadDir.toJSON(message.read_dir)
- : undefined);
- message.send !== undefined &&
- (obj.send = message.send
- ? FileTransferSendRequest.toJSON(message.send)
- : undefined);
- message.receive !== undefined &&
- (obj.receive = message.receive
- ? FileTransferReceiveRequest.toJSON(message.receive)
- : undefined);
- message.create !== undefined &&
- (obj.create = message.create
- ? FileDirCreate.toJSON(message.create)
- : undefined);
- message.remove_dir !== undefined &&
- (obj.remove_dir = message.remove_dir
- ? FileRemoveDir.toJSON(message.remove_dir)
- : undefined);
- message.remove_file !== undefined &&
- (obj.remove_file = message.remove_file
- ? FileRemoveFile.toJSON(message.remove_file)
- : undefined);
- message.all_files !== undefined &&
- (obj.all_files = message.all_files
- ? ReadAllFiles.toJSON(message.all_files)
- : undefined);
- message.cancel !== undefined &&
- (obj.cancel = message.cancel
- ? FileTransferCancel.toJSON(message.cancel)
- : undefined);
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): FileAction {
- const message = createBaseFileAction();
- message.read_dir =
- object.read_dir !== undefined && object.read_dir !== null
- ? ReadDir.fromPartial(object.read_dir)
- : undefined;
- message.send =
- object.send !== undefined && object.send !== null
- ? FileTransferSendRequest.fromPartial(object.send)
- : undefined;
- message.receive =
- object.receive !== undefined && object.receive !== null
- ? FileTransferReceiveRequest.fromPartial(object.receive)
- : undefined;
- message.create =
- object.create !== undefined && object.create !== null
- ? FileDirCreate.fromPartial(object.create)
- : undefined;
- message.remove_dir =
- object.remove_dir !== undefined && object.remove_dir !== null
- ? FileRemoveDir.fromPartial(object.remove_dir)
- : undefined;
- message.remove_file =
- object.remove_file !== undefined && object.remove_file !== null
- ? FileRemoveFile.fromPartial(object.remove_file)
- : undefined;
- message.all_files =
- object.all_files !== undefined && object.all_files !== null
- ? ReadAllFiles.fromPartial(object.all_files)
- : undefined;
- message.cancel =
- object.cancel !== undefined && object.cancel !== null
- ? FileTransferCancel.fromPartial(object.cancel)
- : undefined;
- return message;
- },
-};
-
-function createBaseFileTransferCancel(): FileTransferCancel {
- return { id: 0 };
-}
-
-export const FileTransferCancel = {
- encode(
- message: FileTransferCancel,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.id !== 0) {
- writer.uint32(8).int32(message.id);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): FileTransferCancel {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseFileTransferCancel();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.id = reader.int32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): FileTransferCancel {
- return {
- id: isSet(object.id) ? Number(object.id) : 0,
- };
- },
-
- toJSON(message: FileTransferCancel): unknown {
- const obj: any = {};
- message.id !== undefined && (obj.id = Math.round(message.id));
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): FileTransferCancel {
- const message = createBaseFileTransferCancel();
- message.id = object.id ?? 0;
- return message;
- },
-};
-
-function createBaseFileResponse(): FileResponse {
- return {
- dir: undefined,
- block: undefined,
- error: undefined,
- done: undefined,
- };
-}
-
-export const FileResponse = {
- encode(
- message: FileResponse,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.dir !== undefined) {
- FileDirectory.encode(message.dir, writer.uint32(10).fork()).ldelim();
- }
- if (message.block !== undefined) {
- FileTransferBlock.encode(
- message.block,
- writer.uint32(18).fork()
- ).ldelim();
- }
- if (message.error !== undefined) {
- FileTransferError.encode(
- message.error,
- writer.uint32(26).fork()
- ).ldelim();
- }
- if (message.done !== undefined) {
- FileTransferDone.encode(message.done, writer.uint32(34).fork()).ldelim();
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): FileResponse {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseFileResponse();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.dir = FileDirectory.decode(reader, reader.uint32());
- break;
- case 2:
- message.block = FileTransferBlock.decode(reader, reader.uint32());
- break;
- case 3:
- message.error = FileTransferError.decode(reader, reader.uint32());
- break;
- case 4:
- message.done = FileTransferDone.decode(reader, reader.uint32());
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): FileResponse {
- return {
- dir: isSet(object.dir) ? FileDirectory.fromJSON(object.dir) : undefined,
- block: isSet(object.block)
- ? FileTransferBlock.fromJSON(object.block)
- : undefined,
- error: isSet(object.error)
- ? FileTransferError.fromJSON(object.error)
- : undefined,
- done: isSet(object.done)
- ? FileTransferDone.fromJSON(object.done)
- : undefined,
- };
- },
-
- toJSON(message: FileResponse): unknown {
- const obj: any = {};
- message.dir !== undefined &&
- (obj.dir = message.dir ? FileDirectory.toJSON(message.dir) : undefined);
- message.block !== undefined &&
- (obj.block = message.block
- ? FileTransferBlock.toJSON(message.block)
- : undefined);
- message.error !== undefined &&
- (obj.error = message.error
- ? FileTransferError.toJSON(message.error)
- : undefined);
- message.done !== undefined &&
- (obj.done = message.done
- ? FileTransferDone.toJSON(message.done)
- : undefined);
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): FileResponse {
- const message = createBaseFileResponse();
- message.dir =
- object.dir !== undefined && object.dir !== null
- ? FileDirectory.fromPartial(object.dir)
- : undefined;
- message.block =
- object.block !== undefined && object.block !== null
- ? FileTransferBlock.fromPartial(object.block)
- : undefined;
- message.error =
- object.error !== undefined && object.error !== null
- ? FileTransferError.fromPartial(object.error)
- : undefined;
- message.done =
- object.done !== undefined && object.done !== null
- ? FileTransferDone.fromPartial(object.done)
- : undefined;
- return message;
- },
-};
-
-function createBaseFileTransferBlock(): FileTransferBlock {
- return { id: 0, file_num: 0, data: new Uint8Array(), compressed: false };
-}
-
-export const FileTransferBlock = {
- encode(
- message: FileTransferBlock,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.id !== 0) {
- writer.uint32(8).int32(message.id);
- }
- if (message.file_num !== 0) {
- writer.uint32(16).sint32(message.file_num);
- }
- if (message.data.length !== 0) {
- writer.uint32(26).bytes(message.data);
- }
- if (message.compressed === true) {
- writer.uint32(32).bool(message.compressed);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): FileTransferBlock {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseFileTransferBlock();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.id = reader.int32();
- break;
- case 2:
- message.file_num = reader.sint32();
- break;
- case 3:
- message.data = reader.bytes();
- break;
- case 4:
- message.compressed = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): FileTransferBlock {
- return {
- id: isSet(object.id) ? Number(object.id) : 0,
- file_num: isSet(object.file_num) ? Number(object.file_num) : 0,
- data: isSet(object.data)
- ? bytesFromBase64(object.data)
- : new Uint8Array(),
- compressed: isSet(object.compressed) ? Boolean(object.compressed) : false,
- };
- },
-
- toJSON(message: FileTransferBlock): unknown {
- const obj: any = {};
- message.id !== undefined && (obj.id = Math.round(message.id));
- message.file_num !== undefined &&
- (obj.file_num = Math.round(message.file_num));
- message.data !== undefined &&
- (obj.data = base64FromBytes(
- message.data !== undefined ? message.data : new Uint8Array()
- ));
- message.compressed !== undefined && (obj.compressed = message.compressed);
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): FileTransferBlock {
- const message = createBaseFileTransferBlock();
- message.id = object.id ?? 0;
- message.file_num = object.file_num ?? 0;
- message.data = object.data ?? new Uint8Array();
- message.compressed = object.compressed ?? false;
- return message;
- },
-};
-
-function createBaseFileTransferError(): FileTransferError {
- return { id: 0, error: "", file_num: 0 };
-}
-
-export const FileTransferError = {
- encode(
- message: FileTransferError,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.id !== 0) {
- writer.uint32(8).int32(message.id);
- }
- if (message.error !== "") {
- writer.uint32(18).string(message.error);
- }
- if (message.file_num !== 0) {
- writer.uint32(24).sint32(message.file_num);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): FileTransferError {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseFileTransferError();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.id = reader.int32();
- break;
- case 2:
- message.error = reader.string();
- break;
- case 3:
- message.file_num = reader.sint32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): FileTransferError {
- return {
- id: isSet(object.id) ? Number(object.id) : 0,
- error: isSet(object.error) ? String(object.error) : "",
- file_num: isSet(object.file_num) ? Number(object.file_num) : 0,
- };
- },
-
- toJSON(message: FileTransferError): unknown {
- const obj: any = {};
- message.id !== undefined && (obj.id = Math.round(message.id));
- message.error !== undefined && (obj.error = message.error);
- message.file_num !== undefined &&
- (obj.file_num = Math.round(message.file_num));
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): FileTransferError {
- const message = createBaseFileTransferError();
- message.id = object.id ?? 0;
- message.error = object.error ?? "";
- message.file_num = object.file_num ?? 0;
- return message;
- },
-};
-
-function createBaseFileTransferSendRequest(): FileTransferSendRequest {
- return { id: 0, path: "", include_hidden: false };
-}
-
-export const FileTransferSendRequest = {
- encode(
- message: FileTransferSendRequest,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.id !== 0) {
- writer.uint32(8).int32(message.id);
- }
- if (message.path !== "") {
- writer.uint32(18).string(message.path);
- }
- if (message.include_hidden === true) {
- writer.uint32(24).bool(message.include_hidden);
- }
- return writer;
- },
-
- decode(
- input: _m0.Reader | Uint8Array,
- length?: number
- ): FileTransferSendRequest {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseFileTransferSendRequest();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.id = reader.int32();
- break;
- case 2:
- message.path = reader.string();
- break;
- case 3:
- message.include_hidden = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): FileTransferSendRequest {
- return {
- id: isSet(object.id) ? Number(object.id) : 0,
- path: isSet(object.path) ? String(object.path) : "",
- include_hidden: isSet(object.include_hidden)
- ? Boolean(object.include_hidden)
- : false,
- };
- },
-
- toJSON(message: FileTransferSendRequest): unknown {
- const obj: any = {};
- message.id !== undefined && (obj.id = Math.round(message.id));
- message.path !== undefined && (obj.path = message.path);
- message.include_hidden !== undefined &&
- (obj.include_hidden = message.include_hidden);
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): FileTransferSendRequest {
- const message = createBaseFileTransferSendRequest();
- message.id = object.id ?? 0;
- message.path = object.path ?? "";
- message.include_hidden = object.include_hidden ?? false;
- return message;
- },
-};
-
-function createBaseFileTransferDone(): FileTransferDone {
- return { id: 0, file_num: 0 };
-}
-
-export const FileTransferDone = {
- encode(
- message: FileTransferDone,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.id !== 0) {
- writer.uint32(8).int32(message.id);
- }
- if (message.file_num !== 0) {
- writer.uint32(16).sint32(message.file_num);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): FileTransferDone {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseFileTransferDone();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.id = reader.int32();
- break;
- case 2:
- message.file_num = reader.sint32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): FileTransferDone {
- return {
- id: isSet(object.id) ? Number(object.id) : 0,
- file_num: isSet(object.file_num) ? Number(object.file_num) : 0,
- };
- },
-
- toJSON(message: FileTransferDone): unknown {
- const obj: any = {};
- message.id !== undefined && (obj.id = Math.round(message.id));
- message.file_num !== undefined &&
- (obj.file_num = Math.round(message.file_num));
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): FileTransferDone {
- const message = createBaseFileTransferDone();
- message.id = object.id ?? 0;
- message.file_num = object.file_num ?? 0;
- return message;
- },
-};
-
-function createBaseFileTransferReceiveRequest(): FileTransferReceiveRequest {
- return { id: 0, path: "", files: [] };
-}
-
-export const FileTransferReceiveRequest = {
- encode(
- message: FileTransferReceiveRequest,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.id !== 0) {
- writer.uint32(8).int32(message.id);
- }
- if (message.path !== "") {
- writer.uint32(18).string(message.path);
- }
- for (const v of message.files) {
- FileEntry.encode(v!, writer.uint32(26).fork()).ldelim();
- }
- return writer;
- },
-
- decode(
- input: _m0.Reader | Uint8Array,
- length?: number
- ): FileTransferReceiveRequest {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseFileTransferReceiveRequest();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.id = reader.int32();
- break;
- case 2:
- message.path = reader.string();
- break;
- case 3:
- message.files.push(FileEntry.decode(reader, reader.uint32()));
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): FileTransferReceiveRequest {
- return {
- id: isSet(object.id) ? Number(object.id) : 0,
- path: isSet(object.path) ? String(object.path) : "",
- files: Array.isArray(object?.files)
- ? object.files.map((e: any) => FileEntry.fromJSON(e))
- : [],
- };
- },
-
- toJSON(message: FileTransferReceiveRequest): unknown {
- const obj: any = {};
- message.id !== undefined && (obj.id = Math.round(message.id));
- message.path !== undefined && (obj.path = message.path);
- if (message.files) {
- obj.files = message.files.map((e) =>
- e ? FileEntry.toJSON(e) : undefined
- );
- } else {
- obj.files = [];
- }
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): FileTransferReceiveRequest {
- const message = createBaseFileTransferReceiveRequest();
- message.id = object.id ?? 0;
- message.path = object.path ?? "";
- message.files = object.files?.map((e) => FileEntry.fromPartial(e)) || [];
- return message;
- },
-};
-
-function createBaseFileRemoveDir(): FileRemoveDir {
- return { id: 0, path: "", recursive: false };
-}
-
-export const FileRemoveDir = {
- encode(
- message: FileRemoveDir,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.id !== 0) {
- writer.uint32(8).int32(message.id);
- }
- if (message.path !== "") {
- writer.uint32(18).string(message.path);
- }
- if (message.recursive === true) {
- writer.uint32(24).bool(message.recursive);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): FileRemoveDir {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseFileRemoveDir();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.id = reader.int32();
- break;
- case 2:
- message.path = reader.string();
- break;
- case 3:
- message.recursive = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): FileRemoveDir {
- return {
- id: isSet(object.id) ? Number(object.id) : 0,
- path: isSet(object.path) ? String(object.path) : "",
- recursive: isSet(object.recursive) ? Boolean(object.recursive) : false,
- };
- },
-
- toJSON(message: FileRemoveDir): unknown {
- const obj: any = {};
- message.id !== undefined && (obj.id = Math.round(message.id));
- message.path !== undefined && (obj.path = message.path);
- message.recursive !== undefined && (obj.recursive = message.recursive);
- return obj;
- },
-
- fromPartial, I>>(
- object: I
- ): FileRemoveDir {
- const message = createBaseFileRemoveDir();
- message.id = object.id ?? 0;
- message.path = object.path ?? "";
- message.recursive = object.recursive ?? false;
- return message;
- },
-};
-
-function createBaseFileRemoveFile(): FileRemoveFile {
- return { id: 0, path: "", file_num: 0 };
-}
-
-export const FileRemoveFile = {
- encode(
- message: FileRemoveFile,
- writer: _m0.Writer = _m0.Writer.create()
- ): _m0.Writer {
- if (message.id !== 0) {
- writer.uint32(8).int32(message.id);
- }
- if (message.path !== "") {
- writer.uint32(18).string(message.path);
- }
- if (message.file_num !== 0) {
- writer.uint32(24).sint32(message.file_num);
- }
- return writer;
- },
-
- decode(input: _m0.Reader | Uint8Array, length?: number): FileRemoveFile {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseFileRemoveFile();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.id = reader.int32();
- break;
- case 2:
- message.path = reader.string();
- break;
- case 3:
- message.file_num = reader.sint32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
-
- fromJSON(object: any): FileRemoveFile {
- return {
- id: isSet(object.id) ? Number(object.id) : 0,
- path: isSet(object.path) ? String(object.path) : "",
- file_num: isSet(object.file_num) ? Number(object.file_num) : 0,
- };
- },
-
- toJSON(message: FileRemoveFile): unknown {
- const obj: any = {};
- message.id !== undefined && (obj.id = Math.round(message.id));
- message.path !== undefined && (obj.path = message.path);
- message.file_num !== undefined &&
- (obj.file_num = Math.round(message.file_num));
- return obj;
- },
-
- fromPartial