qt-human 4.5.0 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ import{m as e,E as t,a as i}from"./shared-B8GMYqdg.js";import{L as A,T as n}from"./render-BVt5WHX2.js";import*as s from"three";var r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function a(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function o(e){if(e.__esModule)return e;var t=e.default;if("function"==typeof t){var i=function e(){return this instanceof e?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};i.prototype=t.prototype}else i={};return Object.defineProperty(i,"__esModule",{value:!0}),Object.keys(e).forEach((function(t){var A=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(i,t,A.get?A:{enumerable:!0,get:function(){return e[t]}})})),i}var c={exports:{}};var l,h={exports:{}},g=o(Object.freeze({__proto__:null,default:{}}));function d(){return l||(l=1,h.exports=function(){var e=e||function(e,t){var i;if("undefined"!=typeof window&&window.crypto&&(i=window.crypto),"undefined"!=typeof self&&self.crypto&&(i=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(i=globalThis.crypto),!i&&"undefined"!=typeof window&&window.msCrypto&&(i=window.msCrypto),!i&&void 0!==r&&r.crypto&&(i=r.crypto),!i)try{i=g}catch(e){}var A=function(){if(i){if("function"==typeof i.getRandomValues)try{return i.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof i.randomBytes)try{return i.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")},n=Object.create||function(){function e(){}return function(t){var i;return e.prototype=t,i=new e,e.prototype=null,i}}(),s={},a=s.lib={},o=a.Base={extend:function(e){var t=n(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},c=a.WordArray=o.extend({init:function(e,i){e=this.words=e||[],this.sigBytes=i!=t?i:4*e.length},toString:function(e){return(e||h).stringify(this)},concat:function(e){var t=this.words,i=e.words,A=this.sigBytes,n=e.sigBytes;if(this.clamp(),A%4)for(var s=0;s<n;s++){var r=i[s>>>2]>>>24-s%4*8&255;t[A+s>>>2]|=r<<24-(A+s)%4*8}else for(var a=0;a<n;a+=4)t[A+a>>>2]=i[a>>>2];return this.sigBytes+=n,this},clamp:function(){var t=this.words,i=this.sigBytes;t[i>>>2]&=4294967295<<32-i%4*8,t.length=e.ceil(i/4)},clone:function(){var e=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],i=0;i<e;i+=4)t.push(A());return new c.init(t,e)}}),l=s.enc={},h=l.Hex={stringify:function(e){for(var t=e.words,i=e.sigBytes,A=[],n=0;n<i;n++){var s=t[n>>>2]>>>24-n%4*8&255;A.push((s>>>4).toString(16)),A.push((15&s).toString(16))}return A.join("")},parse:function(e){for(var t=e.length,i=[],A=0;A<t;A+=2)i[A>>>3]|=parseInt(e.substr(A,2),16)<<24-A%8*4;return new c.init(i,t/2)}},d=l.Latin1={stringify:function(e){for(var t=e.words,i=e.sigBytes,A=[],n=0;n<i;n++){var s=t[n>>>2]>>>24-n%4*8&255;A.push(String.fromCharCode(s))}return A.join("")},parse:function(e){for(var t=e.length,i=[],A=0;A<t;A++)i[A>>>2]|=(255&e.charCodeAt(A))<<24-A%4*8;return new c.init(i,t)}},u=l.Utf8={stringify:function(e){try{return decodeURIComponent(escape(d.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return d.parse(unescape(encodeURIComponent(e)))}},I=a.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=u.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var i,A=this._data,n=A.words,s=A.sigBytes,r=this.blockSize,a=s/(4*r),o=(a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0))*r,l=e.min(4*o,s);if(o){for(var h=0;h<o;h+=r)this._doProcessBlock(n,h);i=n.splice(0,o),A.sigBytes-=l}return new c.init(i,l)},clone:function(){var e=o.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});a.Hasher=I.extend({cfg:o.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){I.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,i){return new e.init(i).finalize(t)}},_createHmacHelper:function(e){return function(t,i){return new C.HMAC.init(e,i).finalize(t)}}});var C=s.algo={};return s}(Math);return e}()),h.exports}var u,I={exports:{}};function C(){return u||(u=1,I.exports=function(e){return A=(i=e).lib,n=A.Base,s=A.WordArray,(r=i.x64={}).Word=n.extend({init:function(e,t){this.high=e,this.low=t}}),r.WordArray=n.extend({init:function(e,i){e=this.words=e||[],this.sigBytes=i!=t?i:8*e.length},toX32:function(){for(var e=this.words,t=e.length,i=[],A=0;A<t;A++){var n=e[A];i.push(n.high),i.push(n.low)}return s.create(i,this.sigBytes)},clone:function(){for(var e=n.clone.call(this),t=e.words=this.words.slice(0),i=t.length,A=0;A<i;A++)t[A]=t[A].clone();return e}}),e;var t,i,A,n,s,r}(d())),I.exports}var f,E={exports:{}};function p(){return f||(f=1,E.exports=function(e){return function(){if("function"==typeof ArrayBuffer){var t=e.lib.WordArray,i=t.init,A=t.init=function(e){if(e instanceof ArrayBuffer&&(e=new Uint8Array(e)),(e instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&e instanceof Uint8ClampedArray||e instanceof Int16Array||e instanceof Uint16Array||e instanceof Int32Array||e instanceof Uint32Array||e instanceof Float32Array||e instanceof Float64Array)&&(e=new Uint8Array(e.buffer,e.byteOffset,e.byteLength)),e instanceof Uint8Array){for(var t=e.byteLength,A=[],n=0;n<t;n++)A[n>>>2]|=e[n]<<24-n%4*8;i.call(this,A,t)}else i.apply(this,arguments)};A.prototype=t}}(),e.lib.WordArray}(d())),E.exports}var B,Q={exports:{}};function m(){return B||(B=1,Q.exports=function(e){return function(){var t=e,i=t.lib.WordArray,A=t.enc;function n(e){return e<<8&4278255360|e>>>8&16711935}A.Utf16=A.Utf16BE={stringify:function(e){for(var t=e.words,i=e.sigBytes,A=[],n=0;n<i;n+=2){var s=t[n>>>2]>>>16-n%4*8&65535;A.push(String.fromCharCode(s))}return A.join("")},parse:function(e){for(var t=e.length,A=[],n=0;n<t;n++)A[n>>>1]|=e.charCodeAt(n)<<16-n%2*16;return i.create(A,2*t)}},A.Utf16LE={stringify:function(e){for(var t=e.words,i=e.sigBytes,A=[],s=0;s<i;s+=2){var r=n(t[s>>>2]>>>16-s%4*8&65535);A.push(String.fromCharCode(r))}return A.join("")},parse:function(e){for(var t=e.length,A=[],s=0;s<t;s++)A[s>>>1]|=n(e.charCodeAt(s)<<16-s%2*16);return i.create(A,2*t)}}}(),e.enc.Utf16}(d())),Q.exports}var y,w={exports:{}};function S(){return y||(y=1,w.exports=function(e){return function(){var t=e,i=t.lib.WordArray;function A(e,t,A){for(var n=[],s=0,r=0;r<t;r++)if(r%4){var a=A[e.charCodeAt(r-1)]<<r%4*2|A[e.charCodeAt(r)]>>>6-r%4*2;n[s>>>2]|=a<<24-s%4*8,s++}return i.create(n,s)}t.enc.Base64={stringify:function(e){var t=e.words,i=e.sigBytes,A=this._map;e.clamp();for(var n=[],s=0;s<i;s+=3)for(var r=(t[s>>>2]>>>24-s%4*8&255)<<16|(t[s+1>>>2]>>>24-(s+1)%4*8&255)<<8|t[s+2>>>2]>>>24-(s+2)%4*8&255,a=0;a<4&&s+.75*a<i;a++)n.push(A.charAt(r>>>6*(3-a)&63));var o=A.charAt(64);if(o)for(;n.length%4;)n.push(o);return n.join("")},parse:function(e){var t=e.length,i=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var s=0;s<i.length;s++)n[i.charCodeAt(s)]=s}var r=i.charAt(64);if(r){var a=e.indexOf(r);-1!==a&&(t=a)}return A(e,t,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),e.enc.Base64}(d())),w.exports}var _,T={exports:{}};function D(){return _||(_=1,T.exports=function(e){return function(){var t=e,i=t.lib.WordArray;function A(e,t,A){for(var n=[],s=0,r=0;r<t;r++)if(r%4){var a=A[e.charCodeAt(r-1)]<<r%4*2|A[e.charCodeAt(r)]>>>6-r%4*2;n[s>>>2]|=a<<24-s%4*8,s++}return i.create(n,s)}t.enc.Base64url={stringify:function(e,t){void 0===t&&(t=!0);var i=e.words,A=e.sigBytes,n=t?this._safe_map:this._map;e.clamp();for(var s=[],r=0;r<A;r+=3)for(var a=(i[r>>>2]>>>24-r%4*8&255)<<16|(i[r+1>>>2]>>>24-(r+1)%4*8&255)<<8|i[r+2>>>2]>>>24-(r+2)%4*8&255,o=0;o<4&&r+.75*o<A;o++)s.push(n.charAt(a>>>6*(3-o)&63));var c=n.charAt(64);if(c)for(;s.length%4;)s.push(c);return s.join("")},parse:function(e,t){void 0===t&&(t=!0);var i=e.length,n=t?this._safe_map:this._map,s=this._reverseMap;if(!s){s=this._reverseMap=[];for(var r=0;r<n.length;r++)s[n.charCodeAt(r)]=r}var a=n.charAt(64);if(a){var o=e.indexOf(a);-1!==o&&(i=o)}return A(e,i,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",_safe_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"}}(),e.enc.Base64url}(d())),T.exports}var b,R={exports:{}};function v(){return b||(b=1,R.exports=function(e){return function(t){var i=e,A=i.lib,n=A.WordArray,s=A.Hasher,r=i.algo,a=[];!function(){for(var e=0;e<64;e++)a[e]=4294967296*t.abs(t.sin(e+1))|0}();var o=r.MD5=s.extend({_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,t){for(var i=0;i<16;i++){var A=t+i,n=e[A];e[A]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var s=this._hash.words,r=e[t+0],o=e[t+1],d=e[t+2],u=e[t+3],I=e[t+4],C=e[t+5],f=e[t+6],E=e[t+7],p=e[t+8],B=e[t+9],Q=e[t+10],m=e[t+11],y=e[t+12],w=e[t+13],S=e[t+14],_=e[t+15],T=s[0],D=s[1],b=s[2],R=s[3];T=c(T,D,b,R,r,7,a[0]),R=c(R,T,D,b,o,12,a[1]),b=c(b,R,T,D,d,17,a[2]),D=c(D,b,R,T,u,22,a[3]),T=c(T,D,b,R,I,7,a[4]),R=c(R,T,D,b,C,12,a[5]),b=c(b,R,T,D,f,17,a[6]),D=c(D,b,R,T,E,22,a[7]),T=c(T,D,b,R,p,7,a[8]),R=c(R,T,D,b,B,12,a[9]),b=c(b,R,T,D,Q,17,a[10]),D=c(D,b,R,T,m,22,a[11]),T=c(T,D,b,R,y,7,a[12]),R=c(R,T,D,b,w,12,a[13]),b=c(b,R,T,D,S,17,a[14]),T=l(T,D=c(D,b,R,T,_,22,a[15]),b,R,o,5,a[16]),R=l(R,T,D,b,f,9,a[17]),b=l(b,R,T,D,m,14,a[18]),D=l(D,b,R,T,r,20,a[19]),T=l(T,D,b,R,C,5,a[20]),R=l(R,T,D,b,Q,9,a[21]),b=l(b,R,T,D,_,14,a[22]),D=l(D,b,R,T,I,20,a[23]),T=l(T,D,b,R,B,5,a[24]),R=l(R,T,D,b,S,9,a[25]),b=l(b,R,T,D,u,14,a[26]),D=l(D,b,R,T,p,20,a[27]),T=l(T,D,b,R,w,5,a[28]),R=l(R,T,D,b,d,9,a[29]),b=l(b,R,T,D,E,14,a[30]),T=h(T,D=l(D,b,R,T,y,20,a[31]),b,R,C,4,a[32]),R=h(R,T,D,b,p,11,a[33]),b=h(b,R,T,D,m,16,a[34]),D=h(D,b,R,T,S,23,a[35]),T=h(T,D,b,R,o,4,a[36]),R=h(R,T,D,b,I,11,a[37]),b=h(b,R,T,D,E,16,a[38]),D=h(D,b,R,T,Q,23,a[39]),T=h(T,D,b,R,w,4,a[40]),R=h(R,T,D,b,r,11,a[41]),b=h(b,R,T,D,u,16,a[42]),D=h(D,b,R,T,f,23,a[43]),T=h(T,D,b,R,B,4,a[44]),R=h(R,T,D,b,y,11,a[45]),b=h(b,R,T,D,_,16,a[46]),T=g(T,D=h(D,b,R,T,d,23,a[47]),b,R,r,6,a[48]),R=g(R,T,D,b,E,10,a[49]),b=g(b,R,T,D,S,15,a[50]),D=g(D,b,R,T,C,21,a[51]),T=g(T,D,b,R,y,6,a[52]),R=g(R,T,D,b,u,10,a[53]),b=g(b,R,T,D,Q,15,a[54]),D=g(D,b,R,T,o,21,a[55]),T=g(T,D,b,R,p,6,a[56]),R=g(R,T,D,b,_,10,a[57]),b=g(b,R,T,D,f,15,a[58]),D=g(D,b,R,T,w,21,a[59]),T=g(T,D,b,R,I,6,a[60]),R=g(R,T,D,b,m,10,a[61]),b=g(b,R,T,D,d,15,a[62]),D=g(D,b,R,T,B,21,a[63]),s[0]=s[0]+T|0,s[1]=s[1]+D|0,s[2]=s[2]+b|0,s[3]=s[3]+R|0},_doFinalize:function(){var e=this._data,i=e.words,A=8*this._nDataBytes,n=8*e.sigBytes;i[n>>>5]|=128<<24-n%32;var s=t.floor(A/4294967296),r=A;i[15+(n+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),i[14+(n+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),e.sigBytes=4*(i.length+1),this._process();for(var a=this._hash,o=a.words,c=0;c<4;c++){var l=o[c];o[c]=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8)}return a},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});function c(e,t,i,A,n,s,r){var a=e+(t&i|~t&A)+n+r;return(a<<s|a>>>32-s)+t}function l(e,t,i,A,n,s,r){var a=e+(t&A|i&~A)+n+r;return(a<<s|a>>>32-s)+t}function h(e,t,i,A,n,s,r){var a=e+(t^i^A)+n+r;return(a<<s|a>>>32-s)+t}function g(e,t,i,A,n,s,r){var a=e+(i^(t|~A))+n+r;return(a<<s|a>>>32-s)+t}i.MD5=s._createHelper(o),i.HmacMD5=s._createHmacHelper(o)}(Math),e.MD5}(d())),R.exports}var k,x={exports:{}};function P(){return k||(k=1,x.exports=function(e){return i=(t=e).lib,A=i.WordArray,n=i.Hasher,s=t.algo,r=[],a=s.SHA1=n.extend({_doReset:function(){this._hash=new A.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var i=this._hash.words,A=i[0],n=i[1],s=i[2],a=i[3],o=i[4],c=0;c<80;c++){if(c<16)r[c]=0|e[t+c];else{var l=r[c-3]^r[c-8]^r[c-14]^r[c-16];r[c]=l<<1|l>>>31}var h=(A<<5|A>>>27)+o+r[c];h+=c<20?1518500249+(n&s|~n&a):c<40?1859775393+(n^s^a):c<60?(n&s|n&a|s&a)-1894007588:(n^s^a)-899497514,o=a,a=s,s=n<<30|n>>>2,n=A,A=h}i[0]=i[0]+A|0,i[1]=i[1]+n|0,i[2]=i[2]+s|0,i[3]=i[3]+a|0,i[4]=i[4]+o|0},_doFinalize:function(){var e=this._data,t=e.words,i=8*this._nDataBytes,A=8*e.sigBytes;return t[A>>>5]|=128<<24-A%32,t[14+(A+64>>>9<<4)]=Math.floor(i/4294967296),t[15+(A+64>>>9<<4)]=i,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=n.clone.call(this);return e._hash=this._hash.clone(),e}}),t.SHA1=n._createHelper(a),t.HmacSHA1=n._createHmacHelper(a),e.SHA1;var t,i,A,n,s,r,a}(d())),x.exports}var F,M={exports:{}};function N(){return F||(F=1,M.exports=function(e){return function(t){var i=e,A=i.lib,n=A.WordArray,s=A.Hasher,r=i.algo,a=[],o=[];!function(){function e(e){for(var i=t.sqrt(e),A=2;A<=i;A++)if(!(e%A))return!1;return!0}function i(e){return 4294967296*(e-(0|e))|0}for(var A=2,n=0;n<64;)e(A)&&(n<8&&(a[n]=i(t.pow(A,.5))),o[n]=i(t.pow(A,1/3)),n++),A++}();var c=[],l=r.SHA256=s.extend({_doReset:function(){this._hash=new n.init(a.slice(0))},_doProcessBlock:function(e,t){for(var i=this._hash.words,A=i[0],n=i[1],s=i[2],r=i[3],a=i[4],l=i[5],h=i[6],g=i[7],d=0;d<64;d++){if(d<16)c[d]=0|e[t+d];else{var u=c[d-15],I=(u<<25|u>>>7)^(u<<14|u>>>18)^u>>>3,C=c[d-2],f=(C<<15|C>>>17)^(C<<13|C>>>19)^C>>>10;c[d]=I+c[d-7]+f+c[d-16]}var E=A&n^A&s^n&s,p=(A<<30|A>>>2)^(A<<19|A>>>13)^(A<<10|A>>>22),B=g+((a<<26|a>>>6)^(a<<21|a>>>11)^(a<<7|a>>>25))+(a&l^~a&h)+o[d]+c[d];g=h,h=l,l=a,a=r+B|0,r=s,s=n,n=A,A=B+(p+E)|0}i[0]=i[0]+A|0,i[1]=i[1]+n|0,i[2]=i[2]+s|0,i[3]=i[3]+r|0,i[4]=i[4]+a|0,i[5]=i[5]+l|0,i[6]=i[6]+h|0,i[7]=i[7]+g|0},_doFinalize:function(){var e=this._data,i=e.words,A=8*this._nDataBytes,n=8*e.sigBytes;return i[n>>>5]|=128<<24-n%32,i[14+(n+64>>>9<<4)]=t.floor(A/4294967296),i[15+(n+64>>>9<<4)]=A,e.sigBytes=4*i.length,this._process(),this._hash},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});i.SHA256=s._createHelper(l),i.HmacSHA256=s._createHmacHelper(l)}(Math),e.SHA256}(d())),M.exports}var L,U={exports:{}};var G,O={exports:{}};function J(){return G||(G=1,O.exports=function(e){return function(){var t=e,i=t.lib.Hasher,A=t.x64,n=A.Word,s=A.WordArray,r=t.algo;function a(){return n.create.apply(n,arguments)}var o=[a(1116352408,3609767458),a(1899447441,602891725),a(3049323471,3964484399),a(3921009573,2173295548),a(961987163,4081628472),a(1508970993,3053834265),a(2453635748,2937671579),a(2870763221,3664609560),a(3624381080,2734883394),a(310598401,1164996542),a(607225278,1323610764),a(1426881987,3590304994),a(1925078388,4068182383),a(2162078206,991336113),a(2614888103,633803317),a(3248222580,3479774868),a(3835390401,2666613458),a(4022224774,944711139),a(264347078,2341262773),a(604807628,2007800933),a(770255983,1495990901),a(1249150122,1856431235),a(1555081692,3175218132),a(1996064986,2198950837),a(2554220882,3999719339),a(2821834349,766784016),a(2952996808,2566594879),a(3210313671,3203337956),a(3336571891,1034457026),a(3584528711,2466948901),a(113926993,3758326383),a(338241895,168717936),a(666307205,1188179964),a(773529912,1546045734),a(1294757372,1522805485),a(1396182291,2643833823),a(1695183700,2343527390),a(1986661051,1014477480),a(2177026350,1206759142),a(2456956037,344077627),a(2730485921,1290863460),a(2820302411,3158454273),a(3259730800,3505952657),a(3345764771,106217008),a(3516065817,3606008344),a(3600352804,1432725776),a(4094571909,1467031594),a(275423344,851169720),a(430227734,3100823752),a(506948616,1363258195),a(659060556,3750685593),a(883997877,3785050280),a(958139571,3318307427),a(1322822218,3812723403),a(1537002063,2003034995),a(1747873779,3602036899),a(1955562222,1575990012),a(2024104815,1125592928),a(2227730452,2716904306),a(2361852424,442776044),a(2428436474,593698344),a(2756734187,3733110249),a(3204031479,2999351573),a(3329325298,3815920427),a(3391569614,3928383900),a(3515267271,566280711),a(3940187606,3454069534),a(4118630271,4000239992),a(116418474,1914138554),a(174292421,2731055270),a(289380356,3203993006),a(460393269,320620315),a(685471733,587496836),a(852142971,1086792851),a(1017036298,365543100),a(1126000580,2618297676),a(1288033470,3409855158),a(1501505948,4234509866),a(1607167915,987167468),a(1816402316,1246189591)],c=[];!function(){for(var e=0;e<80;e++)c[e]=a()}();var l=r.SHA512=i.extend({_doReset:function(){this._hash=new s.init([new n.init(1779033703,4089235720),new n.init(3144134277,2227873595),new n.init(1013904242,4271175723),new n.init(2773480762,1595750129),new n.init(1359893119,2917565137),new n.init(2600822924,725511199),new n.init(528734635,4215389547),new n.init(1541459225,327033209)])},_doProcessBlock:function(e,t){for(var i=this._hash.words,A=i[0],n=i[1],s=i[2],r=i[3],a=i[4],l=i[5],h=i[6],g=i[7],d=A.high,u=A.low,I=n.high,C=n.low,f=s.high,E=s.low,p=r.high,B=r.low,Q=a.high,m=a.low,y=l.high,w=l.low,S=h.high,_=h.low,T=g.high,D=g.low,b=d,R=u,v=I,k=C,x=f,P=E,F=p,M=B,N=Q,L=m,U=y,G=w,O=S,J=_,q=T,K=D,H=0;H<80;H++){var W,Y,z=c[H];if(H<16)Y=z.high=0|e[t+2*H],W=z.low=0|e[t+2*H+1];else{var j=c[H-15],V=j.high,Z=j.low,X=(V>>>1|Z<<31)^(V>>>8|Z<<24)^V>>>7,$=(Z>>>1|V<<31)^(Z>>>8|V<<24)^(Z>>>7|V<<25),ee=c[H-2],te=ee.high,ie=ee.low,Ae=(te>>>19|ie<<13)^(te<<3|ie>>>29)^te>>>6,ne=(ie>>>19|te<<13)^(ie<<3|te>>>29)^(ie>>>6|te<<26),se=c[H-7],re=se.high,ae=se.low,oe=c[H-16],ce=oe.high,le=oe.low;Y=(Y=(Y=X+re+((W=$+ae)>>>0<$>>>0?1:0))+Ae+((W+=ne)>>>0<ne>>>0?1:0))+ce+((W+=le)>>>0<le>>>0?1:0),z.high=Y,z.low=W}var he,ge=N&U^~N&O,de=L&G^~L&J,ue=b&v^b&x^v&x,Ie=R&k^R&P^k&P,Ce=(b>>>28|R<<4)^(b<<30|R>>>2)^(b<<25|R>>>7),fe=(R>>>28|b<<4)^(R<<30|b>>>2)^(R<<25|b>>>7),Ee=(N>>>14|L<<18)^(N>>>18|L<<14)^(N<<23|L>>>9),pe=(L>>>14|N<<18)^(L>>>18|N<<14)^(L<<23|N>>>9),Be=o[H],Qe=Be.high,me=Be.low,ye=q+Ee+((he=K+pe)>>>0<K>>>0?1:0),we=fe+Ie;q=O,K=J,O=U,J=G,U=N,G=L,N=F+(ye=(ye=(ye=ye+ge+((he+=de)>>>0<de>>>0?1:0))+Qe+((he+=me)>>>0<me>>>0?1:0))+Y+((he+=W)>>>0<W>>>0?1:0))+((L=M+he|0)>>>0<M>>>0?1:0)|0,F=x,M=P,x=v,P=k,v=b,k=R,b=ye+(Ce+ue+(we>>>0<fe>>>0?1:0))+((R=he+we|0)>>>0<he>>>0?1:0)|0}u=A.low=u+R,A.high=d+b+(u>>>0<R>>>0?1:0),C=n.low=C+k,n.high=I+v+(C>>>0<k>>>0?1:0),E=s.low=E+P,s.high=f+x+(E>>>0<P>>>0?1:0),B=r.low=B+M,r.high=p+F+(B>>>0<M>>>0?1:0),m=a.low=m+L,a.high=Q+N+(m>>>0<L>>>0?1:0),w=l.low=w+G,l.high=y+U+(w>>>0<G>>>0?1:0),_=h.low=_+J,h.high=S+O+(_>>>0<J>>>0?1:0),D=g.low=D+K,g.high=T+q+(D>>>0<K>>>0?1:0)},_doFinalize:function(){var e=this._data,t=e.words,i=8*this._nDataBytes,A=8*e.sigBytes;return t[A>>>5]|=128<<24-A%32,t[30+(A+128>>>10<<5)]=Math.floor(i/4294967296),t[31+(A+128>>>10<<5)]=i,e.sigBytes=4*t.length,this._process(),this._hash.toX32()},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e},blockSize:32});t.SHA512=i._createHelper(l),t.HmacSHA512=i._createHmacHelper(l)}(),e.SHA512}(d(),C())),O.exports}var q,K={exports:{}};var H,W={exports:{}};function Y(){return H||(H=1,W.exports=function(e){return function(t){var i=e,A=i.lib,n=A.WordArray,s=A.Hasher,r=i.x64.Word,a=i.algo,o=[],c=[],l=[];!function(){for(var e=1,t=0,i=0;i<24;i++){o[e+5*t]=(i+1)*(i+2)/2%64;var A=(2*e+3*t)%5;e=t%5,t=A}for(e=0;e<5;e++)for(t=0;t<5;t++)c[e+5*t]=t+(2*e+3*t)%5*5;for(var n=1,s=0;s<24;s++){for(var a=0,h=0,g=0;g<7;g++){if(1&n){var d=(1<<g)-1;d<32?h^=1<<d:a^=1<<d-32}128&n?n=n<<1^113:n<<=1}l[s]=r.create(a,h)}}();var h=[];!function(){for(var e=0;e<25;e++)h[e]=r.create()}();var g=a.SHA3=s.extend({cfg:s.cfg.extend({outputLength:512}),_doReset:function(){for(var e=this._state=[],t=0;t<25;t++)e[t]=new r.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(e,t){for(var i=this._state,A=this.blockSize/2,n=0;n<A;n++){var s=e[t+2*n],r=e[t+2*n+1];s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),r=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),(D=i[n]).high^=r,D.low^=s}for(var a=0;a<24;a++){for(var g=0;g<5;g++){for(var d=0,u=0,I=0;I<5;I++)d^=(D=i[g+5*I]).high,u^=D.low;var C=h[g];C.high=d,C.low=u}for(g=0;g<5;g++){var f=h[(g+4)%5],E=h[(g+1)%5],p=E.high,B=E.low;for(d=f.high^(p<<1|B>>>31),u=f.low^(B<<1|p>>>31),I=0;I<5;I++)(D=i[g+5*I]).high^=d,D.low^=u}for(var Q=1;Q<25;Q++){var m=(D=i[Q]).high,y=D.low,w=o[Q];w<32?(d=m<<w|y>>>32-w,u=y<<w|m>>>32-w):(d=y<<w-32|m>>>64-w,u=m<<w-32|y>>>64-w);var S=h[c[Q]];S.high=d,S.low=u}var _=h[0],T=i[0];for(_.high=T.high,_.low=T.low,g=0;g<5;g++)for(I=0;I<5;I++){var D=i[Q=g+5*I],b=h[Q],R=h[(g+1)%5+5*I],v=h[(g+2)%5+5*I];D.high=b.high^~R.high&v.high,D.low=b.low^~R.low&v.low}D=i[0];var k=l[a];D.high^=k.high,D.low^=k.low}},_doFinalize:function(){var e=this._data,i=e.words;this._nDataBytes;var A=8*e.sigBytes,s=32*this.blockSize;i[A>>>5]|=1<<24-A%32,i[(t.ceil((A+1)/s)*s>>>5)-1]|=128,e.sigBytes=4*i.length,this._process();for(var r=this._state,a=this.cfg.outputLength/8,o=a/8,c=[],l=0;l<o;l++){var h=r[l],g=h.high,d=h.low;g=16711935&(g<<8|g>>>24)|4278255360&(g<<24|g>>>8),d=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8),c.push(d),c.push(g)}return new n.init(c,a)},clone:function(){for(var e=s.clone.call(this),t=e._state=this._state.slice(0),i=0;i<25;i++)t[i]=t[i].clone();return e}});i.SHA3=s._createHelper(g),i.HmacSHA3=s._createHmacHelper(g)}(Math),e.SHA3}(d(),C())),W.exports}var z,j={exports:{}};var V,Z={exports:{}};function X(){return V||(V=1,Z.exports=function(e){var t,i,A;i=(t=e).lib.Base,A=t.enc.Utf8,t.algo.HMAC=i.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=A.parse(t));var i=e.blockSize,n=4*i;t.sigBytes>n&&(t=e.finalize(t)),t.clamp();for(var s=this._oKey=t.clone(),r=this._iKey=t.clone(),a=s.words,o=r.words,c=0;c<i;c++)a[c]^=1549556828,o[c]^=909522486;s.sigBytes=r.sigBytes=n,this.reset()},reset:function(){var e=this._hasher;e.reset(),e.update(this._iKey)},update:function(e){return this._hasher.update(e),this},finalize:function(e){var t=this._hasher,i=t.finalize(e);return t.reset(),t.finalize(this._oKey.clone().concat(i))}})}(d())),Z.exports}var $,ee={exports:{}};var te,ie={exports:{}};function Ae(){return te||(te=1,ie.exports=function(e){return i=(t=e).lib,A=i.Base,n=i.WordArray,s=t.algo,r=s.MD5,a=s.EvpKDF=A.extend({cfg:A.extend({keySize:4,hasher:r,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var i,A=this.cfg,s=A.hasher.create(),r=n.create(),a=r.words,o=A.keySize,c=A.iterations;a.length<o;){i&&s.update(i),i=s.update(e).finalize(t),s.reset();for(var l=1;l<c;l++)i=s.finalize(i),s.reset();r.concat(i)}return r.sigBytes=4*o,r}}),t.EvpKDF=function(e,t,i){return a.create(i).compute(e,t)},e.EvpKDF;var t,i,A,n,s,r,a}(d(),P(),X())),ie.exports}var ne,se={exports:{}};function re(){return ne||(ne=1,se.exports=function(e){e.lib.Cipher||function(t){var i=e,A=i.lib,n=A.Base,s=A.WordArray,r=A.BufferedBlockAlgorithm,a=i.enc;a.Utf8;var o=a.Base64,c=i.algo.EvpKDF,l=A.Cipher=r.extend({cfg:n.extend(),createEncryptor:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,i){this.cfg=this.cfg.extend(i),this._xformMode=e,this._key=t,this.reset()},reset:function(){r.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){return e&&this._append(e),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function e(e){return"string"==typeof e?p:f}return function(t){return{encrypt:function(i,A,n){return e(A).encrypt(t,i,A,n)},decrypt:function(i,A,n){return e(A).decrypt(t,i,A,n)}}}}()});A.StreamCipher=l.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var h=i.mode={},g=A.BlockCipherMode=n.extend({createEncryptor:function(e,t){return this.Encryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}}),d=h.CBC=function(){var e=g.extend();function i(e,i,A){var n,s=this._iv;s?(n=s,this._iv=t):n=this._prevBlock;for(var r=0;r<A;r++)e[i+r]^=n[r]}return e.Encryptor=e.extend({processBlock:function(e,t){var A=this._cipher,n=A.blockSize;i.call(this,e,t,n),A.encryptBlock(e,t),this._prevBlock=e.slice(t,t+n)}}),e.Decryptor=e.extend({processBlock:function(e,t){var A=this._cipher,n=A.blockSize,s=e.slice(t,t+n);A.decryptBlock(e,t),i.call(this,e,t,n),this._prevBlock=s}}),e}(),u=(i.pad={}).Pkcs7={pad:function(e,t){for(var i=4*t,A=i-e.sigBytes%i,n=A<<24|A<<16|A<<8|A,r=[],a=0;a<A;a+=4)r.push(n);var o=s.create(r,A);e.concat(o)},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}};A.BlockCipher=l.extend({cfg:l.cfg.extend({mode:d,padding:u}),reset:function(){var e;l.reset.call(this);var t=this.cfg,i=t.iv,A=t.mode;this._xformMode==this._ENC_XFORM_MODE?e=A.createEncryptor:(e=A.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==e?this._mode.init(this,i&&i.words):(this._mode=e.call(A,this,i&&i.words),this._mode.__creator=e)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e,t=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(t.pad(this._data,this.blockSize),e=this._process(!0)):(e=this._process(!0),t.unpad(e)),e},blockSize:4});var I=A.CipherParams=n.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),C=(i.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext,i=e.salt;return(i?s.create([1398893684,1701076831]).concat(i).concat(t):t).toString(o)},parse:function(e){var t,i=o.parse(e),A=i.words;return 1398893684==A[0]&&1701076831==A[1]&&(t=s.create(A.slice(2,4)),A.splice(0,4),i.sigBytes-=16),I.create({ciphertext:i,salt:t})}},f=A.SerializableCipher=n.extend({cfg:n.extend({format:C}),encrypt:function(e,t,i,A){A=this.cfg.extend(A);var n=e.createEncryptor(i,A),s=n.finalize(t),r=n.cfg;return I.create({ciphertext:s,key:i,iv:r.iv,algorithm:e,mode:r.mode,padding:r.padding,blockSize:e.blockSize,formatter:A.format})},decrypt:function(e,t,i,A){return A=this.cfg.extend(A),t=this._parse(t,A.format),e.createDecryptor(i,A).finalize(t.ciphertext)},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}}),E=(i.kdf={}).OpenSSL={execute:function(e,t,i,A,n){if(A||(A=s.random(8)),n)r=c.create({keySize:t+i,hasher:n}).compute(e,A);else var r=c.create({keySize:t+i}).compute(e,A);var a=s.create(r.words.slice(t),4*i);return r.sigBytes=4*t,I.create({key:r,iv:a,salt:A})}},p=A.PasswordBasedCipher=f.extend({cfg:f.cfg.extend({kdf:E}),encrypt:function(e,t,i,A){var n=(A=this.cfg.extend(A)).kdf.execute(i,e.keySize,e.ivSize,A.salt,A.hasher);A.iv=n.iv;var s=f.encrypt.call(this,e,t,n.key,A);return s.mixIn(n),s},decrypt:function(e,t,i,A){A=this.cfg.extend(A),t=this._parse(t,A.format);var n=A.kdf.execute(i,e.keySize,e.ivSize,t.salt,A.hasher);return A.iv=n.iv,f.decrypt.call(this,e,t,n.key,A)}})}()}(d(),Ae())),se.exports}var ae,oe={exports:{}};function ce(){return ae||(ae=1,oe.exports=function(e){return e.mode.CFB=function(){var t=e.lib.BlockCipherMode.extend();function i(e,t,i,A){var n,s=this._iv;s?(n=s.slice(0),this._iv=void 0):n=this._prevBlock,A.encryptBlock(n,0);for(var r=0;r<i;r++)e[t+r]^=n[r]}return t.Encryptor=t.extend({processBlock:function(e,t){var A=this._cipher,n=A.blockSize;i.call(this,e,t,n,A),this._prevBlock=e.slice(t,t+n)}}),t.Decryptor=t.extend({processBlock:function(e,t){var A=this._cipher,n=A.blockSize,s=e.slice(t,t+n);i.call(this,e,t,n,A),this._prevBlock=s}}),t}(),e.mode.CFB}(d(),re())),oe.exports}var le,he={exports:{}};function ge(){return le||(le=1,he.exports=function(e){return e.mode.CTR=(t=e.lib.BlockCipherMode.extend(),i=t.Encryptor=t.extend({processBlock:function(e,t){var i=this._cipher,A=i.blockSize,n=this._iv,s=this._counter;n&&(s=this._counter=n.slice(0),this._iv=void 0);var r=s.slice(0);i.encryptBlock(r,0),s[A-1]=s[A-1]+1|0;for(var a=0;a<A;a++)e[t+a]^=r[a]}}),t.Decryptor=i,t),e.mode.CTR;var t,i}(d(),re())),he.exports}var de,ue={exports:{}};function Ie(){return de||(de=1,ue.exports=function(e){return e.mode.CTRGladman=function(){var t=e.lib.BlockCipherMode.extend();function i(e){if(255&~(e>>24))e+=1<<24;else{var t=e>>16&255,i=e>>8&255,A=255&e;255===t?(t=0,255===i?(i=0,255===A?A=0:++A):++i):++t,e=0,e+=t<<16,e+=i<<8,e+=A}return e}function A(e){return 0===(e[0]=i(e[0]))&&(e[1]=i(e[1])),e}var n=t.Encryptor=t.extend({processBlock:function(e,t){var i=this._cipher,n=i.blockSize,s=this._iv,r=this._counter;s&&(r=this._counter=s.slice(0),this._iv=void 0),A(r);var a=r.slice(0);i.encryptBlock(a,0);for(var o=0;o<n;o++)e[t+o]^=a[o]}});return t.Decryptor=n,t}(),e.mode.CTRGladman}(d(),re())),ue.exports}var Ce,fe={exports:{}};function Ee(){return Ce||(Ce=1,fe.exports=function(e){return e.mode.OFB=(t=e.lib.BlockCipherMode.extend(),i=t.Encryptor=t.extend({processBlock:function(e,t){var i=this._cipher,A=i.blockSize,n=this._iv,s=this._keystream;n&&(s=this._keystream=n.slice(0),this._iv=void 0),i.encryptBlock(s,0);for(var r=0;r<A;r++)e[t+r]^=s[r]}}),t.Decryptor=i,t),e.mode.OFB;var t,i}(d(),re())),fe.exports}var pe,Be={exports:{}};var Qe,me={exports:{}};var ye,we={exports:{}};var Se,_e={exports:{}};var Te,De={exports:{}};var be,Re={exports:{}};var ve,ke={exports:{}};var xe,Pe={exports:{}};var Fe,Me={exports:{}};function Ne(){return Fe||(Fe=1,Me.exports=function(e){return function(){var t=e,i=t.lib,A=i.WordArray,n=i.BlockCipher,s=t.algo,r=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],a=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],o=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],c=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],l=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],h=s.DES=n.extend({_doReset:function(){for(var e=this._key.words,t=[],i=0;i<56;i++){var A=r[i]-1;t[i]=e[A>>>5]>>>31-A%32&1}for(var n=this._subKeys=[],s=0;s<16;s++){var c=n[s]=[],l=o[s];for(i=0;i<24;i++)c[i/6|0]|=t[(a[i]-1+l)%28]<<31-i%6,c[4+(i/6|0)]|=t[28+(a[i+24]-1+l)%28]<<31-i%6;for(c[0]=c[0]<<1|c[0]>>>31,i=1;i<7;i++)c[i]=c[i]>>>4*(i-1)+3;c[7]=c[7]<<5|c[7]>>>27}var h=this._invSubKeys=[];for(i=0;i<16;i++)h[i]=n[15-i]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._subKeys)},decryptBlock:function(e,t){this._doCryptBlock(e,t,this._invSubKeys)},_doCryptBlock:function(e,t,i){this._lBlock=e[t],this._rBlock=e[t+1],g.call(this,4,252645135),g.call(this,16,65535),d.call(this,2,858993459),d.call(this,8,16711935),g.call(this,1,1431655765);for(var A=0;A<16;A++){for(var n=i[A],s=this._lBlock,r=this._rBlock,a=0,o=0;o<8;o++)a|=c[o][((r^n[o])&l[o])>>>0];this._lBlock=r,this._rBlock=s^a}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,g.call(this,1,1431655765),d.call(this,8,16711935),d.call(this,2,858993459),g.call(this,16,65535),g.call(this,4,252645135),e[t]=this._lBlock,e[t+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function g(e,t){var i=(this._lBlock>>>e^this._rBlock)&t;this._rBlock^=i,this._lBlock^=i<<e}function d(e,t){var i=(this._rBlock>>>e^this._lBlock)&t;this._lBlock^=i,this._rBlock^=i<<e}t.DES=n._createHelper(h);var u=s.TripleDES=n.extend({_doReset:function(){var e=this._key.words;if(2!==e.length&&4!==e.length&&e.length<6)throw new Error("Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.");var t=e.slice(0,2),i=e.length<4?e.slice(0,2):e.slice(2,4),n=e.length<6?e.slice(0,2):e.slice(4,6);this._des1=h.createEncryptor(A.create(t)),this._des2=h.createEncryptor(A.create(i)),this._des3=h.createEncryptor(A.create(n))},encryptBlock:function(e,t){this._des1.encryptBlock(e,t),this._des2.decryptBlock(e,t),this._des3.encryptBlock(e,t)},decryptBlock:function(e,t){this._des3.decryptBlock(e,t),this._des2.encryptBlock(e,t),this._des1.decryptBlock(e,t)},keySize:6,ivSize:2,blockSize:2});t.TripleDES=n._createHelper(u)}(),e.TripleDES}(d(),S(),v(),Ae(),re())),Me.exports}var Le,Ue={exports:{}};var Ge,Oe={exports:{}};var Je,qe={exports:{}};var Ke,He={exports:{}};function We(){return Ke||(Ke=1,He.exports=function(e){return function(){var t=e,i=t.lib.BlockCipher,A=t.algo;const n=16,s=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],r=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]];var a={pbox:[],sbox:[]};function o(e,t){let i=t>>24&255,A=t>>16&255,n=t>>8&255,s=255&t,r=e.sbox[0][i]+e.sbox[1][A];return r^=e.sbox[2][n],r+=e.sbox[3][s],r}function c(e,t,i){let A,s=t,r=i;for(let t=0;t<n;++t)s^=e.pbox[t],r=o(e,s)^r,A=s,s=r,r=A;return A=s,s=r,r=A,r^=e.pbox[n],s^=e.pbox[n+1],{left:s,right:r}}function l(e,t,i){let A,s=t,r=i;for(let t=n+1;t>1;--t)s^=e.pbox[t],r=o(e,s)^r,A=s,s=r,r=A;return A=s,s=r,r=A,r^=e.pbox[1],s^=e.pbox[0],{left:s,right:r}}function h(e,t,i){for(let t=0;t<4;t++){e.sbox[t]=[];for(let i=0;i<256;i++)e.sbox[t][i]=r[t][i]}let A=0;for(let r=0;r<n+2;r++)e.pbox[r]=s[r]^t[A],A++,A>=i&&(A=0);let a=0,o=0,l=0;for(let t=0;t<n+2;t+=2)l=c(e,a,o),a=l.left,o=l.right,e.pbox[t]=a,e.pbox[t+1]=o;for(let t=0;t<4;t++)for(let i=0;i<256;i+=2)l=c(e,a,o),a=l.left,o=l.right,e.sbox[t][i]=a,e.sbox[t][i+1]=o;return!0}var g=A.Blowfish=i.extend({_doReset:function(){if(this._keyPriorReset!==this._key){var e=this._keyPriorReset=this._key,t=e.words,i=e.sigBytes/4;h(a,t,i)}},encryptBlock:function(e,t){var i=c(a,e[t],e[t+1]);e[t]=i.left,e[t+1]=i.right},decryptBlock:function(e,t){var i=l(a,e[t],e[t+1]);e[t]=i.left,e[t+1]=i.right},blockSize:2,keySize:4,ivSize:2});t.Blowfish=i._createHelper(g)}(),e.Blowfish}(d(),S(),v(),Ae(),re())),He.exports}c.exports=function(e){return e}(d(),C(),p(),m(),S(),D(),v(),P(),N(),L||(L=1,U.exports=function(e){return i=(t=e).lib.WordArray,A=t.algo,n=A.SHA256,s=A.SHA224=n.extend({_doReset:function(){this._hash=new i.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var e=n._doFinalize.call(this);return e.sigBytes-=4,e}}),t.SHA224=n._createHelper(s),t.HmacSHA224=n._createHmacHelper(s),e.SHA224;var t,i,A,n,s}(d(),N())),J(),q||(q=1,K.exports=function(e){return i=(t=e).x64,A=i.Word,n=i.WordArray,s=t.algo,r=s.SHA512,a=s.SHA384=r.extend({_doReset:function(){this._hash=new n.init([new A.init(3418070365,3238371032),new A.init(1654270250,914150663),new A.init(2438529370,812702999),new A.init(355462360,4144912697),new A.init(1731405415,4290775857),new A.init(2394180231,1750603025),new A.init(3675008525,1694076839),new A.init(1203062813,3204075428)])},_doFinalize:function(){var e=r._doFinalize.call(this);return e.sigBytes-=16,e}}),t.SHA384=r._createHelper(a),t.HmacSHA384=r._createHmacHelper(a),e.SHA384;var t,i,A,n,s,r,a}(d(),C(),J())),Y(),z||(z=1,j.exports=function(e){return function(t){var i=e,A=i.lib,n=A.WordArray,s=A.Hasher,r=i.algo,a=n.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),o=n.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),c=n.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),l=n.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),h=n.create([0,1518500249,1859775393,2400959708,2840853838]),g=n.create([1352829926,1548603684,1836072691,2053994217,0]),d=r.RIPEMD160=s.extend({_doReset:function(){this._hash=n.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var i=0;i<16;i++){var A=t+i,n=e[A];e[A]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var s,r,d,B,Q,m,y,w,S,_,T,D=this._hash.words,b=h.words,R=g.words,v=a.words,k=o.words,x=c.words,P=l.words;for(m=s=D[0],y=r=D[1],w=d=D[2],S=B=D[3],_=Q=D[4],i=0;i<80;i+=1)T=s+e[t+v[i]]|0,T+=i<16?u(r,d,B)+b[0]:i<32?I(r,d,B)+b[1]:i<48?C(r,d,B)+b[2]:i<64?f(r,d,B)+b[3]:E(r,d,B)+b[4],T=(T=p(T|=0,x[i]))+Q|0,s=Q,Q=B,B=p(d,10),d=r,r=T,T=m+e[t+k[i]]|0,T+=i<16?E(y,w,S)+R[0]:i<32?f(y,w,S)+R[1]:i<48?C(y,w,S)+R[2]:i<64?I(y,w,S)+R[3]:u(y,w,S)+R[4],T=(T=p(T|=0,P[i]))+_|0,m=_,_=S,S=p(w,10),w=y,y=T;T=D[1]+d+S|0,D[1]=D[2]+B+_|0,D[2]=D[3]+Q+m|0,D[3]=D[4]+s+y|0,D[4]=D[0]+r+w|0,D[0]=T},_doFinalize:function(){var e=this._data,t=e.words,i=8*this._nDataBytes,A=8*e.sigBytes;t[A>>>5]|=128<<24-A%32,t[14+(A+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),e.sigBytes=4*(t.length+1),this._process();for(var n=this._hash,s=n.words,r=0;r<5;r++){var a=s[r];s[r]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}return n},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});function u(e,t,i){return e^t^i}function I(e,t,i){return e&t|~e&i}function C(e,t,i){return(e|~t)^i}function f(e,t,i){return e&i|t&~i}function E(e,t,i){return e^(t|~i)}function p(e,t){return e<<t|e>>>32-t}i.RIPEMD160=s._createHelper(d),i.HmacRIPEMD160=s._createHmacHelper(d)}(),e.RIPEMD160}(d())),X(),$||($=1,ee.exports=function(e){return A=(i=(t=e).lib).Base,n=i.WordArray,r=(s=t.algo).SHA256,a=s.HMAC,o=s.PBKDF2=A.extend({cfg:A.extend({keySize:4,hasher:r,iterations:25e4}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var i=this.cfg,A=a.create(i.hasher,e),s=n.create(),r=n.create([1]),o=s.words,c=r.words,l=i.keySize,h=i.iterations;o.length<l;){var g=A.update(t).finalize(r);A.reset();for(var d=g.words,u=d.length,I=g,C=1;C<h;C++){I=A.finalize(I),A.reset();for(var f=I.words,E=0;E<u;E++)d[E]^=f[E]}s.concat(g),c[0]++}return s.sigBytes=4*l,s}}),t.PBKDF2=function(e,t,i){return o.create(i).compute(e,t)},e.PBKDF2;var t,i,A,n,s,r,a,o}(d(),N(),X())),Ae(),re(),ce(),ge(),Ie(),Ee(),pe||(pe=1,Be.exports=function(e){return e.mode.ECB=((t=e.lib.BlockCipherMode.extend()).Encryptor=t.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),t.Decryptor=t.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),t),e.mode.ECB;var t}(d(),re())),Qe||(Qe=1,me.exports=function(e){return e.pad.AnsiX923={pad:function(e,t){var i=e.sigBytes,A=4*t,n=A-i%A,s=i+n-1;e.clamp(),e.words[s>>>2]|=n<<24-s%4*8,e.sigBytes+=n},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},e.pad.Ansix923}(d(),re())),ye||(ye=1,we.exports=function(e){return e.pad.Iso10126={pad:function(t,i){var A=4*i,n=A-t.sigBytes%A;t.concat(e.lib.WordArray.random(n-1)).concat(e.lib.WordArray.create([n<<24],1))},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},e.pad.Iso10126}(d(),re())),Se||(Se=1,_e.exports=function(e){return e.pad.Iso97971={pad:function(t,i){t.concat(e.lib.WordArray.create([2147483648],1)),e.pad.ZeroPadding.pad(t,i)},unpad:function(t){e.pad.ZeroPadding.unpad(t),t.sigBytes--}},e.pad.Iso97971}(d(),re())),Te||(Te=1,De.exports=function(e){return e.pad.ZeroPadding={pad:function(e,t){var i=4*t;e.clamp(),e.sigBytes+=i-(e.sigBytes%i||i)},unpad:function(e){var t=e.words,i=e.sigBytes-1;for(i=e.sigBytes-1;i>=0;i--)if(t[i>>>2]>>>24-i%4*8&255){e.sigBytes=i+1;break}}},e.pad.ZeroPadding}(d(),re())),be||(be=1,Re.exports=function(e){return e.pad.NoPadding={pad:function(){},unpad:function(){}},e.pad.NoPadding}(d(),re())),ve||(ve=1,ke.exports=function(e){return i=(t=e).lib.CipherParams,A=t.enc.Hex,t.format.Hex={stringify:function(e){return e.ciphertext.toString(A)},parse:function(e){var t=A.parse(e);return i.create({ciphertext:t})}},e.format.Hex;var t,i,A}(d(),re())),xe||(xe=1,Pe.exports=function(e){return function(){var t=e,i=t.lib.BlockCipher,A=t.algo,n=[],s=[],r=[],a=[],o=[],c=[],l=[],h=[],g=[],d=[];!function(){for(var e=[],t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;var i=0,A=0;for(t=0;t<256;t++){var u=A^A<<1^A<<2^A<<3^A<<4;u=u>>>8^255&u^99,n[i]=u,s[u]=i;var I=e[i],C=e[I],f=e[C],E=257*e[u]^16843008*u;r[i]=E<<24|E>>>8,a[i]=E<<16|E>>>16,o[i]=E<<8|E>>>24,c[i]=E,E=16843009*f^65537*C^257*I^16843008*i,l[u]=E<<24|E>>>8,h[u]=E<<16|E>>>16,g[u]=E<<8|E>>>24,d[u]=E,i?(i=I^e[e[e[f^I]]],A^=e[e[A]]):i=A=1}}();var u=[0,1,2,4,8,16,32,64,128,27,54],I=A.AES=i.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,t=e.words,i=e.sigBytes/4,A=4*((this._nRounds=i+6)+1),s=this._keySchedule=[],r=0;r<A;r++)r<i?s[r]=t[r]:(c=s[r-1],r%i?i>6&&r%i==4&&(c=n[c>>>24]<<24|n[c>>>16&255]<<16|n[c>>>8&255]<<8|n[255&c]):(c=n[(c=c<<8|c>>>24)>>>24]<<24|n[c>>>16&255]<<16|n[c>>>8&255]<<8|n[255&c],c^=u[r/i|0]<<24),s[r]=s[r-i]^c);for(var a=this._invKeySchedule=[],o=0;o<A;o++){if(r=A-o,o%4)var c=s[r];else c=s[r-4];a[o]=o<4||r<=4?c:l[n[c>>>24]]^h[n[c>>>16&255]]^g[n[c>>>8&255]]^d[n[255&c]]}}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,r,a,o,c,n)},decryptBlock:function(e,t){var i=e[t+1];e[t+1]=e[t+3],e[t+3]=i,this._doCryptBlock(e,t,this._invKeySchedule,l,h,g,d,s),i=e[t+1],e[t+1]=e[t+3],e[t+3]=i},_doCryptBlock:function(e,t,i,A,n,s,r,a){for(var o=this._nRounds,c=e[t]^i[0],l=e[t+1]^i[1],h=e[t+2]^i[2],g=e[t+3]^i[3],d=4,u=1;u<o;u++){var I=A[c>>>24]^n[l>>>16&255]^s[h>>>8&255]^r[255&g]^i[d++],C=A[l>>>24]^n[h>>>16&255]^s[g>>>8&255]^r[255&c]^i[d++],f=A[h>>>24]^n[g>>>16&255]^s[c>>>8&255]^r[255&l]^i[d++],E=A[g>>>24]^n[c>>>16&255]^s[l>>>8&255]^r[255&h]^i[d++];c=I,l=C,h=f,g=E}I=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[h>>>8&255]<<8|a[255&g])^i[d++],C=(a[l>>>24]<<24|a[h>>>16&255]<<16|a[g>>>8&255]<<8|a[255&c])^i[d++],f=(a[h>>>24]<<24|a[g>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^i[d++],E=(a[g>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&h])^i[d++],e[t]=I,e[t+1]=C,e[t+2]=f,e[t+3]=E},keySize:8});t.AES=i._createHelper(I)}(),e.AES}(d(),S(),v(),Ae(),re())),Ne(),Le||(Le=1,Ue.exports=function(e){return function(){var t=e,i=t.lib.StreamCipher,A=t.algo,n=A.RC4=i.extend({_doReset:function(){for(var e=this._key,t=e.words,i=e.sigBytes,A=this._S=[],n=0;n<256;n++)A[n]=n;n=0;for(var s=0;n<256;n++){var r=n%i,a=t[r>>>2]>>>24-r%4*8&255;s=(s+A[n]+a)%256;var o=A[n];A[n]=A[s],A[s]=o}this._i=this._j=0},_doProcessBlock:function(e,t){e[t]^=s.call(this)},keySize:8,ivSize:0});function s(){for(var e=this._S,t=this._i,i=this._j,A=0,n=0;n<4;n++){i=(i+e[t=(t+1)%256])%256;var s=e[t];e[t]=e[i],e[i]=s,A|=e[(e[t]+e[i])%256]<<24-8*n}return this._i=t,this._j=i,A}t.RC4=i._createHelper(n);var r=A.RC4Drop=n.extend({cfg:n.cfg.extend({drop:192}),_doReset:function(){n._doReset.call(this);for(var e=this.cfg.drop;e>0;e--)s.call(this)}});t.RC4Drop=i._createHelper(r)}(),e.RC4}(d(),S(),v(),Ae(),re())),Ge||(Ge=1,Oe.exports=function(e){return function(){var t=e,i=t.lib.StreamCipher,A=t.algo,n=[],s=[],r=[],a=A.Rabbit=i.extend({_doReset:function(){for(var e=this._key.words,t=this.cfg.iv,i=0;i<4;i++)e[i]=16711935&(e[i]<<8|e[i]>>>24)|4278255360&(e[i]<<24|e[i]>>>8);var A=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],n=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];for(this._b=0,i=0;i<4;i++)o.call(this);for(i=0;i<8;i++)n[i]^=A[i+4&7];if(t){var s=t.words,r=s[0],a=s[1],c=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),l=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=c>>>16|4294901760&l,g=l<<16|65535&c;for(n[0]^=c,n[1]^=h,n[2]^=l,n[3]^=g,n[4]^=c,n[5]^=h,n[6]^=l,n[7]^=g,i=0;i<4;i++)o.call(this)}},_doProcessBlock:function(e,t){var i=this._X;o.call(this),n[0]=i[0]^i[5]>>>16^i[3]<<16,n[1]=i[2]^i[7]>>>16^i[5]<<16,n[2]=i[4]^i[1]>>>16^i[7]<<16,n[3]=i[6]^i[3]>>>16^i[1]<<16;for(var A=0;A<4;A++)n[A]=16711935&(n[A]<<8|n[A]>>>24)|4278255360&(n[A]<<24|n[A]>>>8),e[t+A]^=n[A]},blockSize:4,ivSize:2});function o(){for(var e=this._X,t=this._C,i=0;i<8;i++)s[i]=t[i];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0<s[0]>>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0<s[1]>>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0<s[2]>>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0<s[3]>>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0<s[4]>>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0<s[5]>>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0<s[6]>>>0?1:0)|0,this._b=t[7]>>>0<s[7]>>>0?1:0,i=0;i<8;i++){var A=e[i]+t[i],n=65535&A,a=A>>>16,o=((n*n>>>17)+n*a>>>15)+a*a,c=((4294901760&A)*A|0)+((65535&A)*A|0);r[i]=o^c}e[0]=r[0]+(r[7]<<16|r[7]>>>16)+(r[6]<<16|r[6]>>>16)|0,e[1]=r[1]+(r[0]<<8|r[0]>>>24)+r[7]|0,e[2]=r[2]+(r[1]<<16|r[1]>>>16)+(r[0]<<16|r[0]>>>16)|0,e[3]=r[3]+(r[2]<<8|r[2]>>>24)+r[1]|0,e[4]=r[4]+(r[3]<<16|r[3]>>>16)+(r[2]<<16|r[2]>>>16)|0,e[5]=r[5]+(r[4]<<8|r[4]>>>24)+r[3]|0,e[6]=r[6]+(r[5]<<16|r[5]>>>16)+(r[4]<<16|r[4]>>>16)|0,e[7]=r[7]+(r[6]<<8|r[6]>>>24)+r[5]|0}t.Rabbit=i._createHelper(a)}(),e.Rabbit}(d(),S(),v(),Ae(),re())),Je||(Je=1,qe.exports=function(e){return function(){var t=e,i=t.lib.StreamCipher,A=t.algo,n=[],s=[],r=[],a=A.RabbitLegacy=i.extend({_doReset:function(){var e=this._key.words,t=this.cfg.iv,i=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],A=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];this._b=0;for(var n=0;n<4;n++)o.call(this);for(n=0;n<8;n++)A[n]^=i[n+4&7];if(t){var s=t.words,r=s[0],a=s[1],c=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),l=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=c>>>16|4294901760&l,g=l<<16|65535&c;for(A[0]^=c,A[1]^=h,A[2]^=l,A[3]^=g,A[4]^=c,A[5]^=h,A[6]^=l,A[7]^=g,n=0;n<4;n++)o.call(this)}},_doProcessBlock:function(e,t){var i=this._X;o.call(this),n[0]=i[0]^i[5]>>>16^i[3]<<16,n[1]=i[2]^i[7]>>>16^i[5]<<16,n[2]=i[4]^i[1]>>>16^i[7]<<16,n[3]=i[6]^i[3]>>>16^i[1]<<16;for(var A=0;A<4;A++)n[A]=16711935&(n[A]<<8|n[A]>>>24)|4278255360&(n[A]<<24|n[A]>>>8),e[t+A]^=n[A]},blockSize:4,ivSize:2});function o(){for(var e=this._X,t=this._C,i=0;i<8;i++)s[i]=t[i];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0<s[0]>>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0<s[1]>>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0<s[2]>>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0<s[3]>>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0<s[4]>>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0<s[5]>>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0<s[6]>>>0?1:0)|0,this._b=t[7]>>>0<s[7]>>>0?1:0,i=0;i<8;i++){var A=e[i]+t[i],n=65535&A,a=A>>>16,o=((n*n>>>17)+n*a>>>15)+a*a,c=((4294901760&A)*A|0)+((65535&A)*A|0);r[i]=o^c}e[0]=r[0]+(r[7]<<16|r[7]>>>16)+(r[6]<<16|r[6]>>>16)|0,e[1]=r[1]+(r[0]<<8|r[0]>>>24)+r[7]|0,e[2]=r[2]+(r[1]<<16|r[1]>>>16)+(r[0]<<16|r[0]>>>16)|0,e[3]=r[3]+(r[2]<<8|r[2]>>>24)+r[1]|0,e[4]=r[4]+(r[3]<<16|r[3]>>>16)+(r[2]<<16|r[2]>>>16)|0,e[5]=r[5]+(r[4]<<8|r[4]>>>24)+r[3]|0,e[6]=r[6]+(r[5]<<16|r[5]>>>16)+(r[4]<<16|r[4]>>>16)|0,e[7]=r[7]+(r[6]<<8|r[6]>>>24)+r[5]|0}t.RabbitLegacy=i._createHelper(a)}(),e.RabbitLegacy}(d(),S(),v(),Ae(),re())),We());var Ye=a(c.exports),ze={salt:"muRcN7xuzLM8vQRw",iv:"WiUWpE647DRVN5rE"};function je(e){let t=e.length;for(;--t>=0;)e[t]=0}const Ve=256,Ze=286,Xe=30,$e=15,et=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),tt=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),it=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),At=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),nt=new Array(576);je(nt);const st=new Array(60);je(st);const rt=new Array(512);je(rt);const at=new Array(256);je(at);const ot=new Array(29);je(ot);const ct=new Array(Xe);function lt(e,t,i,A,n){this.static_tree=e,this.extra_bits=t,this.extra_base=i,this.elems=A,this.max_length=n,this.has_stree=e&&e.length}let ht,gt,dt;function ut(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}je(ct);const It=e=>e<256?rt[e]:rt[256+(e>>>7)],Ct=(e,t)=>{e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255},ft=(e,t,i)=>{e.bi_valid>16-i?(e.bi_buf|=t<<e.bi_valid&65535,Ct(e,e.bi_buf),e.bi_buf=t>>16-e.bi_valid,e.bi_valid+=i-16):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=i)},Et=(e,t,i)=>{ft(e,i[2*t],i[2*t+1])},pt=(e,t)=>{let i=0;do{i|=1&e,e>>>=1,i<<=1}while(--t>0);return i>>>1},Bt=(e,t,i)=>{const A=new Array(16);let n,s,r=0;for(n=1;n<=$e;n++)r=r+i[n-1]<<1,A[n]=r;for(s=0;s<=t;s++){let t=e[2*s+1];0!==t&&(e[2*s]=pt(A[t]++,t))}},Qt=e=>{let t;for(t=0;t<Ze;t++)e.dyn_ltree[2*t]=0;for(t=0;t<Xe;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.sym_next=e.matches=0},mt=e=>{e.bi_valid>8?Ct(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},yt=(e,t,i,A)=>{const n=2*t,s=2*i;return e[n]<e[s]||e[n]===e[s]&&A[t]<=A[i]},wt=(e,t,i)=>{const A=e.heap[i];let n=i<<1;for(;n<=e.heap_len&&(n<e.heap_len&&yt(t,e.heap[n+1],e.heap[n],e.depth)&&n++,!yt(t,A,e.heap[n],e.depth));)e.heap[i]=e.heap[n],i=n,n<<=1;e.heap[i]=A},St=(e,t,i)=>{let A,n,s,r,a=0;if(0!==e.sym_next)do{A=255&e.pending_buf[e.sym_buf+a++],A+=(255&e.pending_buf[e.sym_buf+a++])<<8,n=e.pending_buf[e.sym_buf+a++],0===A?Et(e,n,t):(s=at[n],Et(e,s+Ve+1,t),r=et[s],0!==r&&(n-=ot[s],ft(e,n,r)),A--,s=It(A),Et(e,s,i),r=tt[s],0!==r&&(A-=ct[s],ft(e,A,r)))}while(a<e.sym_next);Et(e,256,t)},_t=(e,t)=>{const i=t.dyn_tree,A=t.stat_desc.static_tree,n=t.stat_desc.has_stree,s=t.stat_desc.elems;let r,a,o,c=-1;for(e.heap_len=0,e.heap_max=573,r=0;r<s;r++)0!==i[2*r]?(e.heap[++e.heap_len]=c=r,e.depth[r]=0):i[2*r+1]=0;for(;e.heap_len<2;)o=e.heap[++e.heap_len]=c<2?++c:0,i[2*o]=1,e.depth[o]=0,e.opt_len--,n&&(e.static_len-=A[2*o+1]);for(t.max_code=c,r=e.heap_len>>1;r>=1;r--)wt(e,i,r);o=s;do{r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],wt(e,i,1),a=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=a,i[2*o]=i[2*r]+i[2*a],e.depth[o]=(e.depth[r]>=e.depth[a]?e.depth[r]:e.depth[a])+1,i[2*r+1]=i[2*a+1]=o,e.heap[1]=o++,wt(e,i,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],((e,t)=>{const i=t.dyn_tree,A=t.max_code,n=t.stat_desc.static_tree,s=t.stat_desc.has_stree,r=t.stat_desc.extra_bits,a=t.stat_desc.extra_base,o=t.stat_desc.max_length;let c,l,h,g,d,u,I=0;for(g=0;g<=$e;g++)e.bl_count[g]=0;for(i[2*e.heap[e.heap_max]+1]=0,c=e.heap_max+1;c<573;c++)l=e.heap[c],g=i[2*i[2*l+1]+1]+1,g>o&&(g=o,I++),i[2*l+1]=g,l>A||(e.bl_count[g]++,d=0,l>=a&&(d=r[l-a]),u=i[2*l],e.opt_len+=u*(g+d),s&&(e.static_len+=u*(n[2*l+1]+d)));if(0!==I){do{for(g=o-1;0===e.bl_count[g];)g--;e.bl_count[g]--,e.bl_count[g+1]+=2,e.bl_count[o]--,I-=2}while(I>0);for(g=o;0!==g;g--)for(l=e.bl_count[g];0!==l;)h=e.heap[--c],h>A||(i[2*h+1]!==g&&(e.opt_len+=(g-i[2*h+1])*i[2*h],i[2*h+1]=g),l--)}})(e,t),Bt(i,c,e.bl_count)},Tt=(e,t,i)=>{let A,n,s=-1,r=t[1],a=0,o=7,c=4;for(0===r&&(o=138,c=3),t[2*(i+1)+1]=65535,A=0;A<=i;A++)n=r,r=t[2*(A+1)+1],++a<o&&n===r||(a<c?e.bl_tree[2*n]+=a:0!==n?(n!==s&&e.bl_tree[2*n]++,e.bl_tree[32]++):a<=10?e.bl_tree[34]++:e.bl_tree[36]++,a=0,s=n,0===r?(o=138,c=3):n===r?(o=6,c=3):(o=7,c=4))},Dt=(e,t,i)=>{let A,n,s=-1,r=t[1],a=0,o=7,c=4;for(0===r&&(o=138,c=3),A=0;A<=i;A++)if(n=r,r=t[2*(A+1)+1],!(++a<o&&n===r)){if(a<c)do{Et(e,n,e.bl_tree)}while(0!=--a);else 0!==n?(n!==s&&(Et(e,n,e.bl_tree),a--),Et(e,16,e.bl_tree),ft(e,a-3,2)):a<=10?(Et(e,17,e.bl_tree),ft(e,a-3,3)):(Et(e,18,e.bl_tree),ft(e,a-11,7));a=0,s=n,0===r?(o=138,c=3):n===r?(o=6,c=3):(o=7,c=4)}};let bt=!1;const Rt=(e,t,i,A)=>{ft(e,0+(A?1:0),3),mt(e),Ct(e,i),Ct(e,~i),i&&e.pending_buf.set(e.window.subarray(t,t+i),e.pending),e.pending+=i};var vt=(e,t,i,A)=>{let n,s,r=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=(e=>{let t,i=4093624447;for(t=0;t<=31;t++,i>>>=1)if(1&i&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<Ve;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0})(e)),_t(e,e.l_desc),_t(e,e.d_desc),r=(e=>{let t;for(Tt(e,e.dyn_ltree,e.l_desc.max_code),Tt(e,e.dyn_dtree,e.d_desc.max_code),_t(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*At[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t})(e),n=e.opt_len+3+7>>>3,s=e.static_len+3+7>>>3,s<=n&&(n=s)):n=s=i+5,i+4<=n&&-1!==t?Rt(e,t,i,A):4===e.strategy||s===n?(ft(e,2+(A?1:0),3),St(e,nt,st)):(ft(e,4+(A?1:0),3),((e,t,i,A)=>{let n;for(ft(e,t-257,5),ft(e,i-1,5),ft(e,A-4,4),n=0;n<A;n++)ft(e,e.bl_tree[2*At[n]+1],3);Dt(e,e.dyn_ltree,t-1),Dt(e,e.dyn_dtree,i-1)})(e,e.l_desc.max_code+1,e.d_desc.max_code+1,r+1),St(e,e.dyn_ltree,e.dyn_dtree)),Qt(e),A&&mt(e)},kt={_tr_init:e=>{bt||((()=>{let e,t,i,A,n;const s=new Array(16);for(i=0,A=0;A<28;A++)for(ot[A]=i,e=0;e<1<<et[A];e++)at[i++]=A;for(at[i-1]=A,n=0,A=0;A<16;A++)for(ct[A]=n,e=0;e<1<<tt[A];e++)rt[n++]=A;for(n>>=7;A<Xe;A++)for(ct[A]=n<<7,e=0;e<1<<tt[A]-7;e++)rt[256+n++]=A;for(t=0;t<=$e;t++)s[t]=0;for(e=0;e<=143;)nt[2*e+1]=8,e++,s[8]++;for(;e<=255;)nt[2*e+1]=9,e++,s[9]++;for(;e<=279;)nt[2*e+1]=7,e++,s[7]++;for(;e<=287;)nt[2*e+1]=8,e++,s[8]++;for(Bt(nt,287,s),e=0;e<Xe;e++)st[2*e+1]=5,st[2*e]=pt(e,5);ht=new lt(nt,et,257,Ze,$e),gt=new lt(st,tt,0,Xe,$e),dt=new lt(new Array(0),it,0,19,7)})(),bt=!0),e.l_desc=new ut(e.dyn_ltree,ht),e.d_desc=new ut(e.dyn_dtree,gt),e.bl_desc=new ut(e.bl_tree,dt),e.bi_buf=0,e.bi_valid=0,Qt(e)},_tr_stored_block:Rt,_tr_flush_block:vt,_tr_tally:(e,t,i)=>(e.pending_buf[e.sym_buf+e.sym_next++]=t,e.pending_buf[e.sym_buf+e.sym_next++]=t>>8,e.pending_buf[e.sym_buf+e.sym_next++]=i,0===t?e.dyn_ltree[2*i]++:(e.matches++,t--,e.dyn_ltree[2*(at[i]+Ve+1)]++,e.dyn_dtree[2*It(t)]++),e.sym_next===e.sym_end),_tr_align:e=>{ft(e,2,3),Et(e,256,nt),(e=>{16===e.bi_valid?(Ct(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)})(e)}};var xt=(e,t,i,A)=>{let n=65535&e,s=e>>>16&65535,r=0;for(;0!==i;){r=i>2e3?2e3:i,i-=r;do{n=n+t[A++]|0,s=s+n|0}while(--r);n%=65521,s%=65521}return n|s<<16};const Pt=new Uint32Array((()=>{let e,t=[];for(var i=0;i<256;i++){e=i;for(var A=0;A<8;A++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t})());var Ft=(e,t,i,A)=>{const n=Pt,s=A+i;e^=-1;for(let i=A;i<s;i++)e=e>>>8^n[255&(e^t[i])];return~e},Mt={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},Nt={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:Lt,_tr_stored_block:Ut,_tr_flush_block:Gt,_tr_tally:Ot,_tr_align:Jt}=kt,{Z_NO_FLUSH:qt,Z_PARTIAL_FLUSH:Kt,Z_FULL_FLUSH:Ht,Z_FINISH:Wt,Z_BLOCK:Yt,Z_OK:zt,Z_STREAM_END:jt,Z_STREAM_ERROR:Vt,Z_DATA_ERROR:Zt,Z_BUF_ERROR:Xt,Z_DEFAULT_COMPRESSION:$t,Z_FILTERED:ei,Z_HUFFMAN_ONLY:ti,Z_RLE:ii,Z_FIXED:Ai,Z_DEFAULT_STRATEGY:ni,Z_UNKNOWN:si,Z_DEFLATED:ri}=Nt,ai=258,oi=262,ci=42,li=113,hi=666,gi=(e,t)=>(e.msg=Mt[t],t),di=e=>2*e-(e>4?9:0),ui=e=>{let t=e.length;for(;--t>=0;)e[t]=0},Ii=e=>{let t,i,A,n=e.w_size;t=e.hash_size,A=t;do{i=e.head[--A],e.head[A]=i>=n?i-n:0}while(--t);t=n,A=t;do{i=e.prev[--A],e.prev[A]=i>=n?i-n:0}while(--t)};let Ci=(e,t,i)=>(t<<e.hash_shift^i)&e.hash_mask;const fi=e=>{const t=e.state;let i=t.pending;i>e.avail_out&&(i=e.avail_out),0!==i&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+i),e.next_out),e.next_out+=i,t.pending_out+=i,e.total_out+=i,e.avail_out-=i,t.pending-=i,0===t.pending&&(t.pending_out=0))},Ei=(e,t)=>{Gt(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,fi(e.strm)},pi=(e,t)=>{e.pending_buf[e.pending++]=t},Bi=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t},Qi=(e,t,i,A)=>{let n=e.avail_in;return n>A&&(n=A),0===n?0:(e.avail_in-=n,t.set(e.input.subarray(e.next_in,e.next_in+n),i),1===e.state.wrap?e.adler=xt(e.adler,t,n,i):2===e.state.wrap&&(e.adler=Ft(e.adler,t,n,i)),e.next_in+=n,e.total_in+=n,n)},mi=(e,t)=>{let i,A,n=e.max_chain_length,s=e.strstart,r=e.prev_length,a=e.nice_match;const o=e.strstart>e.w_size-oi?e.strstart-(e.w_size-oi):0,c=e.window,l=e.w_mask,h=e.prev,g=e.strstart+ai;let d=c[s+r-1],u=c[s+r];e.prev_length>=e.good_match&&(n>>=2),a>e.lookahead&&(a=e.lookahead);do{if(i=t,c[i+r]===u&&c[i+r-1]===d&&c[i]===c[s]&&c[++i]===c[s+1]){s+=2,i++;do{}while(c[++s]===c[++i]&&c[++s]===c[++i]&&c[++s]===c[++i]&&c[++s]===c[++i]&&c[++s]===c[++i]&&c[++s]===c[++i]&&c[++s]===c[++i]&&c[++s]===c[++i]&&s<g);if(A=ai-(g-s),s=g-ai,A>r){if(e.match_start=t,r=A,A>=a)break;d=c[s+r-1],u=c[s+r]}}}while((t=h[t&l])>o&&0!=--n);return r<=e.lookahead?r:e.lookahead},yi=e=>{const t=e.w_size;let i,A,n;do{if(A=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-oi)&&(e.window.set(e.window.subarray(t,t+t-A),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,e.insert>e.strstart&&(e.insert=e.strstart),Ii(e),A+=t),0===e.strm.avail_in)break;if(i=Qi(e.strm,e.window,e.strstart+e.lookahead,A),e.lookahead+=i,e.lookahead+e.insert>=3)for(n=e.strstart-e.insert,e.ins_h=e.window[n],e.ins_h=Ci(e,e.ins_h,e.window[n+1]);e.insert&&(e.ins_h=Ci(e,e.ins_h,e.window[n+3-1]),e.prev[n&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=n,n++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead<oi&&0!==e.strm.avail_in)},wi=(e,t)=>{let i,A,n,s=e.pending_buf_size-5>e.w_size?e.w_size:e.pending_buf_size-5,r=0,a=e.strm.avail_in;do{if(i=65535,n=e.bi_valid+42>>3,e.strm.avail_out<n)break;if(n=e.strm.avail_out-n,A=e.strstart-e.block_start,i>A+e.strm.avail_in&&(i=A+e.strm.avail_in),i>n&&(i=n),i<s&&(0===i&&t!==Wt||t===qt||i!==A+e.strm.avail_in))break;r=t===Wt&&i===A+e.strm.avail_in?1:0,Ut(e,0,0,r),e.pending_buf[e.pending-4]=i,e.pending_buf[e.pending-3]=i>>8,e.pending_buf[e.pending-2]=~i,e.pending_buf[e.pending-1]=~i>>8,fi(e.strm),A&&(A>i&&(A=i),e.strm.output.set(e.window.subarray(e.block_start,e.block_start+A),e.strm.next_out),e.strm.next_out+=A,e.strm.avail_out-=A,e.strm.total_out+=A,e.block_start+=A,i-=A),i&&(Qi(e.strm,e.strm.output,e.strm.next_out,i),e.strm.next_out+=i,e.strm.avail_out-=i,e.strm.total_out+=i)}while(0===r);return a-=e.strm.avail_in,a&&(a>=e.w_size?(e.matches=2,e.window.set(e.strm.input.subarray(e.strm.next_in-e.w_size,e.strm.next_in),0),e.strstart=e.w_size,e.insert=e.strstart):(e.window_size-e.strstart<=a&&(e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,e.insert>e.strstart&&(e.insert=e.strstart)),e.window.set(e.strm.input.subarray(e.strm.next_in-a,e.strm.next_in),e.strstart),e.strstart+=a,e.insert+=a>e.w_size-e.insert?e.w_size-e.insert:a),e.block_start=e.strstart),e.high_water<e.strstart&&(e.high_water=e.strstart),r?4:t!==qt&&t!==Wt&&0===e.strm.avail_in&&e.strstart===e.block_start?2:(n=e.window_size-e.strstart,e.strm.avail_in>n&&e.block_start>=e.w_size&&(e.block_start-=e.w_size,e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,n+=e.w_size,e.insert>e.strstart&&(e.insert=e.strstart)),n>e.strm.avail_in&&(n=e.strm.avail_in),n&&(Qi(e.strm,e.window,e.strstart,n),e.strstart+=n,e.insert+=n>e.w_size-e.insert?e.w_size-e.insert:n),e.high_water<e.strstart&&(e.high_water=e.strstart),n=e.bi_valid+42>>3,n=e.pending_buf_size-n>65535?65535:e.pending_buf_size-n,s=n>e.w_size?e.w_size:n,A=e.strstart-e.block_start,(A>=s||(A||t===Wt)&&t!==qt&&0===e.strm.avail_in&&A<=n)&&(i=A>n?n:A,r=t===Wt&&0===e.strm.avail_in&&i===A?1:0,Ut(e,e.block_start,i,r),e.block_start+=i,fi(e.strm)),r?3:1)},Si=(e,t)=>{let i,A;for(;;){if(e.lookahead<oi){if(yi(e),e.lookahead<oi&&t===qt)return 1;if(0===e.lookahead)break}if(i=0,e.lookahead>=3&&(e.ins_h=Ci(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==i&&e.strstart-i<=e.w_size-oi&&(e.match_length=mi(e,i)),e.match_length>=3)if(A=Ot(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=Ci(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!=--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=Ci(e,e.ins_h,e.window[e.strstart+1]);else A=Ot(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(A&&(Ei(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,t===Wt?(Ei(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Ei(e,!1),0===e.strm.avail_out)?1:2},_i=(e,t)=>{let i,A,n;for(;;){if(e.lookahead<oi){if(yi(e),e.lookahead<oi&&t===qt)return 1;if(0===e.lookahead)break}if(i=0,e.lookahead>=3&&(e.ins_h=Ci(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==i&&e.prev_length<e.max_lazy_match&&e.strstart-i<=e.w_size-oi&&(e.match_length=mi(e,i),e.match_length<=5&&(e.strategy===ei||3===e.match_length&&e.strstart-e.match_start>4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){n=e.strstart+e.lookahead-3,A=Ot(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=n&&(e.ins_h=Ci(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!=--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,A&&(Ei(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if(A=Ot(e,0,e.window[e.strstart-1]),A&&Ei(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(A=Ot(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,t===Wt?(Ei(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Ei(e,!1),0===e.strm.avail_out)?1:2};function Ti(e,t,i,A,n){this.good_length=e,this.max_lazy=t,this.nice_length=i,this.max_chain=A,this.func=n}const Di=[new Ti(0,0,0,0,wi),new Ti(4,4,8,4,Si),new Ti(4,5,16,8,Si),new Ti(4,6,32,32,Si),new Ti(4,4,16,16,_i),new Ti(8,16,32,32,_i),new Ti(8,16,128,128,_i),new Ti(8,32,128,256,_i),new Ti(32,128,258,1024,_i),new Ti(32,258,258,4096,_i)];function bi(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=ri,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),ui(this.dyn_ltree),ui(this.dyn_dtree),ui(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),ui(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),ui(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const Ri=e=>{if(!e)return 1;const t=e.state;return!t||t.strm!==e||t.status!==ci&&57!==t.status&&69!==t.status&&73!==t.status&&91!==t.status&&103!==t.status&&t.status!==li&&t.status!==hi?1:0},vi=e=>{if(Ri(e))return gi(e,Vt);e.total_in=e.total_out=0,e.data_type=si;const t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=2===t.wrap?57:t.wrap?ci:li,e.adler=2===t.wrap?0:1,t.last_flush=-2,Lt(t),zt},ki=e=>{const t=vi(e);var i;return t===zt&&((i=e.state).window_size=2*i.w_size,ui(i.head),i.max_lazy_match=Di[i.level].max_lazy,i.good_match=Di[i.level].good_length,i.nice_match=Di[i.level].nice_length,i.max_chain_length=Di[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=2,i.match_available=0,i.ins_h=0),t},xi=(e,t,i,A,n,s)=>{if(!e)return Vt;let r=1;if(t===$t&&(t=6),A<0?(r=0,A=-A):A>15&&(r=2,A-=16),n<1||n>9||i!==ri||A<8||A>15||t<0||t>9||s<0||s>Ai||8===A&&1!==r)return gi(e,Vt);8===A&&(A=9);const a=new bi;return e.state=a,a.strm=e,a.status=ci,a.wrap=r,a.gzhead=null,a.w_bits=A,a.w_size=1<<a.w_bits,a.w_mask=a.w_size-1,a.hash_bits=n+7,a.hash_size=1<<a.hash_bits,a.hash_mask=a.hash_size-1,a.hash_shift=~~((a.hash_bits+3-1)/3),a.window=new Uint8Array(2*a.w_size),a.head=new Uint16Array(a.hash_size),a.prev=new Uint16Array(a.w_size),a.lit_bufsize=1<<n+6,a.pending_buf_size=4*a.lit_bufsize,a.pending_buf=new Uint8Array(a.pending_buf_size),a.sym_buf=a.lit_bufsize,a.sym_end=3*(a.lit_bufsize-1),a.level=t,a.strategy=s,a.method=i,ki(e)};var Pi={deflateInit:(e,t)=>xi(e,t,ri,15,8,ni),deflateInit2:xi,deflateReset:ki,deflateResetKeep:vi,deflateSetHeader:(e,t)=>Ri(e)||2!==e.state.wrap?Vt:(e.state.gzhead=t,zt),deflate:(e,t)=>{if(Ri(e)||t>Yt||t<0)return e?gi(e,Vt):Vt;const i=e.state;if(!e.output||0!==e.avail_in&&!e.input||i.status===hi&&t!==Wt)return gi(e,0===e.avail_out?Xt:Vt);const A=i.last_flush;if(i.last_flush=t,0!==i.pending){if(fi(e),0===e.avail_out)return i.last_flush=-1,zt}else if(0===e.avail_in&&di(t)<=di(A)&&t!==Wt)return gi(e,Xt);if(i.status===hi&&0!==e.avail_in)return gi(e,Xt);if(i.status===ci&&0===i.wrap&&(i.status=li),i.status===ci){let t=ri+(i.w_bits-8<<4)<<8,A=-1;if(A=i.strategy>=ti||i.level<2?0:i.level<6?1:6===i.level?2:3,t|=A<<6,0!==i.strstart&&(t|=32),t+=31-t%31,Bi(i,t),0!==i.strstart&&(Bi(i,e.adler>>>16),Bi(i,65535&e.adler)),e.adler=1,i.status=li,fi(e),0!==i.pending)return i.last_flush=-1,zt}if(57===i.status)if(e.adler=0,pi(i,31),pi(i,139),pi(i,8),i.gzhead)pi(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),pi(i,255&i.gzhead.time),pi(i,i.gzhead.time>>8&255),pi(i,i.gzhead.time>>16&255),pi(i,i.gzhead.time>>24&255),pi(i,9===i.level?2:i.strategy>=ti||i.level<2?4:0),pi(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(pi(i,255&i.gzhead.extra.length),pi(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=Ft(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69;else if(pi(i,0),pi(i,0),pi(i,0),pi(i,0),pi(i,0),pi(i,9===i.level?2:i.strategy>=ti||i.level<2?4:0),pi(i,3),i.status=li,fi(e),0!==i.pending)return i.last_flush=-1,zt;if(69===i.status){if(i.gzhead.extra){let t=i.pending,A=(65535&i.gzhead.extra.length)-i.gzindex;for(;i.pending+A>i.pending_buf_size;){let n=i.pending_buf_size-i.pending;if(i.pending_buf.set(i.gzhead.extra.subarray(i.gzindex,i.gzindex+n),i.pending),i.pending=i.pending_buf_size,i.gzhead.hcrc&&i.pending>t&&(e.adler=Ft(e.adler,i.pending_buf,i.pending-t,t)),i.gzindex+=n,fi(e),0!==i.pending)return i.last_flush=-1,zt;t=0,A-=n}let n=new Uint8Array(i.gzhead.extra);i.pending_buf.set(n.subarray(i.gzindex,i.gzindex+A),i.pending),i.pending+=A,i.gzhead.hcrc&&i.pending>t&&(e.adler=Ft(e.adler,i.pending_buf,i.pending-t,t)),i.gzindex=0}i.status=73}if(73===i.status){if(i.gzhead.name){let t,A=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>A&&(e.adler=Ft(e.adler,i.pending_buf,i.pending-A,A)),fi(e),0!==i.pending)return i.last_flush=-1,zt;A=0}t=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,pi(i,t)}while(0!==t);i.gzhead.hcrc&&i.pending>A&&(e.adler=Ft(e.adler,i.pending_buf,i.pending-A,A)),i.gzindex=0}i.status=91}if(91===i.status){if(i.gzhead.comment){let t,A=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>A&&(e.adler=Ft(e.adler,i.pending_buf,i.pending-A,A)),fi(e),0!==i.pending)return i.last_flush=-1,zt;A=0}t=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,pi(i,t)}while(0!==t);i.gzhead.hcrc&&i.pending>A&&(e.adler=Ft(e.adler,i.pending_buf,i.pending-A,A))}i.status=103}if(103===i.status){if(i.gzhead.hcrc){if(i.pending+2>i.pending_buf_size&&(fi(e),0!==i.pending))return i.last_flush=-1,zt;pi(i,255&e.adler),pi(i,e.adler>>8&255),e.adler=0}if(i.status=li,fi(e),0!==i.pending)return i.last_flush=-1,zt}if(0!==e.avail_in||0!==i.lookahead||t!==qt&&i.status!==hi){let A=0===i.level?wi(i,t):i.strategy===ti?((e,t)=>{let i;for(;;){if(0===e.lookahead&&(yi(e),0===e.lookahead)){if(t===qt)return 1;break}if(e.match_length=0,i=Ot(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,i&&(Ei(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===Wt?(Ei(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Ei(e,!1),0===e.strm.avail_out)?1:2})(i,t):i.strategy===ii?((e,t)=>{let i,A,n,s;const r=e.window;for(;;){if(e.lookahead<=ai){if(yi(e),e.lookahead<=ai&&t===qt)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(n=e.strstart-1,A=r[n],A===r[++n]&&A===r[++n]&&A===r[++n])){s=e.strstart+ai;do{}while(A===r[++n]&&A===r[++n]&&A===r[++n]&&A===r[++n]&&A===r[++n]&&A===r[++n]&&A===r[++n]&&A===r[++n]&&n<s);e.match_length=ai-(s-n),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(i=Ot(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(i=Ot(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),i&&(Ei(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===Wt?(Ei(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Ei(e,!1),0===e.strm.avail_out)?1:2})(i,t):Di[i.level].func(i,t);if(3!==A&&4!==A||(i.status=hi),1===A||3===A)return 0===e.avail_out&&(i.last_flush=-1),zt;if(2===A&&(t===Kt?Jt(i):t!==Yt&&(Ut(i,0,0,!1),t===Ht&&(ui(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),fi(e),0===e.avail_out))return i.last_flush=-1,zt}return t!==Wt?zt:i.wrap<=0?jt:(2===i.wrap?(pi(i,255&e.adler),pi(i,e.adler>>8&255),pi(i,e.adler>>16&255),pi(i,e.adler>>24&255),pi(i,255&e.total_in),pi(i,e.total_in>>8&255),pi(i,e.total_in>>16&255),pi(i,e.total_in>>24&255)):(Bi(i,e.adler>>>16),Bi(i,65535&e.adler)),fi(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?zt:jt)},deflateEnd:e=>{if(Ri(e))return Vt;const t=e.state.status;return e.state=null,t===li?gi(e,Zt):zt},deflateSetDictionary:(e,t)=>{let i=t.length;if(Ri(e))return Vt;const A=e.state,n=A.wrap;if(2===n||1===n&&A.status!==ci||A.lookahead)return Vt;if(1===n&&(e.adler=xt(e.adler,t,i,0)),A.wrap=0,i>=A.w_size){0===n&&(ui(A.head),A.strstart=0,A.block_start=0,A.insert=0);let e=new Uint8Array(A.w_size);e.set(t.subarray(i-A.w_size,i),0),t=e,i=A.w_size}const s=e.avail_in,r=e.next_in,a=e.input;for(e.avail_in=i,e.next_in=0,e.input=t,yi(A);A.lookahead>=3;){let e=A.strstart,t=A.lookahead-2;do{A.ins_h=Ci(A,A.ins_h,A.window[e+3-1]),A.prev[e&A.w_mask]=A.head[A.ins_h],A.head[A.ins_h]=e,e++}while(--t);A.strstart=e,A.lookahead=2,yi(A)}return A.strstart+=A.lookahead,A.block_start=A.strstart,A.insert=A.lookahead,A.lookahead=0,A.match_length=A.prev_length=2,A.match_available=0,e.next_in=r,e.input=a,e.avail_in=s,A.wrap=n,zt},deflateInfo:"pako deflate (from Nodeca project)"};const Fi=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var Mi={assign:function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const i=t.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(const t in i)Fi(i,t)&&(e[t]=i[t])}}return e},flattenChunks:e=>{let t=0;for(let i=0,A=e.length;i<A;i++)t+=e[i].length;const i=new Uint8Array(t);for(let t=0,A=0,n=e.length;t<n;t++){let n=e[t];i.set(n,A),A+=n.length}return i}};let Ni=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){Ni=!1}const Li=new Uint8Array(256);for(let e=0;e<256;e++)Li[e]=e>=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;Li[254]=Li[254]=1;var Ui={string2buf:e=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(e);let t,i,A,n,s,r=e.length,a=0;for(n=0;n<r;n++)i=e.charCodeAt(n),55296==(64512&i)&&n+1<r&&(A=e.charCodeAt(n+1),56320==(64512&A)&&(i=65536+(i-55296<<10)+(A-56320),n++)),a+=i<128?1:i<2048?2:i<65536?3:4;for(t=new Uint8Array(a),s=0,n=0;s<a;n++)i=e.charCodeAt(n),55296==(64512&i)&&n+1<r&&(A=e.charCodeAt(n+1),56320==(64512&A)&&(i=65536+(i-55296<<10)+(A-56320),n++)),i<128?t[s++]=i:i<2048?(t[s++]=192|i>>>6,t[s++]=128|63&i):i<65536?(t[s++]=224|i>>>12,t[s++]=128|i>>>6&63,t[s++]=128|63&i):(t[s++]=240|i>>>18,t[s++]=128|i>>>12&63,t[s++]=128|i>>>6&63,t[s++]=128|63&i);return t},buf2string:(e,t)=>{const i=t||e.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(e.subarray(0,t));let A,n;const s=new Array(2*i);for(n=0,A=0;A<i;){let t=e[A++];if(t<128){s[n++]=t;continue}let r=Li[t];if(r>4)s[n++]=65533,A+=r-1;else{for(t&=2===r?31:3===r?15:7;r>1&&A<i;)t=t<<6|63&e[A++],r--;r>1?s[n++]=65533:t<65536?s[n++]=t:(t-=65536,s[n++]=55296|t>>10&1023,s[n++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&Ni)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let i="";for(let A=0;A<t;A++)i+=String.fromCharCode(e[A]);return i})(s,n)},utf8border:(e,t)=>{(t=t||e.length)>e.length&&(t=e.length);let i=t-1;for(;i>=0&&128==(192&e[i]);)i--;return i<0||0===i?t:i+Li[e[i]]>t?i:t}};var Gi=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const Oi=Object.prototype.toString,{Z_NO_FLUSH:Ji,Z_SYNC_FLUSH:qi,Z_FULL_FLUSH:Ki,Z_FINISH:Hi,Z_OK:Wi,Z_STREAM_END:Yi,Z_DEFAULT_COMPRESSION:zi,Z_DEFAULT_STRATEGY:ji,Z_DEFLATED:Vi}=Nt;function Zi(e){this.options=Mi.assign({level:zi,method:Vi,chunkSize:16384,windowBits:15,memLevel:8,strategy:ji},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Gi,this.strm.avail_out=0;let i=Pi.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(i!==Wi)throw new Error(Mt[i]);if(t.header&&Pi.deflateSetHeader(this.strm,t.header),t.dictionary){let e;if(e="string"==typeof t.dictionary?Ui.string2buf(t.dictionary):"[object ArrayBuffer]"===Oi.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,i=Pi.deflateSetDictionary(this.strm,e),i!==Wi)throw new Error(Mt[i]);this._dict_set=!0}}function Xi(e,t){const i=new Zi(t);if(i.push(e,!0),i.err)throw i.msg||Mt[i.err];return i.result}Zi.prototype.push=function(e,t){const i=this.strm,A=this.options.chunkSize;let n,s;if(this.ended)return!1;for(s=t===~~t?t:!0===t?Hi:Ji,"string"==typeof e?i.input=Ui.string2buf(e):"[object ArrayBuffer]"===Oi.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;)if(0===i.avail_out&&(i.output=new Uint8Array(A),i.next_out=0,i.avail_out=A),(s===qi||s===Ki)&&i.avail_out<=6)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else{if(n=Pi.deflate(i,s),n===Yi)return i.next_out>0&&this.onData(i.output.subarray(0,i.next_out)),n=Pi.deflateEnd(this.strm),this.onEnd(n),this.ended=!0,n===Wi;if(0!==i.avail_out){if(s>0&&i.next_out>0)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else if(0===i.avail_in)break}else this.onData(i.output)}return!0},Zi.prototype.onData=function(e){this.chunks.push(e)},Zi.prototype.onEnd=function(e){e===Wi&&(this.result=Mi.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var $i={Deflate:Zi,deflate:Xi,deflateRaw:function(e,t){return(t=t||{}).raw=!0,Xi(e,t)},gzip:function(e,t){return(t=t||{}).gzip=!0,Xi(e,t)},constants:Nt};const eA=16209;var tA=function(e,t){let i,A,n,s,r,a,o,c,l,h,g,d,u,I,C,f,E,p,B,Q,m,y,w,S;const _=e.state;i=e.next_in,w=e.input,A=i+(e.avail_in-5),n=e.next_out,S=e.output,s=n-(t-e.avail_out),r=n+(e.avail_out-257),a=_.dmax,o=_.wsize,c=_.whave,l=_.wnext,h=_.window,g=_.hold,d=_.bits,u=_.lencode,I=_.distcode,C=(1<<_.lenbits)-1,f=(1<<_.distbits)-1;e:do{d<15&&(g+=w[i++]<<d,d+=8,g+=w[i++]<<d,d+=8),E=u[g&C];t:for(;;){if(p=E>>>24,g>>>=p,d-=p,p=E>>>16&255,0===p)S[n++]=65535&E;else{if(!(16&p)){if(64&p){if(32&p){_.mode=16191;break e}e.msg="invalid literal/length code",_.mode=eA;break e}E=u[(65535&E)+(g&(1<<p)-1)];continue t}for(B=65535&E,p&=15,p&&(d<p&&(g+=w[i++]<<d,d+=8),B+=g&(1<<p)-1,g>>>=p,d-=p),d<15&&(g+=w[i++]<<d,d+=8,g+=w[i++]<<d,d+=8),E=I[g&f];;){if(p=E>>>24,g>>>=p,d-=p,p=E>>>16&255,16&p){if(Q=65535&E,p&=15,d<p&&(g+=w[i++]<<d,d+=8,d<p&&(g+=w[i++]<<d,d+=8)),Q+=g&(1<<p)-1,Q>a){e.msg="invalid distance too far back",_.mode=eA;break e}if(g>>>=p,d-=p,p=n-s,Q>p){if(p=Q-p,p>c&&_.sane){e.msg="invalid distance too far back",_.mode=eA;break e}if(m=0,y=h,0===l){if(m+=o-p,p<B){B-=p;do{S[n++]=h[m++]}while(--p);m=n-Q,y=S}}else if(l<p){if(m+=o+l-p,p-=l,p<B){B-=p;do{S[n++]=h[m++]}while(--p);if(m=0,l<B){p=l,B-=p;do{S[n++]=h[m++]}while(--p);m=n-Q,y=S}}}else if(m+=l-p,p<B){B-=p;do{S[n++]=h[m++]}while(--p);m=n-Q,y=S}for(;B>2;)S[n++]=y[m++],S[n++]=y[m++],S[n++]=y[m++],B-=3;B&&(S[n++]=y[m++],B>1&&(S[n++]=y[m++]))}else{m=n-Q;do{S[n++]=S[m++],S[n++]=S[m++],S[n++]=S[m++],B-=3}while(B>2);B&&(S[n++]=S[m++],B>1&&(S[n++]=S[m++]))}break}if(64&p){e.msg="invalid distance code",_.mode=eA;break e}E=I[(65535&E)+(g&(1<<p)-1)]}}break}}while(i<A&&n<r);B=d>>3,i-=B,d-=B<<3,g&=(1<<d)-1,e.next_in=i,e.next_out=n,e.avail_in=i<A?A-i+5:5-(i-A),e.avail_out=n<r?r-n+257:257-(n-r),_.hold=g,_.bits=d};const iA=15,AA=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),nA=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),sA=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),rA=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]);var aA=(e,t,i,A,n,s,r,a)=>{const o=a.bits;let c,l,h,g,d,u,I=0,C=0,f=0,E=0,p=0,B=0,Q=0,m=0,y=0,w=0,S=null;const _=new Uint16Array(16),T=new Uint16Array(16);let D,b,R,v=null;for(I=0;I<=iA;I++)_[I]=0;for(C=0;C<A;C++)_[t[i+C]]++;for(p=o,E=iA;E>=1&&0===_[E];E--);if(p>E&&(p=E),0===E)return n[s++]=20971520,n[s++]=20971520,a.bits=1,0;for(f=1;f<E&&0===_[f];f++);for(p<f&&(p=f),m=1,I=1;I<=iA;I++)if(m<<=1,m-=_[I],m<0)return-1;if(m>0&&(0===e||1!==E))return-1;for(T[1]=0,I=1;I<iA;I++)T[I+1]=T[I]+_[I];for(C=0;C<A;C++)0!==t[i+C]&&(r[T[t[i+C]]++]=C);if(0===e?(S=v=r,u=20):1===e?(S=AA,v=nA,u=257):(S=sA,v=rA,u=0),w=0,C=0,I=f,d=s,B=p,Q=0,h=-1,y=1<<p,g=y-1,1===e&&y>852||2===e&&y>592)return 1;for(;;){D=I-Q,r[C]+1<u?(b=0,R=r[C]):r[C]>=u?(b=v[r[C]-u],R=S[r[C]-u]):(b=96,R=0),c=1<<I-Q,l=1<<B,f=l;do{l-=c,n[d+(w>>Q)+l]=D<<24|b<<16|R}while(0!==l);for(c=1<<I-1;w&c;)c>>=1;if(0!==c?(w&=c-1,w+=c):w=0,C++,0==--_[I]){if(I===E)break;I=t[i+r[C]]}if(I>p&&(w&g)!==h){for(0===Q&&(Q=p),d+=f,B=I-Q,m=1<<B;B+Q<E&&(m-=_[B+Q],!(m<=0));)B++,m<<=1;if(y+=1<<B,1===e&&y>852||2===e&&y>592)return 1;h=w&g,n[h]=p<<24|B<<16|d-s}}return 0!==w&&(n[d+w]=I-Q<<24|64<<16),a.bits=p,0};const{Z_FINISH:oA,Z_BLOCK:cA,Z_TREES:lA,Z_OK:hA,Z_STREAM_END:gA,Z_NEED_DICT:dA,Z_STREAM_ERROR:uA,Z_DATA_ERROR:IA,Z_MEM_ERROR:CA,Z_BUF_ERROR:fA,Z_DEFLATED:EA}=Nt,pA=16180,BA=16190,QA=16191,mA=16192,yA=16194,wA=16199,SA=16200,_A=16206,TA=16209,DA=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function bA(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const RA=e=>{if(!e)return 1;const t=e.state;return!t||t.strm!==e||t.mode<pA||t.mode>16211?1:0},vA=e=>{if(RA(e))return uA;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=pA,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,hA},kA=e=>{if(RA(e))return uA;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,vA(e)},xA=(e,t)=>{let i;if(RA(e))return uA;const A=e.state;return t<0?(i=0,t=-t):(i=5+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?uA:(null!==A.window&&A.wbits!==t&&(A.window=null),A.wrap=i,A.wbits=t,kA(e))},PA=(e,t)=>{if(!e)return uA;const i=new bA;e.state=i,i.strm=e,i.window=null,i.mode=pA;const A=xA(e,t);return A!==hA&&(e.state=null),A};let FA,MA,NA=!0;const LA=e=>{if(NA){FA=new Int32Array(512),MA=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(aA(1,e.lens,0,288,FA,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;aA(2,e.lens,0,32,MA,0,e.work,{bits:5}),NA=!1}e.lencode=FA,e.lenbits=9,e.distcode=MA,e.distbits=5},UA=(e,t,i,A)=>{let n;const s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new Uint8Array(s.wsize)),A>=s.wsize?(s.window.set(t.subarray(i-s.wsize,i),0),s.wnext=0,s.whave=s.wsize):(n=s.wsize-s.wnext,n>A&&(n=A),s.window.set(t.subarray(i-A,i-A+n),s.wnext),(A-=n)?(s.window.set(t.subarray(i-A,i),0),s.wnext=A,s.whave=s.wsize):(s.wnext+=n,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=n))),0};var GA=(e,t)=>{let i,A,n,s,r,a,o,c,l,h,g,d,u,I,C,f,E,p,B,Q,m,y,w=0;const S=new Uint8Array(4);let _,T;const D=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(RA(e)||!e.output||!e.input&&0!==e.avail_in)return uA;i=e.state,i.mode===QA&&(i.mode=mA),r=e.next_out,n=e.output,o=e.avail_out,s=e.next_in,A=e.input,a=e.avail_in,c=i.hold,l=i.bits,h=a,g=o,y=hA;e:for(;;)switch(i.mode){case pA:if(0===i.wrap){i.mode=mA;break}for(;l<16;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}if(2&i.wrap&&35615===c){0===i.wbits&&(i.wbits=15),i.check=0,S[0]=255&c,S[1]=c>>>8&255,i.check=Ft(i.check,S,2,0),c=0,l=0,i.mode=16181;break}if(i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&c)<<8)+(c>>8))%31){e.msg="incorrect header check",i.mode=TA;break}if((15&c)!==EA){e.msg="unknown compression method",i.mode=TA;break}if(c>>>=4,l-=4,m=8+(15&c),0===i.wbits&&(i.wbits=m),m>15||m>i.wbits){e.msg="invalid window size",i.mode=TA;break}i.dmax=1<<i.wbits,i.flags=0,e.adler=i.check=1,i.mode=512&c?16189:QA,c=0,l=0;break;case 16181:for(;l<16;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}if(i.flags=c,(255&i.flags)!==EA){e.msg="unknown compression method",i.mode=TA;break}if(57344&i.flags){e.msg="unknown header flags set",i.mode=TA;break}i.head&&(i.head.text=c>>8&1),512&i.flags&&4&i.wrap&&(S[0]=255&c,S[1]=c>>>8&255,i.check=Ft(i.check,S,2,0)),c=0,l=0,i.mode=16182;case 16182:for(;l<32;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}i.head&&(i.head.time=c),512&i.flags&&4&i.wrap&&(S[0]=255&c,S[1]=c>>>8&255,S[2]=c>>>16&255,S[3]=c>>>24&255,i.check=Ft(i.check,S,4,0)),c=0,l=0,i.mode=16183;case 16183:for(;l<16;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}i.head&&(i.head.xflags=255&c,i.head.os=c>>8),512&i.flags&&4&i.wrap&&(S[0]=255&c,S[1]=c>>>8&255,i.check=Ft(i.check,S,2,0)),c=0,l=0,i.mode=16184;case 16184:if(1024&i.flags){for(;l<16;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}i.length=c,i.head&&(i.head.extra_len=c),512&i.flags&&4&i.wrap&&(S[0]=255&c,S[1]=c>>>8&255,i.check=Ft(i.check,S,2,0)),c=0,l=0}else i.head&&(i.head.extra=null);i.mode=16185;case 16185:if(1024&i.flags&&(d=i.length,d>a&&(d=a),d&&(i.head&&(m=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Uint8Array(i.head.extra_len)),i.head.extra.set(A.subarray(s,s+d),m)),512&i.flags&&4&i.wrap&&(i.check=Ft(i.check,A,d,s)),a-=d,s+=d,i.length-=d),i.length))break e;i.length=0,i.mode=16186;case 16186:if(2048&i.flags){if(0===a)break e;d=0;do{m=A[s+d++],i.head&&m&&i.length<65536&&(i.head.name+=String.fromCharCode(m))}while(m&&d<a);if(512&i.flags&&4&i.wrap&&(i.check=Ft(i.check,A,d,s)),a-=d,s+=d,m)break e}else i.head&&(i.head.name=null);i.length=0,i.mode=16187;case 16187:if(4096&i.flags){if(0===a)break e;d=0;do{m=A[s+d++],i.head&&m&&i.length<65536&&(i.head.comment+=String.fromCharCode(m))}while(m&&d<a);if(512&i.flags&&4&i.wrap&&(i.check=Ft(i.check,A,d,s)),a-=d,s+=d,m)break e}else i.head&&(i.head.comment=null);i.mode=16188;case 16188:if(512&i.flags){for(;l<16;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}if(4&i.wrap&&c!==(65535&i.check)){e.msg="header crc mismatch",i.mode=TA;break}c=0,l=0}i.head&&(i.head.hcrc=i.flags>>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=QA;break;case 16189:for(;l<32;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}e.adler=i.check=DA(c),c=0,l=0,i.mode=BA;case BA:if(0===i.havedict)return e.next_out=r,e.avail_out=o,e.next_in=s,e.avail_in=a,i.hold=c,i.bits=l,dA;e.adler=i.check=1,i.mode=QA;case QA:if(t===cA||t===lA)break e;case mA:if(i.last){c>>>=7&l,l-=7&l,i.mode=_A;break}for(;l<3;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}switch(i.last=1&c,c>>>=1,l-=1,3&c){case 0:i.mode=16193;break;case 1:if(LA(i),i.mode=wA,t===lA){c>>>=2,l-=2;break e}break;case 2:i.mode=16196;break;case 3:e.msg="invalid block type",i.mode=TA}c>>>=2,l-=2;break;case 16193:for(c>>>=7&l,l-=7&l;l<32;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}if((65535&c)!=(c>>>16^65535)){e.msg="invalid stored block lengths",i.mode=TA;break}if(i.length=65535&c,c=0,l=0,i.mode=yA,t===lA)break e;case yA:i.mode=16195;case 16195:if(d=i.length,d){if(d>a&&(d=a),d>o&&(d=o),0===d)break e;n.set(A.subarray(s,s+d),r),a-=d,s+=d,o-=d,r+=d,i.length-=d;break}i.mode=QA;break;case 16196:for(;l<14;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}if(i.nlen=257+(31&c),c>>>=5,l-=5,i.ndist=1+(31&c),c>>>=5,l-=5,i.ncode=4+(15&c),c>>>=4,l-=4,i.nlen>286||i.ndist>30){e.msg="too many length or distance symbols",i.mode=TA;break}i.have=0,i.mode=16197;case 16197:for(;i.have<i.ncode;){for(;l<3;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}i.lens[D[i.have++]]=7&c,c>>>=3,l-=3}for(;i.have<19;)i.lens[D[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,_={bits:i.lenbits},y=aA(0,i.lens,0,19,i.lencode,0,i.work,_),i.lenbits=_.bits,y){e.msg="invalid code lengths set",i.mode=TA;break}i.have=0,i.mode=16198;case 16198:for(;i.have<i.nlen+i.ndist;){for(;w=i.lencode[c&(1<<i.lenbits)-1],C=w>>>24,f=w>>>16&255,E=65535&w,!(C<=l);){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}if(E<16)c>>>=C,l-=C,i.lens[i.have++]=E;else{if(16===E){for(T=C+2;l<T;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}if(c>>>=C,l-=C,0===i.have){e.msg="invalid bit length repeat",i.mode=TA;break}m=i.lens[i.have-1],d=3+(3&c),c>>>=2,l-=2}else if(17===E){for(T=C+3;l<T;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}c>>>=C,l-=C,m=0,d=3+(7&c),c>>>=3,l-=3}else{for(T=C+7;l<T;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}c>>>=C,l-=C,m=0,d=11+(127&c),c>>>=7,l-=7}if(i.have+d>i.nlen+i.ndist){e.msg="invalid bit length repeat",i.mode=TA;break}for(;d--;)i.lens[i.have++]=m}}if(i.mode===TA)break;if(0===i.lens[256]){e.msg="invalid code -- missing end-of-block",i.mode=TA;break}if(i.lenbits=9,_={bits:i.lenbits},y=aA(1,i.lens,0,i.nlen,i.lencode,0,i.work,_),i.lenbits=_.bits,y){e.msg="invalid literal/lengths set",i.mode=TA;break}if(i.distbits=6,i.distcode=i.distdyn,_={bits:i.distbits},y=aA(2,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,_),i.distbits=_.bits,y){e.msg="invalid distances set",i.mode=TA;break}if(i.mode=wA,t===lA)break e;case wA:i.mode=SA;case SA:if(a>=6&&o>=258){e.next_out=r,e.avail_out=o,e.next_in=s,e.avail_in=a,i.hold=c,i.bits=l,tA(e,g),r=e.next_out,n=e.output,o=e.avail_out,s=e.next_in,A=e.input,a=e.avail_in,c=i.hold,l=i.bits,i.mode===QA&&(i.back=-1);break}for(i.back=0;w=i.lencode[c&(1<<i.lenbits)-1],C=w>>>24,f=w>>>16&255,E=65535&w,!(C<=l);){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}if(f&&!(240&f)){for(p=C,B=f,Q=E;w=i.lencode[Q+((c&(1<<p+B)-1)>>p)],C=w>>>24,f=w>>>16&255,E=65535&w,!(p+C<=l);){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}c>>>=p,l-=p,i.back+=p}if(c>>>=C,l-=C,i.back+=C,i.length=E,0===f){i.mode=16205;break}if(32&f){i.back=-1,i.mode=QA;break}if(64&f){e.msg="invalid literal/length code",i.mode=TA;break}i.extra=15&f,i.mode=16201;case 16201:if(i.extra){for(T=i.extra;l<T;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}i.length+=c&(1<<i.extra)-1,c>>>=i.extra,l-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=16202;case 16202:for(;w=i.distcode[c&(1<<i.distbits)-1],C=w>>>24,f=w>>>16&255,E=65535&w,!(C<=l);){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}if(!(240&f)){for(p=C,B=f,Q=E;w=i.distcode[Q+((c&(1<<p+B)-1)>>p)],C=w>>>24,f=w>>>16&255,E=65535&w,!(p+C<=l);){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}c>>>=p,l-=p,i.back+=p}if(c>>>=C,l-=C,i.back+=C,64&f){e.msg="invalid distance code",i.mode=TA;break}i.offset=E,i.extra=15&f,i.mode=16203;case 16203:if(i.extra){for(T=i.extra;l<T;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}i.offset+=c&(1<<i.extra)-1,c>>>=i.extra,l-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg="invalid distance too far back",i.mode=TA;break}i.mode=16204;case 16204:if(0===o)break e;if(d=g-o,i.offset>d){if(d=i.offset-d,d>i.whave&&i.sane){e.msg="invalid distance too far back",i.mode=TA;break}d>i.wnext?(d-=i.wnext,u=i.wsize-d):u=i.wnext-d,d>i.length&&(d=i.length),I=i.window}else I=n,u=r-i.offset,d=i.length;d>o&&(d=o),o-=d,i.length-=d;do{n[r++]=I[u++]}while(--d);0===i.length&&(i.mode=SA);break;case 16205:if(0===o)break e;n[r++]=i.length,o--,i.mode=SA;break;case _A:if(i.wrap){for(;l<32;){if(0===a)break e;a--,c|=A[s++]<<l,l+=8}if(g-=o,e.total_out+=g,i.total+=g,4&i.wrap&&g&&(e.adler=i.check=i.flags?Ft(i.check,n,g,r-g):xt(i.check,n,g,r-g)),g=o,4&i.wrap&&(i.flags?c:DA(c))!==i.check){e.msg="incorrect data check",i.mode=TA;break}c=0,l=0}i.mode=16207;case 16207:if(i.wrap&&i.flags){for(;l<32;){if(0===a)break e;a--,c+=A[s++]<<l,l+=8}if(4&i.wrap&&c!==(4294967295&i.total)){e.msg="incorrect length check",i.mode=TA;break}c=0,l=0}i.mode=16208;case 16208:y=gA;break e;case TA:y=IA;break e;case 16210:return CA;default:return uA}return e.next_out=r,e.avail_out=o,e.next_in=s,e.avail_in=a,i.hold=c,i.bits=l,(i.wsize||g!==e.avail_out&&i.mode<TA&&(i.mode<_A||t!==oA))&&UA(e,e.output,e.next_out,g-e.avail_out),h-=e.avail_in,g-=e.avail_out,e.total_in+=h,e.total_out+=g,i.total+=g,4&i.wrap&&g&&(e.adler=i.check=i.flags?Ft(i.check,n,g,e.next_out-g):xt(i.check,n,g,e.next_out-g)),e.data_type=i.bits+(i.last?64:0)+(i.mode===QA?128:0)+(i.mode===wA||i.mode===yA?256:0),(0===h&&0===g||t===oA)&&y===hA&&(y=fA),y},OA={inflateReset:kA,inflateReset2:xA,inflateResetKeep:vA,inflateInit:e=>PA(e,15),inflateInit2:PA,inflate:GA,inflateEnd:e=>{if(RA(e))return uA;let t=e.state;return t.window&&(t.window=null),e.state=null,hA},inflateGetHeader:(e,t)=>{if(RA(e))return uA;const i=e.state;return 2&i.wrap?(i.head=t,t.done=!1,hA):uA},inflateSetDictionary:(e,t)=>{const i=t.length;let A,n,s;return RA(e)?uA:(A=e.state,0!==A.wrap&&A.mode!==BA?uA:A.mode===BA&&(n=1,n=xt(n,t,i,0),n!==A.check)?IA:(s=UA(e,t,i,i),s?(A.mode=16210,CA):(A.havedict=1,hA)))},inflateInfo:"pako inflate (from Nodeca project)"};var JA=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const qA=Object.prototype.toString,{Z_NO_FLUSH:KA,Z_FINISH:HA,Z_OK:WA,Z_STREAM_END:YA,Z_NEED_DICT:zA,Z_STREAM_ERROR:jA,Z_DATA_ERROR:VA,Z_MEM_ERROR:ZA}=Nt;function XA(e){this.options=Mi.assign({chunkSize:65536,windowBits:15,to:""},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(15&t.windowBits||(t.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Gi,this.strm.avail_out=0;let i=OA.inflateInit2(this.strm,t.windowBits);if(i!==WA)throw new Error(Mt[i]);if(this.header=new JA,OA.inflateGetHeader(this.strm,this.header),t.dictionary&&("string"==typeof t.dictionary?t.dictionary=Ui.string2buf(t.dictionary):"[object ArrayBuffer]"===qA.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=OA.inflateSetDictionary(this.strm,t.dictionary),i!==WA)))throw new Error(Mt[i])}function $A(e,t){const i=new XA(t);if(i.push(e),i.err)throw i.msg||Mt[i.err];return i.result}XA.prototype.push=function(e,t){const i=this.strm,A=this.options.chunkSize,n=this.options.dictionary;let s,r,a;if(this.ended)return!1;for(r=t===~~t?t:!0===t?HA:KA,"[object ArrayBuffer]"===qA.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;){for(0===i.avail_out&&(i.output=new Uint8Array(A),i.next_out=0,i.avail_out=A),s=OA.inflate(i,r),s===zA&&n&&(s=OA.inflateSetDictionary(i,n),s===WA?s=OA.inflate(i,r):s===VA&&(s=zA));i.avail_in>0&&s===YA&&i.state.wrap>0&&0!==e[i.next_in];)OA.inflateReset(i),s=OA.inflate(i,r);switch(s){case jA:case VA:case zA:case ZA:return this.onEnd(s),this.ended=!0,!1}if(a=i.avail_out,i.next_out&&(0===i.avail_out||s===YA))if("string"===this.options.to){let e=Ui.utf8border(i.output,i.next_out),t=i.next_out-e,n=Ui.buf2string(i.output,e);i.next_out=t,i.avail_out=A-t,t&&i.output.set(i.output.subarray(e,e+t),0),this.onData(n)}else this.onData(i.output.length===i.next_out?i.output:i.output.subarray(0,i.next_out));if(s!==WA||0!==a){if(s===YA)return s=OA.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,!0;if(0===i.avail_in)break}}return!0},XA.prototype.onData=function(e){this.chunks.push(e)},XA.prototype.onEnd=function(e){e===WA&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=Mi.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var en={Inflate:XA,inflate:$A,inflateRaw:function(e,t){return(t=t||{}).raw=!0,$A(e,t)},ungzip:$A,constants:Nt};const{Deflate:tn,deflate:An,deflateRaw:nn,gzip:sn}=$i,{Inflate:rn,inflate:an,inflateRaw:on,ungzip:cn}=en;var ln={Deflate:tn,deflate:An,deflateRaw:nn,gzip:sn,Inflate:rn,inflate:an,inflateRaw:on,ungzip:cn,constants:Nt};async function hn(e,t){const i=Ye.lib.WordArray.create(e.slice(0,16)),A=function(e){const t=[];let i=0;const A=e.length;for(;i<A;)t.push(e[i++]<<24|e[i++]<<16|e[i++]<<8|e[i++]);return Ye.lib.WordArray.create(t,A)}(e.slice(16)),n=function(e){return Ye.enc.Hex.parse(Ye.SHA256(e).toString())}(t),s=function(e){const t=e.sigBytes,i=new Uint8Array(t);let A=0;const n=e.words;for(let e=0;e<t;e++)i[e]=n[A>>>2]>>>24-A%4*8&255,A++;return i}(Ye.AES.decrypt({ciphertext:A},n,{iv:i,mode:Ye.mode.CBC,padding:Ye.pad.Pkcs7}));return ln.inflate(s)}Ye.enc.Utf8.parse(ze.salt),Ye.enc.Utf8.parse(ze.iv);var gn="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},dn=[],un=[],In="undefined"!=typeof Uint8Array?Uint8Array:Array,Cn=!1;function fn(){Cn=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0;t<64;++t)dn[t]=e[t],un[e.charCodeAt(t)]=t;un["-".charCodeAt(0)]=62,un["_".charCodeAt(0)]=63}function En(e,t,i){for(var A,n,s=[],r=t;r<i;r+=3)A=(e[r]<<16)+(e[r+1]<<8)+e[r+2],s.push(dn[(n=A)>>18&63]+dn[n>>12&63]+dn[n>>6&63]+dn[63&n]);return s.join("")}function pn(e){var t;Cn||fn();for(var i=e.length,A=i%3,n="",s=[],r=16383,a=0,o=i-A;a<o;a+=r)s.push(En(e,a,a+r>o?o:a+r));return 1===A?(t=e[i-1],n+=dn[t>>2],n+=dn[t<<4&63],n+="=="):2===A&&(t=(e[i-2]<<8)+e[i-1],n+=dn[t>>10],n+=dn[t>>4&63],n+=dn[t<<2&63],n+="="),s.push(n),s.join("")}function Bn(e,t,i,A,n){var s,r,a=8*n-A-1,o=(1<<a)-1,c=o>>1,l=-7,h=i?n-1:0,g=i?-1:1,d=e[t+h];for(h+=g,s=d&(1<<-l)-1,d>>=-l,l+=a;l>0;s=256*s+e[t+h],h+=g,l-=8);for(r=s&(1<<-l)-1,s>>=-l,l+=A;l>0;r=256*r+e[t+h],h+=g,l-=8);if(0===s)s=1-c;else{if(s===o)return r?NaN:1/0*(d?-1:1);r+=Math.pow(2,A),s-=c}return(d?-1:1)*r*Math.pow(2,s-A)}function Qn(e,t,i,A,n,s){var r,a,o,c=8*s-n-1,l=(1<<c)-1,h=l>>1,g=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=A?0:s-1,u=A?1:-1,I=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,r=l):(r=Math.floor(Math.log(t)/Math.LN2),t*(o=Math.pow(2,-r))<1&&(r--,o*=2),(t+=r+h>=1?g/o:g*Math.pow(2,1-h))*o>=2&&(r++,o/=2),r+h>=l?(a=0,r=l):r+h>=1?(a=(t*o-1)*Math.pow(2,n),r+=h):(a=t*Math.pow(2,h-1)*Math.pow(2,n),r=0));n>=8;e[i+d]=255&a,d+=u,a/=256,n-=8);for(r=r<<n|a,c+=n;c>0;e[i+d]=255&r,d+=u,r/=256,c-=8);e[i+d-u]|=128*I}var mn={}.toString,yn=Array.isArray||function(e){return"[object Array]"==mn.call(e)};function wn(){return _n.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function Sn(e,t){if(wn()<t)throw new RangeError("Invalid typed array length");return _n.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=_n.prototype:(null===e&&(e=new _n(t)),e.length=t),e}function _n(e,t,i){if(!(_n.TYPED_ARRAY_SUPPORT||this instanceof _n))return new _n(e,t,i);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return bn(this,e)}return Tn(this,e,t,i)}function Tn(e,t,i,A){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,i,A){if(t.byteLength,i<0||t.byteLength<i)throw new RangeError("'offset' is out of bounds");if(t.byteLength<i+(A||0))throw new RangeError("'length' is out of bounds");t=void 0===i&&void 0===A?new Uint8Array(t):void 0===A?new Uint8Array(t,i):new Uint8Array(t,i,A);_n.TYPED_ARRAY_SUPPORT?(e=t).__proto__=_n.prototype:e=Rn(e,t);return e}(e,t,i,A):"string"==typeof t?function(e,t,i){"string"==typeof i&&""!==i||(i="utf8");if(!_n.isEncoding(i))throw new TypeError('"encoding" must be a valid string encoding');var A=0|xn(t,i);e=Sn(e,A);var n=e.write(t,i);n!==A&&(e=e.slice(0,n));return e}(e,t,i):function(e,t){if(kn(t)){var i=0|vn(t.length);return 0===(e=Sn(e,i)).length||t.copy(e,0,0,i),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(A=t.length)!=A?Sn(e,0):Rn(e,t);if("Buffer"===t.type&&yn(t.data))return Rn(e,t.data)}var A;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function Dn(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function bn(e,t){if(Dn(t),e=Sn(e,t<0?0:0|vn(t)),!_n.TYPED_ARRAY_SUPPORT)for(var i=0;i<t;++i)e[i]=0;return e}function Rn(e,t){var i=t.length<0?0:0|vn(t.length);e=Sn(e,i);for(var A=0;A<i;A+=1)e[A]=255&t[A];return e}function vn(e){if(e>=wn())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+wn().toString(16)+" bytes");return 0|e}function kn(e){return!(null==e||!e._isBuffer)}function xn(e,t){if(kn(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var i=e.length;if(0===i)return 0;for(var A=!1;;)switch(t){case"ascii":case"latin1":case"binary":return i;case"utf8":case"utf-8":case void 0:return rs(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return as(e).length;default:if(A)return rs(e).length;t=(""+t).toLowerCase(),A=!0}}function Pn(e,t,i){var A=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===i||i>this.length)&&(i=this.length),i<=0)return"";if((i>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return jn(this,t,i);case"utf8":case"utf-8":return Hn(this,t,i);case"ascii":return Yn(this,t,i);case"latin1":case"binary":return zn(this,t,i);case"base64":return Kn(this,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Vn(this,t,i);default:if(A)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),A=!0}}function Fn(e,t,i){var A=e[t];e[t]=e[i],e[i]=A}function Mn(e,t,i,A,n){if(0===e.length)return-1;if("string"==typeof i?(A=i,i=0):i>2147483647?i=2147483647:i<-2147483648&&(i=-2147483648),i=+i,isNaN(i)&&(i=n?0:e.length-1),i<0&&(i=e.length+i),i>=e.length){if(n)return-1;i=e.length-1}else if(i<0){if(!n)return-1;i=0}if("string"==typeof t&&(t=_n.from(t,A)),kn(t))return 0===t.length?-1:Nn(e,t,i,A,n);if("number"==typeof t)return t&=255,_n.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?n?Uint8Array.prototype.indexOf.call(e,t,i):Uint8Array.prototype.lastIndexOf.call(e,t,i):Nn(e,[t],i,A,n);throw new TypeError("val must be string, number or Buffer")}function Nn(e,t,i,A,n){var s,r=1,a=e.length,o=t.length;if(void 0!==A&&("ucs2"===(A=String(A).toLowerCase())||"ucs-2"===A||"utf16le"===A||"utf-16le"===A)){if(e.length<2||t.length<2)return-1;r=2,a/=2,o/=2,i/=2}function c(e,t){return 1===r?e[t]:e.readUInt16BE(t*r)}if(n){var l=-1;for(s=i;s<a;s++)if(c(e,s)===c(t,-1===l?0:s-l)){if(-1===l&&(l=s),s-l+1===o)return l*r}else-1!==l&&(s-=s-l),l=-1}else for(i+o>a&&(i=a-o),s=i;s>=0;s--){for(var h=!0,g=0;g<o;g++)if(c(e,s+g)!==c(t,g)){h=!1;break}if(h)return s}return-1}function Ln(e,t,i,A){i=Number(i)||0;var n=e.length-i;A?(A=Number(A))>n&&(A=n):A=n;var s=t.length;if(s%2!=0)throw new TypeError("Invalid hex string");A>s/2&&(A=s/2);for(var r=0;r<A;++r){var a=parseInt(t.substr(2*r,2),16);if(isNaN(a))return r;e[i+r]=a}return r}function Un(e,t,i,A){return os(rs(t,e.length-i),e,i,A)}function Gn(e,t,i,A){return os(function(e){for(var t=[],i=0;i<e.length;++i)t.push(255&e.charCodeAt(i));return t}(t),e,i,A)}function On(e,t,i,A){return Gn(e,t,i,A)}function Jn(e,t,i,A){return os(as(t),e,i,A)}function qn(e,t,i,A){return os(function(e,t){for(var i,A,n,s=[],r=0;r<e.length&&!((t-=2)<0);++r)A=(i=e.charCodeAt(r))>>8,n=i%256,s.push(n),s.push(A);return s}(t,e.length-i),e,i,A)}function Kn(e,t,i){return 0===t&&i===e.length?pn(e):pn(e.slice(t,i))}function Hn(e,t,i){i=Math.min(e.length,i);for(var A=[],n=t;n<i;){var s,r,a,o,c=e[n],l=null,h=c>239?4:c>223?3:c>191?2:1;if(n+h<=i)switch(h){case 1:c<128&&(l=c);break;case 2:128==(192&(s=e[n+1]))&&(o=(31&c)<<6|63&s)>127&&(l=o);break;case 3:s=e[n+1],r=e[n+2],128==(192&s)&&128==(192&r)&&(o=(15&c)<<12|(63&s)<<6|63&r)>2047&&(o<55296||o>57343)&&(l=o);break;case 4:s=e[n+1],r=e[n+2],a=e[n+3],128==(192&s)&&128==(192&r)&&128==(192&a)&&(o=(15&c)<<18|(63&s)<<12|(63&r)<<6|63&a)>65535&&o<1114112&&(l=o)}null===l?(l=65533,h=1):l>65535&&(l-=65536,A.push(l>>>10&1023|55296),l=56320|1023&l),A.push(l),n+=h}return function(e){var t=e.length;if(t<=Wn)return String.fromCharCode.apply(String,e);var i="",A=0;for(;A<t;)i+=String.fromCharCode.apply(String,e.slice(A,A+=Wn));return i}(A)}_n.TYPED_ARRAY_SUPPORT=void 0===gn.TYPED_ARRAY_SUPPORT||gn.TYPED_ARRAY_SUPPORT,wn(),_n.poolSize=8192,_n._augment=function(e){return e.__proto__=_n.prototype,e},_n.from=function(e,t,i){return Tn(null,e,t,i)},_n.TYPED_ARRAY_SUPPORT&&(_n.prototype.__proto__=Uint8Array.prototype,_n.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&_n[Symbol.species]),_n.alloc=function(e,t,i){return function(e,t,i,A){return Dn(t),t<=0?Sn(e,t):void 0!==i?"string"==typeof A?Sn(e,t).fill(i,A):Sn(e,t).fill(i):Sn(e,t)}(null,e,t,i)},_n.allocUnsafe=function(e){return bn(null,e)},_n.allocUnsafeSlow=function(e){return bn(null,e)},_n.isBuffer=function(e){return null!=e&&(!!e._isBuffer||cs(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&cs(e.slice(0,0))}(e))},_n.compare=function(e,t){if(!kn(e)||!kn(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var i=e.length,A=t.length,n=0,s=Math.min(i,A);n<s;++n)if(e[n]!==t[n]){i=e[n],A=t[n];break}return i<A?-1:A<i?1:0},_n.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},_n.concat=function(e,t){if(!yn(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return _n.alloc(0);var i;if(void 0===t)for(t=0,i=0;i<e.length;++i)t+=e[i].length;var A=_n.allocUnsafe(t),n=0;for(i=0;i<e.length;++i){var s=e[i];if(!kn(s))throw new TypeError('"list" argument must be an Array of Buffers');s.copy(A,n),n+=s.length}return A},_n.byteLength=xn,_n.prototype._isBuffer=!0,_n.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)Fn(this,t,t+1);return this},_n.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)Fn(this,t,t+3),Fn(this,t+1,t+2);return this},_n.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)Fn(this,t,t+7),Fn(this,t+1,t+6),Fn(this,t+2,t+5),Fn(this,t+3,t+4);return this},_n.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?Hn(this,0,e):Pn.apply(this,arguments)},_n.prototype.equals=function(e){if(!kn(e))throw new TypeError("Argument must be a Buffer");return this===e||0===_n.compare(this,e)},_n.prototype.inspect=function(){var e="";return this.length>0&&(e=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(e+=" ... ")),"<Buffer "+e+">"},_n.prototype.compare=function(e,t,i,A,n){if(!kn(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===i&&(i=e?e.length:0),void 0===A&&(A=0),void 0===n&&(n=this.length),t<0||i>e.length||A<0||n>this.length)throw new RangeError("out of range index");if(A>=n&&t>=i)return 0;if(A>=n)return-1;if(t>=i)return 1;if(this===e)return 0;for(var s=(n>>>=0)-(A>>>=0),r=(i>>>=0)-(t>>>=0),a=Math.min(s,r),o=this.slice(A,n),c=e.slice(t,i),l=0;l<a;++l)if(o[l]!==c[l]){s=o[l],r=c[l];break}return s<r?-1:r<s?1:0},_n.prototype.includes=function(e,t,i){return-1!==this.indexOf(e,t,i)},_n.prototype.indexOf=function(e,t,i){return Mn(this,e,t,i,!0)},_n.prototype.lastIndexOf=function(e,t,i){return Mn(this,e,t,i,!1)},_n.prototype.write=function(e,t,i,A){if(void 0===t)A="utf8",i=this.length,t=0;else if(void 0===i&&"string"==typeof t)A=t,i=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(i)?(i|=0,void 0===A&&(A="utf8")):(A=i,i=void 0)}var n=this.length-t;if((void 0===i||i>n)&&(i=n),e.length>0&&(i<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");A||(A="utf8");for(var s=!1;;)switch(A){case"hex":return Ln(this,e,t,i);case"utf8":case"utf-8":return Un(this,e,t,i);case"ascii":return Gn(this,e,t,i);case"latin1":case"binary":return On(this,e,t,i);case"base64":return Jn(this,e,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return qn(this,e,t,i);default:if(s)throw new TypeError("Unknown encoding: "+A);A=(""+A).toLowerCase(),s=!0}},_n.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Wn=4096;function Yn(e,t,i){var A="";i=Math.min(e.length,i);for(var n=t;n<i;++n)A+=String.fromCharCode(127&e[n]);return A}function zn(e,t,i){var A="";i=Math.min(e.length,i);for(var n=t;n<i;++n)A+=String.fromCharCode(e[n]);return A}function jn(e,t,i){var A=e.length;(!t||t<0)&&(t=0),(!i||i<0||i>A)&&(i=A);for(var n="",s=t;s<i;++s)n+=ss(e[s]);return n}function Vn(e,t,i){for(var A=e.slice(t,i),n="",s=0;s<A.length;s+=2)n+=String.fromCharCode(A[s]+256*A[s+1]);return n}function Zn(e,t,i){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>i)throw new RangeError("Trying to access beyond buffer length")}function Xn(e,t,i,A,n,s){if(!kn(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>n||t<s)throw new RangeError('"value" argument is out of bounds');if(i+A>e.length)throw new RangeError("Index out of range")}function $n(e,t,i,A){t<0&&(t=65535+t+1);for(var n=0,s=Math.min(e.length-i,2);n<s;++n)e[i+n]=(t&255<<8*(A?n:1-n))>>>8*(A?n:1-n)}function es(e,t,i,A){t<0&&(t=4294967295+t+1);for(var n=0,s=Math.min(e.length-i,4);n<s;++n)e[i+n]=t>>>8*(A?n:3-n)&255}function ts(e,t,i,A,n,s){if(i+A>e.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("Index out of range")}function is(e,t,i,A,n){return n||ts(e,0,i,4),Qn(e,t,i,A,23,4),i+4}function As(e,t,i,A,n){return n||ts(e,0,i,8),Qn(e,t,i,A,52,8),i+8}_n.prototype.slice=function(e,t){var i,A=this.length;if((e=~~e)<0?(e+=A)<0&&(e=0):e>A&&(e=A),(t=void 0===t?A:~~t)<0?(t+=A)<0&&(t=0):t>A&&(t=A),t<e&&(t=e),_n.TYPED_ARRAY_SUPPORT)(i=this.subarray(e,t)).__proto__=_n.prototype;else{var n=t-e;i=new _n(n,void 0);for(var s=0;s<n;++s)i[s]=this[s+e]}return i},_n.prototype.readUIntLE=function(e,t,i){e|=0,t|=0,i||Zn(e,t,this.length);for(var A=this[e],n=1,s=0;++s<t&&(n*=256);)A+=this[e+s]*n;return A},_n.prototype.readUIntBE=function(e,t,i){e|=0,t|=0,i||Zn(e,t,this.length);for(var A=this[e+--t],n=1;t>0&&(n*=256);)A+=this[e+--t]*n;return A},_n.prototype.readUInt8=function(e,t){return t||Zn(e,1,this.length),this[e]},_n.prototype.readUInt16LE=function(e,t){return t||Zn(e,2,this.length),this[e]|this[e+1]<<8},_n.prototype.readUInt16BE=function(e,t){return t||Zn(e,2,this.length),this[e]<<8|this[e+1]},_n.prototype.readUInt32LE=function(e,t){return t||Zn(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},_n.prototype.readUInt32BE=function(e,t){return t||Zn(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},_n.prototype.readIntLE=function(e,t,i){e|=0,t|=0,i||Zn(e,t,this.length);for(var A=this[e],n=1,s=0;++s<t&&(n*=256);)A+=this[e+s]*n;return A>=(n*=128)&&(A-=Math.pow(2,8*t)),A},_n.prototype.readIntBE=function(e,t,i){e|=0,t|=0,i||Zn(e,t,this.length);for(var A=t,n=1,s=this[e+--A];A>0&&(n*=256);)s+=this[e+--A]*n;return s>=(n*=128)&&(s-=Math.pow(2,8*t)),s},_n.prototype.readInt8=function(e,t){return t||Zn(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},_n.prototype.readInt16LE=function(e,t){t||Zn(e,2,this.length);var i=this[e]|this[e+1]<<8;return 32768&i?4294901760|i:i},_n.prototype.readInt16BE=function(e,t){t||Zn(e,2,this.length);var i=this[e+1]|this[e]<<8;return 32768&i?4294901760|i:i},_n.prototype.readInt32LE=function(e,t){return t||Zn(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},_n.prototype.readInt32BE=function(e,t){return t||Zn(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},_n.prototype.readFloatLE=function(e,t){return t||Zn(e,4,this.length),Bn(this,e,!0,23,4)},_n.prototype.readFloatBE=function(e,t){return t||Zn(e,4,this.length),Bn(this,e,!1,23,4)},_n.prototype.readDoubleLE=function(e,t){return t||Zn(e,8,this.length),Bn(this,e,!0,52,8)},_n.prototype.readDoubleBE=function(e,t){return t||Zn(e,8,this.length),Bn(this,e,!1,52,8)},_n.prototype.writeUIntLE=function(e,t,i,A){(e=+e,t|=0,i|=0,A)||Xn(this,e,t,i,Math.pow(2,8*i)-1,0);var n=1,s=0;for(this[t]=255&e;++s<i&&(n*=256);)this[t+s]=e/n&255;return t+i},_n.prototype.writeUIntBE=function(e,t,i,A){(e=+e,t|=0,i|=0,A)||Xn(this,e,t,i,Math.pow(2,8*i)-1,0);var n=i-1,s=1;for(this[t+n]=255&e;--n>=0&&(s*=256);)this[t+n]=e/s&255;return t+i},_n.prototype.writeUInt8=function(e,t,i){return e=+e,t|=0,i||Xn(this,e,t,1,255,0),_n.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},_n.prototype.writeUInt16LE=function(e,t,i){return e=+e,t|=0,i||Xn(this,e,t,2,65535,0),_n.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):$n(this,e,t,!0),t+2},_n.prototype.writeUInt16BE=function(e,t,i){return e=+e,t|=0,i||Xn(this,e,t,2,65535,0),_n.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):$n(this,e,t,!1),t+2},_n.prototype.writeUInt32LE=function(e,t,i){return e=+e,t|=0,i||Xn(this,e,t,4,4294967295,0),_n.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):es(this,e,t,!0),t+4},_n.prototype.writeUInt32BE=function(e,t,i){return e=+e,t|=0,i||Xn(this,e,t,4,4294967295,0),_n.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):es(this,e,t,!1),t+4},_n.prototype.writeIntLE=function(e,t,i,A){if(e=+e,t|=0,!A){var n=Math.pow(2,8*i-1);Xn(this,e,t,i,n-1,-n)}var s=0,r=1,a=0;for(this[t]=255&e;++s<i&&(r*=256);)e<0&&0===a&&0!==this[t+s-1]&&(a=1),this[t+s]=(e/r|0)-a&255;return t+i},_n.prototype.writeIntBE=function(e,t,i,A){if(e=+e,t|=0,!A){var n=Math.pow(2,8*i-1);Xn(this,e,t,i,n-1,-n)}var s=i-1,r=1,a=0;for(this[t+s]=255&e;--s>=0&&(r*=256);)e<0&&0===a&&0!==this[t+s+1]&&(a=1),this[t+s]=(e/r|0)-a&255;return t+i},_n.prototype.writeInt8=function(e,t,i){return e=+e,t|=0,i||Xn(this,e,t,1,127,-128),_n.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},_n.prototype.writeInt16LE=function(e,t,i){return e=+e,t|=0,i||Xn(this,e,t,2,32767,-32768),_n.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):$n(this,e,t,!0),t+2},_n.prototype.writeInt16BE=function(e,t,i){return e=+e,t|=0,i||Xn(this,e,t,2,32767,-32768),_n.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):$n(this,e,t,!1),t+2},_n.prototype.writeInt32LE=function(e,t,i){return e=+e,t|=0,i||Xn(this,e,t,4,2147483647,-2147483648),_n.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):es(this,e,t,!0),t+4},_n.prototype.writeInt32BE=function(e,t,i){return e=+e,t|=0,i||Xn(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),_n.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):es(this,e,t,!1),t+4},_n.prototype.writeFloatLE=function(e,t,i){return is(this,e,t,!0,i)},_n.prototype.writeFloatBE=function(e,t,i){return is(this,e,t,!1,i)},_n.prototype.writeDoubleLE=function(e,t,i){return As(this,e,t,!0,i)},_n.prototype.writeDoubleBE=function(e,t,i){return As(this,e,t,!1,i)},_n.prototype.copy=function(e,t,i,A){if(i||(i=0),A||0===A||(A=this.length),t>=e.length&&(t=e.length),t||(t=0),A>0&&A<i&&(A=i),A===i)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(i<0||i>=this.length)throw new RangeError("sourceStart out of bounds");if(A<0)throw new RangeError("sourceEnd out of bounds");A>this.length&&(A=this.length),e.length-t<A-i&&(A=e.length-t+i);var n,s=A-i;if(this===e&&i<t&&t<A)for(n=s-1;n>=0;--n)e[n+t]=this[n+i];else if(s<1e3||!_n.TYPED_ARRAY_SUPPORT)for(n=0;n<s;++n)e[n+t]=this[n+i];else Uint8Array.prototype.set.call(e,this.subarray(i,i+s),t);return s},_n.prototype.fill=function(e,t,i,A){if("string"==typeof e){if("string"==typeof t?(A=t,t=0,i=this.length):"string"==typeof i&&(A=i,i=this.length),1===e.length){var n=e.charCodeAt(0);n<256&&(e=n)}if(void 0!==A&&"string"!=typeof A)throw new TypeError("encoding must be a string");if("string"==typeof A&&!_n.isEncoding(A))throw new TypeError("Unknown encoding: "+A)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<i)throw new RangeError("Out of range index");if(i<=t)return this;var s;if(t>>>=0,i=void 0===i?this.length:i>>>0,e||(e=0),"number"==typeof e)for(s=t;s<i;++s)this[s]=e;else{var r=kn(e)?e:rs(new _n(e,A).toString()),a=r.length;for(s=0;s<i-t;++s)this[s+t]=r[s%a]}return this};var ns=/[^+\/0-9A-Za-z-_]/g;function ss(e){return e<16?"0"+e.toString(16):e.toString(16)}function rs(e,t){var i;t=t||1/0;for(var A=e.length,n=null,s=[],r=0;r<A;++r){if((i=e.charCodeAt(r))>55295&&i<57344){if(!n){if(i>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(r+1===A){(t-=3)>-1&&s.push(239,191,189);continue}n=i;continue}if(i<56320){(t-=3)>-1&&s.push(239,191,189),n=i;continue}i=65536+(n-55296<<10|i-56320)}else n&&(t-=3)>-1&&s.push(239,191,189);if(n=null,i<128){if((t-=1)<0)break;s.push(i)}else if(i<2048){if((t-=2)<0)break;s.push(i>>6|192,63&i|128)}else if(i<65536){if((t-=3)<0)break;s.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;s.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return s}function as(e){return function(e){var t,i,A,n,s,r;Cn||fn();var a=e.length;if(a%4>0)throw new Error("Invalid string. Length must be a multiple of 4");s="="===e[a-2]?2:"="===e[a-1]?1:0,r=new In(3*a/4-s),A=s>0?a-4:a;var o=0;for(t=0,i=0;t<A;t+=4,i+=3)n=un[e.charCodeAt(t)]<<18|un[e.charCodeAt(t+1)]<<12|un[e.charCodeAt(t+2)]<<6|un[e.charCodeAt(t+3)],r[o++]=n>>16&255,r[o++]=n>>8&255,r[o++]=255&n;return 2===s?(n=un[e.charCodeAt(t)]<<2|un[e.charCodeAt(t+1)]>>4,r[o++]=255&n):1===s&&(n=un[e.charCodeAt(t)]<<10|un[e.charCodeAt(t+1)]<<4|un[e.charCodeAt(t+2)]>>2,r[o++]=n>>8&255,r[o++]=255&n),r}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(ns,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function os(e,t,i,A){for(var n=0;n<A&&!(n+i>=t.length||n>=e.length);++n)t[n+i]=e[n];return n}function cs(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}const ls=new class{dbName="LargeFileCacheDB";storeName="files";db;constructor(){this.init()}async init(){return new Promise(((e,t)=>{const i=indexedDB.open(this.dbName,1);i.onupgradeneeded=()=>{const e=i.result;e.objectStoreNames.contains(this.storeName)||e.createObjectStore(this.storeName)},i.onsuccess=()=>{this.db=i.result,e()},i.onerror=()=>t(i.error)}))}async set(e,t){return new Promise(((i,A)=>{if(!this.db)return A("indexedDB 还未初始化");const n=this.db.transaction(this.storeName,"readwrite").objectStore(this.storeName),s=new Blob([t]),r=n.put(s,e);r.onsuccess=()=>i(),r.onerror=()=>A(r.error)}))}async get(e){return new Promise((t=>{if(!this.db)return t(null);const i=this.db.transaction(this.storeName,"readonly").objectStore(this.storeName).get(e);i.onsuccess=()=>t(i.result||null)}))}},hs=async e=>{const{model:t,onProgress:i}=e,A=await async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(e,t,i)=>{};if(!e)throw new Error("url is required");const i=await ls.get(e);if(i)return t(e,100,100),await i.arrayBuffer();const A=await fetch(e),n=A.body.getReader(),s=+A.headers.get("content-length");let r=0,a=[];for(;;){const{done:i,value:A}=await n.read();if(i)break;a.push(A),r+=A.length,t&&t(e,r,s)}const o=new Uint8Array(a.reduce(((e,t)=>e+t.length),0));let c=0;for(let e of a)o.set(e,c),c+=e.length;const l=o.buffer;return await ls.set(e,l),l}(t.bundle,i),n=_n.from(A),s=t.key??t.bundle.replace(/^.*\/(.*?).bundle/,"$1"),r=await hn(n,s);return{...t,buffer:r.buffer}},gs=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e=>{};const i=[],A={},n=function(){let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;A[i]={url:i,progress:n,total:s};let r=0,a=0;e.forEach((e=>{let{bundle:t}=e;r+=A[t].total,a+=A[t].progress}));const o=Math.floor(a/r*100);t(o)};return e.forEach((e=>{A[e.bundle]={url:e.bundle,progress:0,total:0},i.push(hs({model:e,onProgress:n}))})),Promise.all(i)},ds={idle:{code:"idle",kind:"base",loop:!0},talk:{code:"talk",kind:"base",loop:!0},think:{code:"think",kind:"base",loop:!0},listening:{code:"listening",kind:"base",loop:!0},act_greet:{code:"act_greet",kind:"gesture",loop:!1,reps:1},act_clap:{code:"act_clap",kind:"gesture",loop:!1,reps:2},dance:{code:"dance",kind:"perform",loop:!0}},us=["idle","talk","think","listening"];function Is(e){return us.find((t=>e.includes("_"+t)))??null}const Cs="qt-human-degraded-notice";class fs{container;constructor(e){this.container="string"==typeof e?document.getElementById(e):e??null}syncWithToken(e){const t=function(e){try{const t=e.split(".")[1];if(!t)return null;const i=t.replace(/-/g,"+").replace(/_/g,"/"),A=decodeURIComponent(atob(i).split("").map((e=>"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2))).join(""));return JSON.parse(A)}catch{return null}}(e);t&&!0===t.degraded?this.show():this.hide()}show(){if(!this.container||this.container.querySelector(`#${Cs}`))return;"static"===window.getComputedStyle(this.container).position&&(this.container.style.position="relative");const e=document.createElement("div");e.id=Cs,e.textContent="平台运行授权已到期,当前为降级体验;请联系服务方续期以恢复完整服务",Object.assign(e.style,{position:"absolute",left:"0",right:"0",bottom:"0",zIndex:"9",padding:"6px 12px",fontSize:"12px",lineHeight:"1.6",textAlign:"center",color:"#7a5b00",background:"rgba(255, 244, 206, 0.92)",borderTop:"1px solid rgba(214, 178, 70, 0.55)",pointerEvents:"none",fontFamily:'-apple-system, system-ui, "PingFang SC", sans-serif'}),this.container.appendChild(e),console.warn("[Human] 平台运行授权已到期(degraded),显示降级提示;续期后刷新 token 自动消失")}hide(){this.container?.querySelector(`#${Cs}`)?.remove()}destroy(){this.hide(),this.container=null}}var Es=new class{prefix;ttl;cache;constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.prefix=e.prefix||"app_",this.ttl=e.ttl||0,this.cache=new Map}getKey(e){return`${this.prefix}${e}`}isExpired(e){return!!e.expiry&&Date.now()>e.expiry}setItem(e,t){const i={value:t,expiry:this.ttl?Date.now()+this.ttl:null};this.cache.set(this.getKey(e),i)}getItem(e){const t=this.getKey(e);if(this.cache.has(t)){const e=this.cache.get(t);if(!this.isExpired(e))return e.value;this.cache.delete(t)}return null}removeItem(e){const t=this.getKey(e);this.cache.delete(t)}clear(){this.cache.clear()}}({prefix:"quante_",ttl:12096e5});const ps="auth-token",Bs="platform-base-api";function Qs(){throw new Error("setTimeout has not been defined")}function ms(){throw new Error("clearTimeout has not been defined")}var ys=Qs,ws=ms;function Ss(e){if(ys===setTimeout)return setTimeout(e,0);if((ys===Qs||!ys)&&setTimeout)return ys=setTimeout,setTimeout(e,0);try{return ys(e,0)}catch(t){try{return ys.call(null,e,0)}catch(t){return ys.call(this,e,0)}}}"function"==typeof gn.setTimeout&&(ys=setTimeout),"function"==typeof gn.clearTimeout&&(ws=clearTimeout);var _s,Ts=[],Ds=!1,bs=-1;function Rs(){Ds&&_s&&(Ds=!1,_s.length?Ts=_s.concat(Ts):bs=-1,Ts.length&&vs())}function vs(){if(!Ds){var e=Ss(Rs);Ds=!0;for(var t=Ts.length;t;){for(_s=Ts,Ts=[];++bs<t;)_s&&_s[bs].run();bs=-1,t=Ts.length}_s=null,Ds=!1,function(e){if(ws===clearTimeout)return clearTimeout(e);if((ws===ms||!ws)&&clearTimeout)return ws=clearTimeout,clearTimeout(e);try{return ws(e)}catch(t){try{return ws.call(null,e)}catch(t){return ws.call(this,e)}}}(e)}}function ks(e,t){this.fun=e,this.array=t}ks.prototype.run=function(){this.fun.apply(null,this.array)};function xs(){}var Ps=xs,Fs=xs,Ms=xs,Ns=xs,Ls=xs,Us=xs,Gs=xs;var Os=gn.performance||{},Js=Os.now||Os.mozNow||Os.msNow||Os.oNow||Os.webkitNow||function(){return(new Date).getTime()};var qs=new Date;var Ks={nextTick:function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)t[i-1]=arguments[i];Ts.push(new ks(e,t)),1!==Ts.length||Ds||Ss(vs)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:Ps,addListener:Fs,once:Ms,off:Ns,removeListener:Ls,removeAllListeners:Us,emit:Gs,binding:function(e){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(e){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(e){var t=.001*Js.call(Os),i=Math.floor(t),A=Math.floor(t%1*1e9);return e&&(i-=e[0],(A-=e[1])<0&&(i--,A+=1e9)),[i,A]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-qs)/1e3}};function Hs(e,t){return function(){return e.apply(t,arguments)}}const{toString:Ws}=Object.prototype,{getPrototypeOf:Ys}=Object,{iterator:zs,toStringTag:js}=Symbol,Vs=(Zs=Object.create(null),e=>{const t=Ws.call(e);return Zs[t]||(Zs[t]=t.slice(8,-1).toLowerCase())});var Zs;const Xs=e=>(e=e.toLowerCase(),t=>Vs(t)===e),$s=e=>t=>typeof t===e,{isArray:er}=Array,tr=$s("undefined");function ir(e){return null!==e&&!tr(e)&&null!==e.constructor&&!tr(e.constructor)&&sr(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Ar=Xs("ArrayBuffer");const nr=$s("string"),sr=$s("function"),rr=$s("number"),ar=e=>null!==e&&"object"==typeof e,or=e=>{if("object"!==Vs(e))return!1;const t=Ys(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||js in e||zs in e)},cr=Xs("Date"),lr=Xs("File"),hr=Xs("Blob"),gr=Xs("FileList");const dr="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==gn?gn:{},ur=void 0!==dr.FormData?dr.FormData:void 0,Ir=Xs("URLSearchParams"),[Cr,fr,Er,pr]=["ReadableStream","Request","Response","Headers"].map(Xs);function Br(e,t,{allOwnKeys:i=!1}={}){if(null==e)return;let A,n;if("object"!=typeof e&&(e=[e]),er(e))for(A=0,n=e.length;A<n;A++)t.call(null,e[A],A,e);else{if(ir(e))return;const n=i?Object.getOwnPropertyNames(e):Object.keys(e),s=n.length;let r;for(A=0;A<s;A++)r=n[A],t.call(null,e[r],r,e)}}function Qr(e,t){if(ir(e))return null;t=t.toLowerCase();const i=Object.keys(e);let A,n=i.length;for(;n-- >0;)if(A=i[n],t===A.toLowerCase())return A;return null}const mr="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:gn,yr=e=>!tr(e)&&e!==mr;const wr=(Sr="undefined"!=typeof Uint8Array&&Ys(Uint8Array),e=>Sr&&e instanceof Sr);var Sr;const _r=Xs("HTMLFormElement"),Tr=(({hasOwnProperty:e})=>(t,i)=>e.call(t,i))(Object.prototype),{propertyIsEnumerable:Dr}=Object.prototype,br=Xs("RegExp"),Rr=(e,t)=>{const i=Object.getOwnPropertyDescriptors(e),A={};Br(i,((i,n)=>{let s;!1!==(s=t(i,n,e))&&(A[n]=s||i)})),Object.defineProperties(e,A)};const vr=Xs("AsyncFunction"),kr=(xr="function"==typeof setImmediate,Pr=sr(mr.postMessage),xr?setImmediate:Pr?(Fr=`axios@${Math.random()}`,Mr=[],mr.addEventListener("message",(({source:e,data:t})=>{e===mr&&t===Fr&&Mr.length&&Mr.shift()()}),!1),e=>{Mr.push(e),mr.postMessage(Fr,"*")}):e=>setTimeout(e));var xr,Pr,Fr,Mr;const Nr="undefined"!=typeof queueMicrotask?queueMicrotask.bind(mr):void 0!==Ks&&Ks.nextTick||kr;var Lr={isArray:er,isArrayBuffer:Ar,isBuffer:ir,isFormData:e=>{if(!e)return!1;if(ur&&e instanceof ur)return!0;const t=Ys(e);if(!t||t===Object.prototype)return!1;if(!sr(e.append))return!1;const i=Vs(e);return"formdata"===i||"object"===i&&sr(e.toString)&&"[object FormData]"===e.toString()},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Ar(e.buffer),t},isString:nr,isNumber:rr,isBoolean:e=>!0===e||!1===e,isObject:ar,isPlainObject:or,isEmptyObject:e=>{if(!ar(e)||ir(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:Cr,isRequest:fr,isResponse:Er,isHeaders:pr,isUndefined:tr,isDate:cr,isFile:lr,isReactNativeBlob:e=>!(!e||void 0===e.uri),isReactNative:e=>e&&void 0!==e.getParts,isBlob:hr,isRegExp:br,isFunction:sr,isStream:e=>ar(e)&&sr(e.pipe),isURLSearchParams:Ir,isTypedArray:wr,isFileList:gr,forEach:Br,merge:function e(...t){const{caseless:i,skipUndefined:A}=yr(this)&&this||{},n={},s=(t,s)=>{if("__proto__"===s||"constructor"===s||"prototype"===s)return;const r=i&&"string"==typeof s&&Qr(n,s)||s,a=Tr(n,r)?n[r]:void 0;or(a)&&or(t)?n[r]=e(a,t):or(t)?n[r]=e({},t):er(t)?n[r]=t.slice():A&&tr(t)||(n[r]=t)};for(let e=0,i=t.length;e<i;e++){const i=t[e];if(!i||ir(i))continue;if(Br(i,s),"object"!=typeof i||er(i))continue;const A=Object.getOwnPropertySymbols(i);for(let e=0;e<A.length;e++){const t=A[e];Dr.call(i,t)&&s(i[t],t)}}return n},extend:(e,t,i,{allOwnKeys:A}={})=>(Br(t,((t,A)=>{i&&sr(t)?Object.defineProperty(e,A,{__proto__:null,value:Hs(t,i),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,A,{__proto__:null,value:t,writable:!0,enumerable:!0,configurable:!0})}),{allOwnKeys:A}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,i,A)=>{e.prototype=Object.create(t.prototype,A),Object.defineProperty(e.prototype,"constructor",{__proto__:null,value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{__proto__:null,value:t.prototype}),i&&Object.assign(e.prototype,i)},toFlatObject:(e,t,i,A)=>{let n,s,r;const a={};if(t=t||{},null==e)return t;do{for(n=Object.getOwnPropertyNames(e),s=n.length;s-- >0;)r=n[s],A&&!A(r,e,t)||a[r]||(t[r]=e[r],a[r]=!0);e=!1!==i&&Ys(e)}while(e&&(!i||i(e,t))&&e!==Object.prototype);return t},kindOf:Vs,kindOfTest:Xs,endsWith:(e,t,i)=>{e=String(e),(void 0===i||i>e.length)&&(i=e.length),i-=t.length;const A=e.indexOf(t,i);return-1!==A&&A===i},toArray:e=>{if(!e)return null;if(er(e))return e;let t=e.length;if(!rr(t))return null;const i=new Array(t);for(;t-- >0;)i[t]=e[t];return i},forEachEntry:(e,t)=>{const i=(e&&e[zs]).call(e);let A;for(;(A=i.next())&&!A.done;){const i=A.value;t.call(e,i[0],i[1])}},matchAll:(e,t)=>{let i;const A=[];for(;null!==(i=e.exec(t));)A.push(i);return A},isHTMLForm:_r,hasOwnProperty:Tr,hasOwnProp:Tr,reduceDescriptors:Rr,freezeMethods:e=>{Rr(e,((t,i)=>{if(sr(e)&&["arguments","caller","callee"].includes(i))return!1;const A=e[i];sr(A)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+i+"'")}))}))},toObjectSet:(e,t)=>{const i={},A=e=>{e.forEach((e=>{i[e]=!0}))};return er(e)?A(e):A(String(e).split(t)),i},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,i){return t.toUpperCase()+i})),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:Qr,global:mr,isContextDefined:yr,isSpecCompliantForm:function(e){return!!(e&&sr(e.append)&&"FormData"===e[js]&&e[zs])},toJSONObject:e=>{const t=new WeakSet,i=e=>{if(ar(e)){if(t.has(e))return;if(ir(e))return e;if(!("toJSON"in e)){t.add(e);const A=er(e)?[]:{};return Br(e,((e,t)=>{const n=i(e);!tr(n)&&(A[t]=n)})),t.delete(e),A}}return e};return i(e)},isAsyncFn:vr,isThenable:e=>e&&(ar(e)||sr(e))&&sr(e.then)&&sr(e.catch),setImmediate:kr,asap:Nr,isIterable:e=>null!=e&&sr(e[zs])};const Ur=Lr.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const Gr=new RegExp("[\\u0000-\\u0008\\u000a-\\u001f\\u007f]+","g"),Or=new RegExp("[^\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+","g");function Jr(e,t){return Lr.isArray(e)?e.map((e=>Jr(e,t))):function(e){let t=0,i=e.length;for(;t<i;){const i=e.charCodeAt(t);if(9!==i&&32!==i)break;t+=1}for(;i>t;){const t=e.charCodeAt(i-1);if(9!==t&&32!==t)break;i-=1}return 0===t&&i===e.length?e:e.slice(t,i)}(String(e).replace(t,""))}function qr(e){const t=Object.create(null);return Lr.forEach(e.toJSON(),((e,i)=>{t[i]=(e=>Jr(e,Or))(e)})),t}const Kr=Symbol("internals");function Hr(e){return e&&String(e).trim().toLowerCase()}function Wr(e){return!1===e||null==e?e:Lr.isArray(e)?e.map(Wr):(e=>Jr(e,Gr))(String(e))}function Yr(e,t,i,A,n){return Lr.isFunction(A)?A.call(this,t,i):(n&&(t=i),Lr.isString(t)?Lr.isString(A)?-1!==t.indexOf(A):Lr.isRegExp(A)?A.test(t):void 0:void 0)}class zr{constructor(e){e&&this.set(e)}set(e,t,i){const A=this;function n(e,t,i){const n=Hr(t);if(!n)return;const s=Lr.findKey(A,n);(!s||void 0===A[s]||!0===i||void 0===i&&!1!==A[s])&&(A[s||t]=Wr(e))}const s=(e,t)=>Lr.forEach(e,((e,i)=>n(e,i,t)));if(Lr.isPlainObject(e)||e instanceof this.constructor)s(e,t);else if(Lr.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))s((e=>{const t={};let i,A,n;return e&&e.split("\n").forEach((function(e){n=e.indexOf(":"),i=e.substring(0,n).trim().toLowerCase(),A=e.substring(n+1).trim(),!i||t[i]&&Ur[i]||("set-cookie"===i?t[i]?t[i].push(A):t[i]=[A]:t[i]=t[i]?t[i]+", "+A:A)})),t})(e),t);else if(Lr.isObject(e)&&Lr.isIterable(e)){let i,A,n={};for(const t of e){if(!Lr.isArray(t))throw new TypeError("Object iterator must return a key-value pair");n[A=t[0]]=(i=n[A])?Lr.isArray(i)?[...i,t[1]]:[i,t[1]]:t[1]}s(n,t)}else null!=e&&n(t,e,i);return this}get(e,t){if(e=Hr(e)){const i=Lr.findKey(this,e);if(i){const e=this[i];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),i=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let A;for(;A=i.exec(e);)t[A[1]]=A[2];return t}(e);if(Lr.isFunction(t))return t.call(this,e,i);if(Lr.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Hr(e)){const i=Lr.findKey(this,e);return!(!i||void 0===this[i]||t&&!Yr(0,this[i],i,t))}return!1}delete(e,t){const i=this;let A=!1;function n(e){if(e=Hr(e)){const n=Lr.findKey(i,e);!n||t&&!Yr(0,i[n],n,t)||(delete i[n],A=!0)}}return Lr.isArray(e)?e.forEach(n):n(e),A}clear(e){const t=Object.keys(this);let i=t.length,A=!1;for(;i--;){const n=t[i];e&&!Yr(0,this[n],n,e,!0)||(delete this[n],A=!0)}return A}normalize(e){const t=this,i={};return Lr.forEach(this,((A,n)=>{const s=Lr.findKey(i,n);if(s)return t[s]=Wr(A),void delete t[n];const r=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,i)=>t.toUpperCase()+i))}(n):String(n).trim();r!==n&&delete t[n],t[r]=Wr(A),i[r]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return Lr.forEach(this,((i,A)=>{null!=i&&!1!==i&&(t[A]=e&&Lr.isArray(i)?i.join(", "):i)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const i=new this(e);return t.forEach((e=>i.set(e))),i}static accessor(e){const t=(this[Kr]=this[Kr]={accessors:{}}).accessors,i=this.prototype;function A(e){const A=Hr(e);t[A]||(!function(e,t){const i=Lr.toCamelCase(" "+t);["get","set","has"].forEach((A=>{Object.defineProperty(e,A+i,{__proto__:null,value:function(e,i,n){return this[A].call(this,t,e,i,n)},configurable:!0})}))}(i,e),t[A]=!0)}return Lr.isArray(e)?e.forEach(A):A(e),this}}zr.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),Lr.reduceDescriptors(zr.prototype,(({value:e},t)=>{let i=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[i]=e}}})),Lr.freezeMethods(zr);function jr(e,t){const i=new Set(t.map((e=>String(e).toLowerCase()))),A=[],n=e=>{if(null===e||"object"!=typeof e)return e;if(Lr.isBuffer(e))return e;if(-1!==A.indexOf(e))return;let t;if(e instanceof zr&&(e=e.toJSON()),A.push(e),Lr.isArray(e))t=[],e.forEach(((e,i)=>{const A=n(e);Lr.isUndefined(A)||(t[i]=A)}));else{if(!Lr.isPlainObject(e)&&function(e){if(Lr.hasOwnProp(e,"toJSON"))return!0;let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(Lr.hasOwnProp(t,"toJSON"))return!0;t=Object.getPrototypeOf(t)}return!1}(e))return A.pop(),e;t=Object.create(null);for(const[A,s]of Object.entries(e)){const e=i.has(A.toLowerCase())?"[REDACTED ****]":n(s);Lr.isUndefined(e)||(t[A]=e)}}return A.pop(),t};return n(e)}class Vr extends Error{static from(e,t,i,A,n,s){const r=new Vr(e.message,t||e.code,i,A,n);return r.cause=e,r.name=e.name,null!=e.status&&null==r.status&&(r.status=e.status),s&&Object.assign(r,s),r}constructor(e,t,i,A,n){super(e),Object.defineProperty(this,"message",{__proto__:null,value:e,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,t&&(this.code=t),i&&(this.config=i),A&&(this.request=A),n&&(this.response=n,this.status=n.status)}toJSON(){const e=this.config,t=e&&Lr.hasOwnProp(e,"redact")?e.redact:void 0,i=Lr.isArray(t)&&t.length>0?jr(e,t):Lr.toJSONObject(e);return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:i,code:this.code,status:this.status}}}Vr.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",Vr.ERR_BAD_OPTION="ERR_BAD_OPTION",Vr.ECONNABORTED="ECONNABORTED",Vr.ETIMEDOUT="ETIMEDOUT",Vr.ECONNREFUSED="ECONNREFUSED",Vr.ERR_NETWORK="ERR_NETWORK",Vr.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",Vr.ERR_DEPRECATED="ERR_DEPRECATED",Vr.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",Vr.ERR_BAD_REQUEST="ERR_BAD_REQUEST",Vr.ERR_CANCELED="ERR_CANCELED",Vr.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",Vr.ERR_INVALID_URL="ERR_INVALID_URL",Vr.ERR_FORM_DATA_DEPTH_EXCEEDED="ERR_FORM_DATA_DEPTH_EXCEEDED";function Zr(e){return Lr.isPlainObject(e)||Lr.isArray(e)}function Xr(e){return Lr.endsWith(e,"[]")?e.slice(0,-2):e}function $r(e,t,i){return e?e.concat(t).map((function(e,t){return e=Xr(e),!i&&t?"["+e+"]":e})).join(i?".":""):t}const ea=Lr.toFlatObject(Lr,{},null,(function(e){return/^is[A-Z]/.test(e)}));function ta(e,t,i){if(!Lr.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const A=(i=Lr.toFlatObject(i,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!Lr.isUndefined(t[e])}))).metaTokens,n=i.visitor||h,s=i.dots,r=i.indexes,a=i.Blob||"undefined"!=typeof Blob&&Blob,o=void 0===i.maxDepth?100:i.maxDepth,c=a&&Lr.isSpecCompliantForm(t);if(!Lr.isFunction(n))throw new TypeError("visitor must be a function");function l(e){if(null===e)return"";if(Lr.isDate(e))return e.toISOString();if(Lr.isBoolean(e))return e.toString();if(!c&&Lr.isBlob(e))throw new Vr("Blob is not supported. Use a Buffer instead.");return Lr.isArrayBuffer(e)||Lr.isTypedArray(e)?c&&"function"==typeof Blob?new Blob([e]):_n.from(e):e}function h(e,i,n){let a=e;if(Lr.isReactNative(t)&&Lr.isReactNativeBlob(e))return t.append($r(n,i,s),l(e)),!1;if(e&&!n&&"object"==typeof e)if(Lr.endsWith(i,"{}"))i=A?i:i.slice(0,-2),e=JSON.stringify(e);else if(Lr.isArray(e)&&function(e){return Lr.isArray(e)&&!e.some(Zr)}(e)||(Lr.isFileList(e)||Lr.endsWith(i,"[]"))&&(a=Lr.toArray(e)))return i=Xr(i),a.forEach((function(e,A){!Lr.isUndefined(e)&&null!==e&&t.append(!0===r?$r([i],A,s):null===r?i:i+"[]",l(e))})),!1;return!!Zr(e)||(t.append($r(n,i,s),l(e)),!1)}const g=[],d=Object.assign(ea,{defaultVisitor:h,convertValue:l,isVisitable:Zr});if(!Lr.isObject(e))throw new TypeError("data must be an object");return function e(i,A,s=0){if(!Lr.isUndefined(i)){if(s>o)throw new Vr("Object is too deeply nested ("+s+" levels). Max depth: "+o,Vr.ERR_FORM_DATA_DEPTH_EXCEEDED);if(-1!==g.indexOf(i))throw new Error("Circular reference detected in "+A.join("."));g.push(i),Lr.forEach(i,(function(i,r){!0===(!(Lr.isUndefined(i)||null===i)&&n.call(t,i,Lr.isString(r)?r.trim():r,A,d))&&e(i,A?A.concat(r):[r],s+1)})),g.pop()}}(e),t}function ia(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"};return encodeURIComponent(e).replace(/[!'()~]|%20/g,(function(e){return t[e]}))}function Aa(e,t){this._pairs=[],e&&ta(e,this,t)}const na=Aa.prototype;function sa(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function ra(e,t,i){if(!t)return e;const A=i&&i.encode||sa,n=Lr.isFunction(i)?{serialize:i}:i,s=n&&n.serialize;let r;if(r=s?s(t,n):Lr.isURLSearchParams(t)?t.toString():new Aa(t,n).toString(A),r){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+r}return e}na.append=function(e,t){this._pairs.push([e,t])},na.toString=function(e){const t=e?function(t){return e.call(this,t,ia)}:ia;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};class aa{constructor(){this.handlers=[]}use(e,t,i){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!i&&i.synchronous,runWhen:i?i.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){Lr.forEach(this.handlers,(function(t){null!==t&&e(t)}))}}var oa={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0,advertiseZstdAcceptEncoding:!1},ca={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Aa,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const la="undefined"!=typeof window&&"undefined"!=typeof document,ha="object"==typeof navigator&&navigator||void 0,ga=la&&(!ha||["ReactNative","NativeScript","NS"].indexOf(ha.product)<0),da="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,ua=la&&window.location.href||"http://localhost";var Ia={...Object.freeze({__proto__:null,hasBrowserEnv:la,hasStandardBrowserEnv:ga,hasStandardBrowserWebWorkerEnv:da,navigator:ha,origin:ua}),...ca};function Ca(e){function t(e,i,A,n){let s=e[n++];if("__proto__"===s)return!0;const r=Number.isFinite(+s),a=n>=e.length;if(s=!s&&Lr.isArray(A)?A.length:s,a)return Lr.hasOwnProp(A,s)?A[s]=Lr.isArray(A[s])?A[s].concat(i):[A[s],i]:A[s]=i,!r;Lr.hasOwnProp(A,s)&&Lr.isObject(A[s])||(A[s]=[]);return t(e,i,A[s],n)&&Lr.isArray(A[s])&&(A[s]=function(e){const t={},i=Object.keys(e);let A;const n=i.length;let s;for(A=0;A<n;A++)s=i[A],t[s]=e[s];return t}(A[s])),!r}if(Lr.isFormData(e)&&Lr.isFunction(e.entries)){const i={};return Lr.forEachEntry(e,((e,A)=>{t(function(e){return Lr.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),A,i,0)})),i}return null}const fa=(e,t)=>null!=e&&Lr.hasOwnProp(e,t)?e[t]:void 0;const Ea={transitional:oa,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const i=t.getContentType()||"",A=i.indexOf("application/json")>-1,n=Lr.isObject(e);n&&Lr.isHTMLForm(e)&&(e=new FormData(e));if(Lr.isFormData(e))return A?JSON.stringify(Ca(e)):e;if(Lr.isArrayBuffer(e)||Lr.isBuffer(e)||Lr.isStream(e)||Lr.isFile(e)||Lr.isBlob(e)||Lr.isReadableStream(e))return e;if(Lr.isArrayBufferView(e))return e.buffer;if(Lr.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let s;if(n){const t=fa(this,"formSerializer");if(i.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return ta(e,new Ia.classes.URLSearchParams,{visitor:function(e,t,i,A){return Ia.isNode&&Lr.isBuffer(e)?(this.append(t,e.toString("base64")),!1):A.defaultVisitor.apply(this,arguments)},...t})}(e,t).toString();if((s=Lr.isFileList(e))||i.indexOf("multipart/form-data")>-1){const i=fa(this,"env"),A=i&&i.FormData;return ta(s?{"files[]":e}:e,A&&new A,t)}}return n||A?(t.setContentType("application/json",!1),function(e,t,i){if(Lr.isString(e))try{return(t||JSON.parse)(e),Lr.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(i||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=fa(this,"transitional")||Ea.transitional,i=t&&t.forcedJSONParsing,A=fa(this,"responseType"),n="json"===A;if(Lr.isResponse(e)||Lr.isReadableStream(e))return e;if(e&&Lr.isString(e)&&(i&&!A||n)){const i=!(t&&t.silentJSONParsing)&&n;try{return JSON.parse(e,fa(this,"parseReviver"))}catch(e){if(i){if("SyntaxError"===e.name)throw Vr.from(e,Vr.ERR_BAD_RESPONSE,this,null,fa(this,"response"));throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Ia.classes.FormData,Blob:Ia.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};function pa(e,t){const i=this||Ea,A=t||i,n=zr.from(A.headers);let s=A.data;return Lr.forEach(e,(function(e){s=e.call(i,s,n.normalize(),t?t.status:void 0)})),n.normalize(),s}function Ba(e){return!(!e||!e.__CANCEL__)}Lr.forEach(["delete","get","head","post","put","patch","query"],(e=>{Ea.headers[e]={}}));class Qa extends Vr{constructor(e,t,i){super(null==e?"canceled":e,Vr.ERR_CANCELED,t,i),this.name="CanceledError",this.__CANCEL__=!0}}function ma(e,t,i){const A=i.config.validateStatus;i.status&&A&&!A(i.status)?t(new Vr("Request failed with status code "+i.status,i.status>=400&&i.status<500?Vr.ERR_BAD_REQUEST:Vr.ERR_BAD_RESPONSE,i.config,i.request,i)):e(i)}const ya=(e,t,i=3)=>{let A=0;const n=function(e,t){e=e||10;const i=new Array(e),A=new Array(e);let n,s=0,r=0;return t=void 0!==t?t:1e3,function(a){const o=Date.now(),c=A[r];n||(n=o),i[s]=a,A[s]=o;let l=r,h=0;for(;l!==s;)h+=i[l++],l%=e;if(s=(s+1)%e,s===r&&(r=(r+1)%e),o-n<t)return;const g=c&&o-c;return g?Math.round(1e3*h/g):void 0}}(50,250);return function(e,t){let i,A,n=0,s=1e3/t;const r=(t,s=Date.now())=>{n=s,i=null,A&&(clearTimeout(A),A=null),e(...t)};return[(...e)=>{const t=Date.now(),a=t-n;a>=s?r(e,t):(i=e,A||(A=setTimeout((()=>{A=null,r(i)}),s-a)))},()=>i&&r(i)]}((i=>{if(!i||"number"!=typeof i.loaded)return;const s=i.loaded,r=i.lengthComputable?i.total:void 0,a=null!=r?Math.min(s,r):s,o=Math.max(0,a-A),c=n(o);A=Math.max(A,a);e({loaded:a,total:r,progress:r?a/r:void 0,bytes:o,rate:c||void 0,estimated:c&&r?(r-a)/c:void 0,event:i,lengthComputable:null!=r,[t?"download":"upload"]:!0})}),i)},wa=(e,t)=>{const i=null!=e;return[A=>t[0]({lengthComputable:i,total:e,loaded:A}),t[1]]},Sa=e=>(...t)=>Lr.asap((()=>e(...t)));var _a=Ia.hasStandardBrowserEnv?((e,t)=>i=>(i=new URL(i,Ia.origin),e.protocol===i.protocol&&e.host===i.host&&(t||e.port===i.port)))(new URL(Ia.origin),Ia.navigator&&/(msie|trident)/i.test(Ia.navigator.userAgent)):()=>!0,Ta=Ia.hasStandardBrowserEnv?{write(e,t,i,A,n,s,r){if("undefined"==typeof document)return;const a=[`${e}=${encodeURIComponent(t)}`];Lr.isNumber(i)&&a.push(`expires=${new Date(i).toUTCString()}`),Lr.isString(A)&&a.push(`path=${A}`),Lr.isString(n)&&a.push(`domain=${n}`),!0===s&&a.push("secure"),Lr.isString(r)&&a.push(`SameSite=${r}`),document.cookie=a.join("; ")},read(e){if("undefined"==typeof document)return null;const t=document.cookie.split(";");for(let i=0;i<t.length;i++){const A=t[i].replace(/^\s+/,""),n=A.indexOf("=");if(-1!==n&&A.slice(0,n)===e)return decodeURIComponent(A.slice(n+1))}return null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function Da(e,t,i){let A=!("string"==typeof(n=t)&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(n));var n;return e&&(A||!1===i)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const ba=e=>e instanceof zr?{...e}:e;function Ra(e,t){t=t||{};const i=Object.create(null);function A(e,t,i,A){return Lr.isPlainObject(e)&&Lr.isPlainObject(t)?Lr.merge.call({caseless:A},e,t):Lr.isPlainObject(t)?Lr.merge({},t):Lr.isArray(t)?t.slice():t}function n(e,t,i,n){return Lr.isUndefined(t)?Lr.isUndefined(e)?void 0:A(void 0,e,0,n):A(e,t,0,n)}function s(e,t){if(!Lr.isUndefined(t))return A(void 0,t)}function r(e,t){return Lr.isUndefined(t)?Lr.isUndefined(e)?void 0:A(void 0,e):A(void 0,t)}function a(i,n,s){return Lr.hasOwnProp(t,s)?A(i,n):Lr.hasOwnProp(e,s)?A(void 0,i):void 0}Object.defineProperty(i,"hasOwnProperty",{__proto__:null,value:Object.prototype.hasOwnProperty,enumerable:!1,writable:!0,configurable:!0});const o={url:s,method:s,data:s,baseURL:r,transformRequest:r,transformResponse:r,paramsSerializer:r,timeout:r,timeoutMessage:r,withCredentials:r,withXSRFToken:r,adapter:r,responseType:r,xsrfCookieName:r,xsrfHeaderName:r,onUploadProgress:r,onDownloadProgress:r,decompress:r,maxContentLength:r,maxBodyLength:r,beforeRedirect:r,transport:r,httpAgent:r,httpsAgent:r,cancelToken:r,socketPath:r,allowedSocketPaths:r,responseEncoding:r,validateStatus:a,headers:(e,t,i)=>n(ba(e),ba(t),0,!0)};return Lr.forEach(Object.keys({...e,...t}),(function(A){if("__proto__"===A||"constructor"===A||"prototype"===A)return;const s=Lr.hasOwnProp(o,A)?o[A]:n,r=s(Lr.hasOwnProp(e,A)?e[A]:void 0,Lr.hasOwnProp(t,A)?t[A]:void 0,A);Lr.isUndefined(r)&&s!==a||(i[A]=r)})),i}const va=["content-type","content-length"];function ka(e){const t=Ra({},e),i=e=>Lr.hasOwnProp(t,e)?t[e]:void 0,A=i("data");let n=i("withXSRFToken");const s=i("xsrfHeaderName"),r=i("xsrfCookieName");let a=i("headers");const o=i("auth"),c=i("baseURL"),l=i("allowAbsoluteUrls"),h=i("url");var g;if(t.headers=a=zr.from(a),t.url=ra(Da(c,h,l),i("params"),i("paramsSerializer")),o&&a.set("Authorization","Basic "+btoa((o.username||"")+":"+(o.password?(g=o.password,encodeURIComponent(g).replace(/%([0-9A-F]{2})/gi,((e,t)=>String.fromCharCode(parseInt(t,16))))):""))),Lr.isFormData(A)&&(Ia.hasStandardBrowserEnv||Ia.hasStandardBrowserWebWorkerEnv||Lr.isReactNative(A)?a.setContentType(void 0):Lr.isFunction(A.getHeaders)&&function(e,t,i){"content-only"===i?Object.entries(t).forEach((([t,i])=>{va.includes(t.toLowerCase())&&e.set(t,i)})):e.set(t)}(a,A.getHeaders(),i("formDataHeaderPolicy"))),Ia.hasStandardBrowserEnv){Lr.isFunction(n)&&(n=n(t));if(!0===n||null==n&&_a(t.url)){const e=s&&r&&Ta.read(r);e&&a.set(s,e)}}return t}var xa="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,i){const A=ka(e);let n=A.data;const s=zr.from(A.headers).normalize();let r,a,o,c,l,{responseType:h,onUploadProgress:g,onDownloadProgress:d}=A;function u(){c&&c(),l&&l(),A.cancelToken&&A.cancelToken.unsubscribe(r),A.signal&&A.signal.removeEventListener("abort",r)}let I=new XMLHttpRequest;function C(){if(!I)return;const A=zr.from("getAllResponseHeaders"in I&&I.getAllResponseHeaders());ma((function(e){t(e),u()}),(function(e){i(e),u()}),{data:h&&"text"!==h&&"json"!==h?I.response:I.responseText,status:I.status,statusText:I.statusText,headers:A,config:e,request:I}),I=null}I.open(A.method.toUpperCase(),A.url,!0),I.timeout=A.timeout,"onloadend"in I?I.onloadend=C:I.onreadystatechange=function(){I&&4===I.readyState&&(0!==I.status||I.responseURL&&I.responseURL.startsWith("file:"))&&setTimeout(C)},I.onabort=function(){I&&(i(new Vr("Request aborted",Vr.ECONNABORTED,e,I)),u(),I=null)},I.onerror=function(t){const A=t&&t.message?t.message:"Network Error",n=new Vr(A,Vr.ERR_NETWORK,e,I);n.event=t||null,i(n),u(),I=null},I.ontimeout=function(){let t=A.timeout?"timeout of "+A.timeout+"ms exceeded":"timeout exceeded";const n=A.transitional||oa;A.timeoutErrorMessage&&(t=A.timeoutErrorMessage),i(new Vr(t,n.clarifyTimeoutError?Vr.ETIMEDOUT:Vr.ECONNABORTED,e,I)),u(),I=null},void 0===n&&s.setContentType(null),"setRequestHeader"in I&&Lr.forEach(qr(s),(function(e,t){I.setRequestHeader(t,e)})),Lr.isUndefined(A.withCredentials)||(I.withCredentials=!!A.withCredentials),h&&"json"!==h&&(I.responseType=A.responseType),d&&([o,l]=ya(d,!0),I.addEventListener("progress",o)),g&&I.upload&&([a,c]=ya(g),I.upload.addEventListener("progress",a),I.upload.addEventListener("loadend",c)),(A.cancelToken||A.signal)&&(r=t=>{I&&(i(!t||t.type?new Qa(null,e,I):t),I.abort(),u(),I=null)},A.cancelToken&&A.cancelToken.subscribe(r),A.signal&&(A.signal.aborted?r():A.signal.addEventListener("abort",r)));const f=function(e){const t=/^([-+\w]{1,25}):(?:\/\/)?/.exec(e);return t&&t[1]||""}(A.url);!f||Ia.protocols.includes(f)?I.send(n||null):i(new Vr("Unsupported protocol "+f+":",Vr.ERR_BAD_REQUEST,e))}))};const Pa=(e,t)=>{if(e=e?e.filter(Boolean):[],!t&&!e.length)return;const i=new AbortController;let A=!1;const n=function(e){if(!A){A=!0,r();const t=e instanceof Error?e:this.reason;i.abort(t instanceof Vr?t:new Qa(t instanceof Error?t.message:t))}};let s=t&&setTimeout((()=>{s=null,n(new Vr(`timeout of ${t}ms exceeded`,Vr.ETIMEDOUT))}),t);const r=()=>{e&&(s&&clearTimeout(s),s=null,e.forEach((e=>{e.unsubscribe?e.unsubscribe(n):e.removeEventListener("abort",n)})),e=null)};e.forEach((e=>e.addEventListener("abort",n)));const{signal:a}=i;return a.unsubscribe=()=>Lr.asap(r),a},Fa=function*(e,t){let i=e.byteLength;if(i<t)return void(yield e);let A,n=0;for(;n<i;)A=n+t,yield e.slice(n,A),n=A},Ma=async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:i}=await t.read();if(e)break;yield i}}finally{await t.cancel()}},Na=(e,t,i,A)=>{const n=async function*(e,t){for await(const i of Ma(e))yield*Fa(i,t)}(e,t);let s,r=0,a=e=>{s||(s=!0,A&&A(e))};return new ReadableStream({async pull(e){try{const{done:t,value:A}=await n.next();if(t)return a(),void e.close();let s=A.byteLength;if(i){let e=r+=s;i(e)}e.enqueue(new Uint8Array(A))}catch(e){throw a(e),e}},cancel:e=>(a(e),n.return())},{highWaterMark:2})};const La="1.17.0",{isFunction:Ua}=Lr,Ga=e=>{if(!Lr.isString(e))return e;try{return decodeURIComponent(e)}catch(t){return e}},Oa=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},Ja=e=>{const t=void 0!==Lr.global&&null!==Lr.global?Lr.global:globalThis,{ReadableStream:i,TextEncoder:A}=t;e=Lr.merge.call({skipUndefined:!0},{Request:t.Request,Response:t.Response},e);const{fetch:n,Request:s,Response:r}=e,a=n?Ua(n):"function"==typeof fetch,o=Ua(s),c=Ua(r);if(!a)return!1;const l=a&&Ua(i),h=a&&("function"==typeof A?(g=new A,e=>g.encode(e)):async e=>new Uint8Array(await new s(e).arrayBuffer()));var g;const d=o&&l&&Oa((()=>{let e=!1;const t=new s(Ia.origin,{body:new i,method:"POST",get duplex(){return e=!0,"half"}}),A=t.headers.has("Content-Type");return null!=t.body&&t.body.cancel(),e&&!A})),u=c&&l&&Oa((()=>Lr.isReadableStream(new r("").body))),I={stream:u&&(e=>e.body)};a&&["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!I[e]&&(I[e]=(t,i)=>{let A=t&&t[e];if(A)return A.call(t);throw new Vr(`Response type '${e}' is not supported`,Vr.ERR_NOT_SUPPORT,i)})}));const C=async(e,t)=>{const i=Lr.toFiniteNumber(e.getContentLength());return null==i?(async e=>{if(null==e)return 0;if(Lr.isBlob(e))return e.size;if(Lr.isSpecCompliantForm(e)){const t=new s(Ia.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return Lr.isArrayBufferView(e)||Lr.isArrayBuffer(e)?e.byteLength:(Lr.isURLSearchParams(e)&&(e+=""),Lr.isString(e)?(await h(e)).byteLength:void 0)})(t):i};return async e=>{let{url:t,method:i,data:a,signal:c,cancelToken:l,timeout:h,onDownloadProgress:g,onUploadProgress:f,responseType:E,headers:p,withCredentials:B="same-origin",fetchOptions:Q,maxContentLength:m,maxBodyLength:y}=ka(e);const w=Lr.isNumber(m)&&m>-1,S=Lr.isNumber(y)&&y>-1;let _=n||fetch;E=E?(E+"").toLowerCase():"text";let T=Pa([c,l&&l.toAbortSignal()],h),D=null;const b=T&&T.unsubscribe&&(()=>{T.unsubscribe()});let R;try{let n;const c=(k="auth",Lr.hasOwnProp(e,k)?e[k]:void 0);if(c){const e=c.username||"";n={username:e,password:c.password||""}}if((e=>{const t=e.indexOf("://");let i=e;return-1!==t&&(i=i.slice(t+3)),i.includes("@")||i.includes(":")})(t)){const e=new URL(t,Ia.origin);if(!n&&(e.username||e.password)){const t=Ga(e.username);n={username:t,password:Ga(e.password)}}(e.username||e.password)&&(e.username="",e.password="",t=e.href)}if(n&&(p.delete("authorization"),p.set("Authorization","Basic "+btoa((v=(n.username||"")+":"+(n.password||""),encodeURIComponent(v).replace(/%([0-9A-F]{2})/gi,((e,t)=>String.fromCharCode(parseInt(t,16)))))))),w&&"string"==typeof t&&t.startsWith("data:")){const i=function(e){if(!e||"string"!=typeof e)return 0;if(!e.startsWith("data:"))return 0;const t=e.indexOf(",");if(t<0)return 0;const i=e.slice(5,t),A=e.slice(t+1);if(/;base64/i.test(i)){let e=A.length;const t=A.length;for(let i=0;i<t;i++)if(37===A.charCodeAt(i)&&i+2<t){const t=A.charCodeAt(i+1),n=A.charCodeAt(i+2);(t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102)&&(n>=48&&n<=57||n>=65&&n<=70||n>=97&&n<=102)&&(e-=2,i+=2)}let i=0,n=t-1;const s=e=>e>=2&&37===A.charCodeAt(e-2)&&51===A.charCodeAt(e-1)&&(68===A.charCodeAt(e)||100===A.charCodeAt(e));n>=0&&(61===A.charCodeAt(n)?(i++,n--):s(n)&&(i++,n-=3)),1===i&&n>=0&&(61===A.charCodeAt(n)||s(n))&&i++;const r=3*Math.floor(e/4)-(i||0);return r>0?r:0}if(void 0!==_n&&"function"==typeof _n.byteLength)return _n.byteLength(A,"utf8");let n=0;for(let e=0,t=A.length;e<t;e++){const i=A.charCodeAt(e);if(i<128)n+=1;else if(i<2048)n+=2;else if(i>=55296&&i<=56319&&e+1<t){const t=A.charCodeAt(e+1);t>=56320&&t<=57343?(n+=4,e++):n+=3}else n+=3}return n}(t);if(i>m)throw new Vr("maxContentLength size of "+m+" exceeded",Vr.ERR_BAD_RESPONSE,e,D)}if(S&&"get"!==i&&"head"!==i){const t=await C(p,a);if("number"==typeof t&&isFinite(t)&&t>y)throw new Vr("Request body larger than maxBodyLength limit",Vr.ERR_BAD_REQUEST,e,D)}if(f&&d&&"get"!==i&&"head"!==i&&0!==(R=await C(p,a))){let e,i=new s(t,{method:"POST",body:a,duplex:"half"});if(Lr.isFormData(a)&&(e=i.headers.get("content-type"))&&p.setContentType(e),i.body){const[e,t]=wa(R,ya(Sa(f)));a=Na(i.body,65536,e,t)}}Lr.isString(B)||(B=B?"include":"omit");const l=o&&"credentials"in s.prototype;if(Lr.isFormData(a)){const e=p.getContentType();e&&/^multipart\/form-data/i.test(e)&&!/boundary=/i.test(e)&&p.delete("content-type")}p.set("User-Agent","axios/"+La,!1);const h={...Q,signal:T,method:i.toUpperCase(),headers:qr(p.normalize()),body:a,duplex:"half",credentials:l?B:void 0};D=o&&new s(t,h);let x=await(o?_(D,Q):_(t,h));if(w){const t=Lr.toFiniteNumber(x.headers.get("content-length"));if(null!=t&&t>m)throw new Vr("maxContentLength size of "+m+" exceeded",Vr.ERR_BAD_RESPONSE,e,D)}const P=u&&("stream"===E||"response"===E);if(u&&x.body&&(g||w||P&&b)){const t={};["status","statusText","headers"].forEach((e=>{t[e]=x[e]}));const i=Lr.toFiniteNumber(x.headers.get("content-length")),[A,n]=g&&wa(i,ya(Sa(g),!0))||[];let s=0;const a=t=>{if(w&&(s=t,s>m))throw new Vr("maxContentLength size of "+m+" exceeded",Vr.ERR_BAD_RESPONSE,e,D);A&&A(t)};x=new r(Na(x.body,65536,a,(()=>{n&&n(),b&&b()})),t)}E=E||"text";let F=await I[Lr.findKey(I,E)||"text"](x,e);if(w&&!u&&!P){let t;if(null!=F&&("number"==typeof F.byteLength?t=F.byteLength:"number"==typeof F.size?t=F.size:"string"==typeof F&&(t="function"==typeof A?(new A).encode(F).byteLength:F.length)),"number"==typeof t&&t>m)throw new Vr("maxContentLength size of "+m+" exceeded",Vr.ERR_BAD_RESPONSE,e,D)}return!P&&b&&b(),await new Promise(((t,i)=>{ma(t,i,{data:F,headers:zr.from(x.headers),status:x.status,statusText:x.statusText,config:e,request:D})}))}catch(t){if(b&&b(),T&&T.aborted&&T.reason instanceof Vr){const i=T.reason;throw i.config=e,D&&(i.request=D),t!==i&&(i.cause=t),i}if(t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new Vr("Network Error",Vr.ERR_NETWORK,e,D,t&&t.response),{cause:t.cause||t});throw Vr.from(t,t&&t.code,e,D,t&&t.response)}var v,k}},qa=new Map,Ka=e=>{let t=e&&e.env||{};const{fetch:i,Request:A,Response:n}=t,s=[A,n,i];let r,a,o=s.length,c=qa;for(;o--;)r=s[o],a=c.get(r),void 0===a&&c.set(r,a=o?new Map:Ja(t)),c=a;return a};Ka();const Ha={http:null,xhr:xa,fetch:{get:Ka}};Lr.forEach(Ha,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{__proto__:null,value:t})}catch(e){}Object.defineProperty(e,"adapterName",{__proto__:null,value:t})}}));const Wa=e=>`- ${e}`,Ya=e=>Lr.isFunction(e)||null===e||!1===e;var za={getAdapter:function(e,t){e=Lr.isArray(e)?e:[e];const{length:i}=e;let A,n;const s={};for(let r=0;r<i;r++){let i;if(A=e[r],n=A,!Ya(A)&&(n=Ha[(i=String(A)).toLowerCase()],void 0===n))throw new Vr(`Unknown adapter '${i}'`);if(n&&(Lr.isFunction(n)||(n=n.get(t))))break;s[i||"#"+r]=n}if(!n){const e=Object.entries(s).map((([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));let t=i?e.length>1?"since :\n"+e.map(Wa).join("\n"):" "+Wa(e[0]):"as no adapter specified";throw new Vr("There is no suitable adapter to dispatch the request "+t,"ERR_NOT_SUPPORT")}return n},adapters:Ha};function ja(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Qa(null,e)}function Va(e){ja(e),e.headers=zr.from(e.headers),e.data=pa.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return za.getAdapter(e.adapter||Ea.adapter,e)(e).then((function(t){ja(e),e.response=t;try{t.data=pa.call(e,e.transformResponse,t)}finally{delete e.response}return t.headers=zr.from(t.headers),t}),(function(t){if(!Ba(t)&&(ja(e),t&&t.response)){e.response=t.response;try{t.response.data=pa.call(e,e.transformResponse,t.response)}finally{delete e.response}t.response.headers=zr.from(t.response.headers)}return Promise.reject(t)}))}const Za={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Za[e]=function(i){return typeof i===e||"a"+(t<1?"n ":" ")+e}}));const Xa={};Za.transitional=function(e,t,i){function A(e,t){return"[Axios v"+La+"] Transitional option '"+e+"'"+t+(i?". "+i:"")}return(i,n,s)=>{if(!1===e)throw new Vr(A(n," has been removed"+(t?" in "+t:"")),Vr.ERR_DEPRECATED);return t&&!Xa[n]&&(Xa[n]=!0,console.warn(A(n," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(i,n,s)}},Za.spelling=function(e){return(t,i)=>(console.warn(`${i} is likely a misspelling of ${e}`),!0)};var $a={assertOptions:function(e,t,i){if("object"!=typeof e)throw new Vr("options must be an object",Vr.ERR_BAD_OPTION_VALUE);const A=Object.keys(e);let n=A.length;for(;n-- >0;){const s=A[n],r=Object.prototype.hasOwnProperty.call(t,s)?t[s]:void 0;if(r){const t=e[s],i=void 0===t||r(t,s,e);if(!0!==i)throw new Vr("option "+s+" must be "+i,Vr.ERR_BAD_OPTION_VALUE)}else if(!0!==i)throw new Vr("Unknown option "+s,Vr.ERR_BAD_OPTION)}},validators:Za};const eo=$a.validators;class to{constructor(e){this.defaults=e||{},this.interceptors={request:new aa,response:new aa}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const i=(()=>{if(!t.stack)return"";const e=t.stack.indexOf("\n");return-1===e?"":t.stack.slice(e+1)})();try{if(e.stack){if(i){const t=i.indexOf("\n"),A=-1===t?-1:i.indexOf("\n",t+1),n=-1===A?"":i.slice(A+1);String(e.stack).endsWith(n)||(e.stack+="\n"+i)}}else e.stack=i}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Ra(this.defaults,t);const{transitional:i,paramsSerializer:A,headers:n}=t;void 0!==i&&$a.assertOptions(i,{silentJSONParsing:eo.transitional(eo.boolean),forcedJSONParsing:eo.transitional(eo.boolean),clarifyTimeoutError:eo.transitional(eo.boolean),legacyInterceptorReqResOrdering:eo.transitional(eo.boolean),advertiseZstdAcceptEncoding:eo.transitional(eo.boolean)},!1),null!=A&&(Lr.isFunction(A)?t.paramsSerializer={serialize:A}:$a.assertOptions(A,{encode:eo.function,serialize:eo.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),$a.assertOptions(t,{baseUrl:eo.spelling("baseURL"),withXsrfToken:eo.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=n&&Lr.merge(n.common,n[t.method]);n&&Lr.forEach(["delete","get","head","post","put","patch","query","common"],(e=>{delete n[e]})),t.headers=zr.concat(s,n);const r=[];let a=!0;this.interceptors.request.forEach((function(e){if("function"==typeof e.runWhen&&!1===e.runWhen(t))return;a=a&&e.synchronous;const i=t.transitional||oa;i&&i.legacyInterceptorReqResOrdering?r.unshift(e.fulfilled,e.rejected):r.push(e.fulfilled,e.rejected)}));const o=[];let c;this.interceptors.response.forEach((function(e){o.push(e.fulfilled,e.rejected)}));let l,h=0;if(!a){const e=[Va.bind(this),void 0];for(e.unshift(...r),e.push(...o),l=e.length,c=Promise.resolve(t);h<l;)c=c.then(e[h++],e[h++]);return c}l=r.length;let g=t;for(;h<l;){const e=r[h++],t=r[h++];try{g=e(g)}catch(e){t.call(this,e);break}}try{c=Va.call(this,g)}catch(e){return Promise.reject(e)}for(h=0,l=o.length;h<l;)c=c.then(o[h++],o[h++]);return c}getUri(e){return ra(Da((e=Ra(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}}Lr.forEach(["delete","get","head","options"],(function(e){to.prototype[e]=function(t,i){return this.request(Ra(i||{},{method:e,url:t,data:(i||{}).data}))}})),Lr.forEach(["post","put","patch","query"],(function(e){function t(t){return function(i,A,n){return this.request(Ra(n||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:i,data:A}))}}to.prototype[e]=t(),"query"!==e&&(to.prototype[e+"Form"]=t(!0))}));class io{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const i=this;this.promise.then((e=>{if(!i._listeners)return;let t=i._listeners.length;for(;t-- >0;)i._listeners[t](e);i._listeners=null})),this.promise.then=e=>{let t;const A=new Promise((e=>{i.subscribe(e),t=e})).then(e);return A.cancel=function(){i.unsubscribe(t)},A},e((function(e,A,n){i.reason||(i.reason=new Qa(e,A,n),t(i.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new io((function(t){e=t})),cancel:e}}}const Ao={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Ao).forEach((([e,t])=>{Ao[t]=e}));const no=function e(t){const i=new to(t),A=Hs(to.prototype.request,i);return Lr.extend(A,to.prototype,i,{allOwnKeys:!0}),Lr.extend(A,i,null,{allOwnKeys:!0}),A.create=function(i){return e(Ra(t,i))},A}(Ea);no.Axios=to,no.CanceledError=Qa,no.CancelToken=io,no.isCancel=Ba,no.VERSION=La,no.toFormData=ta,no.AxiosError=Vr,no.Cancel=no.CanceledError,no.all=function(e){return Promise.all(e)},no.spread=function(e){return function(t){return e.apply(null,t)}},no.isAxiosError=function(e){return Lr.isObject(e)&&!0===e.isAxiosError},no.mergeConfig=Ra,no.AxiosHeaders=zr,no.formToJSON=e=>Ca(Lr.isHTMLForm(e)?new FormData(e):e),no.getAdapter=za.getAdapter,no.HttpStatusCode=Ao,no.default=no;const so={baseURL:"",timeout:3e4,withCredentials:!0};var ro=new class{service;constructor(e){this.service=this.setConfig(e)}setConfig(t){const i=no.create(e(so,t));return i.interceptors.request.use((e=>{const t=Es.getItem(ps);return t&&e.headers&&"function"==typeof e.headers.set&&e.headers.set("Authorization","Bearer "+t),e}),(e=>Promise.reject(e))),i.interceptors.response.use((e=>{const{data:t,status:i}=e;return 401===i||t.code&&0!==t.code?Promise.reject(t):t}),(async e=>(-1!==e.message.indexOf("timeout")&&console.error("请求超时!请您稍后重试"),-1!==e.message.indexOf("Network Error")&&console.error("网络错误!请您稍后重试"),Promise.reject(e)))),this.service=i,i}get(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.service.get(e,{params:t,...i})}post(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.service.post(e,t,i)}download(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.service.post(e,t,{...i,responseType:"blob"})}template(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.service.get(e,{params:t,...i,responseType:"blob"})}upload(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.service.post(e,t,{...i,headers:{"Content-Type":"multipart/form-data"}})}}(so);no.CancelToken;let ao=null;const oo={fetchFloat32Array:[],apiText2Speech:[],apiAsk:[]},co=async(t,i,A)=>{const n=Es.getItem(Bs),s=Es.getItem(ps),r=await(async()=>(ao||(ao=import("./streaming-C91bzAdu.js").then((e=>{const t=e.SSE??e.default??e;if("function"!=typeof t)throw new Error("SSE constructor is unavailable");return t}))),ao))(),a=i.message[i.message.length-1].content;Reflect.deleteProperty(i,"message");const o=e({query:"",language:"",conversation_id:"",response_mode:"streaming",files:[],inputs:{}},{...i,query:a});try{oo.apiAsk.length>0&&oo.apiAsk.forEach((e=>{e.close()}));const e=`${n}/human-auth/characters/${t}/chat-messages`,i=new r(`${e}`,{method:"POST",headers:{responseType:"streaming"===o.response_mode?"stream":"json","Content-Type":"application/json",Authorization:`Bearer ${s}`},payload:JSON.stringify(o)});oo.apiAsk=[i],i.addEventListener("message",(e=>{const t={code:0,msg:"success",data:null};if("streaming"===o.response_mode)if(e.data)t.data=JSON.parse(e.data);else{const i=JSON.parse(e.source.xhr.responseText);t.code=i.code,t.data=i.data,t.msg=i.msg}else t.code=e.code,t.data=e.data,t.msg=e.msg;"message"!==t.data.event&&"message_end"!==t.data.event&&"error"!==t.data.event||A&&A(t)})),i.onerror=e=>{throw console.error("sse...onerror=",e),new Error(e)},i.onabort=e=>{},i.onreadystatechange=e=>{2===e.readyState&&(oo.apiAsk=[])}}catch(e){throw console.error("Fetch error:",e),new Error(e)}};function lo(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var ho;!function(e){e[e.DEBUG=0]="DEBUG",e[e.INFO=1]="INFO",e[e.WARN=2]="WARN",e[e.ERROR=3]="ERROR",e[e.NONE=4]="NONE"}(ho||(ho={}));class go{level=ho.WARN;prefix="[JSSDK]";enabled=!0;constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.level=e.level??ho.WARN,this.prefix=e.prefix??"[JSSDK]",this.enabled=e.enabled??!0}configure(e){void 0!==e.level&&(this.level=e.level),void 0!==e.prefix&&(this.prefix=e.prefix),void 0!==e.enabled&&(this.enabled=e.enabled)}setLevel(e){this.level=e}setEnabled(e){this.enabled=e}debug(e){if(this.enabled&&this.level<=ho.DEBUG){for(var t=arguments.length,i=new Array(t>1?t-1:0),A=1;A<t;A++)i[A-1]=arguments[A];this.prefix}}info(e){if(this.enabled&&this.level<=ho.INFO){for(var t=arguments.length,i=new Array(t>1?t-1:0),A=1;A<t;A++)i[A-1]=arguments[A];this.prefix}}warn(e){if(this.enabled&&this.level<=ho.WARN){for(var t=arguments.length,i=new Array(t>1?t-1:0),A=1;A<t;A++)i[A-1]=arguments[A];console.warn(`${this.prefix} [WARN]`,e,...i)}}error(e){if(this.enabled&&this.level<=ho.ERROR){for(var t=arguments.length,i=new Array(t>1?t-1:0),A=1;A<t;A++)i[A-1]=arguments[A];console.error(`${this.prefix} [ERROR]`,e,...i)}}child(e){return new go({level:this.level,prefix:`${this.prefix}:${e}`,enabled:this.enabled})}}function uo(e){if(e instanceof Error)return{name:e.name,message:e.message,stack:e.stack?.split("\n").slice(0,5).join("\n")};if("object"==typeof e&&null!==e)try{return JSON.stringify(e),e}catch{}return{name:"UnknownError",message:String(e)}}new go;var Io,Co={};Io=Co,function(){var e=function(){this.init()};e.prototype={init:function(){var e=this||t;return e._counter=1e3,e._html5AudioPool=[],e.html5PoolSize=10,e._codecs={},e._howls=[],e._muted=!1,e._volume=1,e._canPlayEvent="canplaythrough",e._navigator="undefined"!=typeof window&&window.navigator?window.navigator:null,e.masterGain=null,e.noAudio=!1,e.usingWebAudio=!0,e.autoSuspend=!0,e.ctx=null,e.autoUnlock=!0,e._setup(),e},volume:function(e){var i=this||t;if(e=parseFloat(e),i.ctx||l(),void 0!==e&&e>=0&&e<=1){if(i._volume=e,i._muted)return i;i.usingWebAudio&&i.masterGain.gain.setValueAtTime(e,t.ctx.currentTime);for(var A=0;A<i._howls.length;A++)if(!i._howls[A]._webAudio)for(var n=i._howls[A]._getSoundIds(),s=0;s<n.length;s++){var r=i._howls[A]._soundById(n[s]);r&&r._node&&(r._node.volume=r._volume*e)}return i}return i._volume},mute:function(e){var i=this||t;i.ctx||l(),i._muted=e,i.usingWebAudio&&i.masterGain.gain.setValueAtTime(e?0:i._volume,t.ctx.currentTime);for(var A=0;A<i._howls.length;A++)if(!i._howls[A]._webAudio)for(var n=i._howls[A]._getSoundIds(),s=0;s<n.length;s++){var r=i._howls[A]._soundById(n[s]);r&&r._node&&(r._node.muted=!!e||r._muted)}return i},stop:function(){for(var e=this||t,i=0;i<e._howls.length;i++)e._howls[i].stop();return e},unload:function(){for(var e=this||t,i=e._howls.length-1;i>=0;i--)e._howls[i].unload();return e.usingWebAudio&&e.ctx&&void 0!==e.ctx.close&&(e.ctx.close(),e.ctx=null,l()),e},codecs:function(e){return(this||t)._codecs[e.replace(/^x-/,"")]},_setup:function(){var e=this||t;if(e.state=e.ctx&&e.ctx.state||"suspended",e._autoSuspend(),!e.usingWebAudio)if("undefined"!=typeof Audio)try{void 0===(new Audio).oncanplaythrough&&(e._canPlayEvent="canplay")}catch(t){e.noAudio=!0}else e.noAudio=!0;try{(new Audio).muted&&(e.noAudio=!0)}catch(e){}return e.noAudio||e._setupCodecs(),e},_setupCodecs:function(){var e=this||t,i=null;try{i="undefined"!=typeof Audio?new Audio:null}catch(t){return e}if(!i||"function"!=typeof i.canPlayType)return e;var A=i.canPlayType("audio/mpeg;").replace(/^no$/,""),n=e._navigator?e._navigator.userAgent:"",s=n.match(/OPR\/(\d+)/g),r=s&&parseInt(s[0].split("/")[1],10)<33,a=-1!==n.indexOf("Safari")&&-1===n.indexOf("Chrome"),o=n.match(/Version\/(.*?) /),c=a&&o&&parseInt(o[1],10)<15;return e._codecs={mp3:!(r||!A&&!i.canPlayType("audio/mp3;").replace(/^no$/,"")),mpeg:!!A,opus:!!i.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!i.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!i.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!(i.canPlayType('audio/wav; codecs="1"')||i.canPlayType("audio/wav")).replace(/^no$/,""),aac:!!i.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!i.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(i.canPlayType("audio/x-m4a;")||i.canPlayType("audio/m4a;")||i.canPlayType("audio/aac;")).replace(/^no$/,""),m4b:!!(i.canPlayType("audio/x-m4b;")||i.canPlayType("audio/m4b;")||i.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(i.canPlayType("audio/x-mp4;")||i.canPlayType("audio/mp4;")||i.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!(c||!i.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),webm:!(c||!i.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),dolby:!!i.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(i.canPlayType("audio/x-flac;")||i.canPlayType("audio/flac;")).replace(/^no$/,"")},e},_unlockAudio:function(){var e=this||t;if(!e._audioUnlocked&&e.ctx){e._audioUnlocked=!1,e.autoUnlock=!1,e._mobileUnloaded||44100===e.ctx.sampleRate||(e._mobileUnloaded=!0,e.unload()),e._scratchBuffer=e.ctx.createBuffer(1,1,22050);var i=function(t){for(;e._html5AudioPool.length<e.html5PoolSize;)try{var A=new Audio;A._unlocked=!0,e._releaseHtml5Audio(A)}catch(t){e.noAudio=!0;break}for(var n=0;n<e._howls.length;n++)if(!e._howls[n]._webAudio)for(var s=e._howls[n]._getSoundIds(),r=0;r<s.length;r++){var a=e._howls[n]._soundById(s[r]);a&&a._node&&!a._node._unlocked&&(a._node._unlocked=!0,a._node.load())}e._autoResume();var o=e.ctx.createBufferSource();o.buffer=e._scratchBuffer,o.connect(e.ctx.destination),void 0===o.start?o.noteOn(0):o.start(0),"function"==typeof e.ctx.resume&&e.ctx.resume(),o.onended=function(){o.disconnect(0),e._audioUnlocked=!0,document.removeEventListener("touchstart",i,!0),document.removeEventListener("touchend",i,!0),document.removeEventListener("click",i,!0),document.removeEventListener("keydown",i,!0);for(var t=0;t<e._howls.length;t++)e._howls[t]._emit("unlock")}};return document.addEventListener("touchstart",i,!0),document.addEventListener("touchend",i,!0),document.addEventListener("click",i,!0),document.addEventListener("keydown",i,!0),e}},_obtainHtml5Audio:function(){var e=this||t;if(e._html5AudioPool.length)return e._html5AudioPool.pop();var i=(new Audio).play();return i&&"undefined"!=typeof Promise&&(i instanceof Promise||"function"==typeof i.then)&&i.catch((function(){console.warn("HTML5 Audio pool exhausted, returning potentially locked audio object.")})),new Audio},_releaseHtml5Audio:function(e){var i=this||t;return e._unlocked&&i._html5AudioPool.push(e),i},_autoSuspend:function(){var e=this;if(e.autoSuspend&&e.ctx&&void 0!==e.ctx.suspend&&t.usingWebAudio){for(var i=0;i<e._howls.length;i++)if(e._howls[i]._webAudio)for(var A=0;A<e._howls[i]._sounds.length;A++)if(!e._howls[i]._sounds[A]._paused)return e;return e._suspendTimer&&clearTimeout(e._suspendTimer),e._suspendTimer=setTimeout((function(){if(e.autoSuspend){e._suspendTimer=null,e.state="suspending";var t=function(){e.state="suspended",e._resumeAfterSuspend&&(delete e._resumeAfterSuspend,e._autoResume())};e.ctx.suspend().then(t,t)}}),3e4),e}},_autoResume:function(){var e=this;if(e.ctx&&void 0!==e.ctx.resume&&t.usingWebAudio)return"running"===e.state&&"interrupted"!==e.ctx.state&&e._suspendTimer?(clearTimeout(e._suspendTimer),e._suspendTimer=null):"suspended"===e.state||"running"===e.state&&"interrupted"===e.ctx.state?(e.ctx.resume().then((function(){e.state="running";for(var t=0;t<e._howls.length;t++)e._howls[t]._emit("resume")})),e._suspendTimer&&(clearTimeout(e._suspendTimer),e._suspendTimer=null)):"suspending"===e.state&&(e._resumeAfterSuspend=!0),e}};var t=new e,i=function(e){e.src&&0!==e.src.length?this.init(e):console.error("An array of source files must be passed with any new Howl.")};i.prototype={init:function(e){var i=this;return t.ctx||l(),i._autoplay=e.autoplay||!1,i._format="string"!=typeof e.format?e.format:[e.format],i._html5=e.html5||!1,i._muted=e.mute||!1,i._loop=e.loop||!1,i._pool=e.pool||5,i._preload="boolean"!=typeof e.preload&&"metadata"!==e.preload||e.preload,i._rate=e.rate||1,i._sprite=e.sprite||{},i._src="string"!=typeof e.src?e.src:[e.src],i._volume=void 0!==e.volume?e.volume:1,i._xhr={method:e.xhr&&e.xhr.method?e.xhr.method:"GET",headers:e.xhr&&e.xhr.headers?e.xhr.headers:null,withCredentials:!(!e.xhr||!e.xhr.withCredentials)&&e.xhr.withCredentials},i._duration=0,i._state="unloaded",i._sounds=[],i._endTimers={},i._queue=[],i._playLock=!1,i._onend=e.onend?[{fn:e.onend}]:[],i._onfade=e.onfade?[{fn:e.onfade}]:[],i._onload=e.onload?[{fn:e.onload}]:[],i._onloaderror=e.onloaderror?[{fn:e.onloaderror}]:[],i._onplayerror=e.onplayerror?[{fn:e.onplayerror}]:[],i._onpause=e.onpause?[{fn:e.onpause}]:[],i._onplay=e.onplay?[{fn:e.onplay}]:[],i._onstop=e.onstop?[{fn:e.onstop}]:[],i._onmute=e.onmute?[{fn:e.onmute}]:[],i._onvolume=e.onvolume?[{fn:e.onvolume}]:[],i._onrate=e.onrate?[{fn:e.onrate}]:[],i._onseek=e.onseek?[{fn:e.onseek}]:[],i._onunlock=e.onunlock?[{fn:e.onunlock}]:[],i._onresume=[],i._webAudio=t.usingWebAudio&&!i._html5,void 0!==t.ctx&&t.ctx&&t.autoUnlock&&t._unlockAudio(),t._howls.push(i),i._autoplay&&i._queue.push({event:"play",action:function(){i.play()}}),i._preload&&"none"!==i._preload&&i.load(),i},load:function(){var e=this,i=null;if(t.noAudio)e._emit("loaderror",null,"No audio support.");else{"string"==typeof e._src&&(e._src=[e._src]);for(var n=0;n<e._src.length;n++){var r,a;if(e._format&&e._format[n])r=e._format[n];else{if("string"!=typeof(a=e._src[n])){e._emit("loaderror",null,"Non-string found in selected audio sources - ignoring.");continue}(r=/^data:audio\/([^;,]+);/i.exec(a))||(r=/\.([^.]+)$/.exec(a.split("?",1)[0])),r&&(r=r[1].toLowerCase())}if(r||console.warn('No file extension was found. Consider using the "format" property or specify an extension.'),r&&t.codecs(r)){i=e._src[n];break}}if(i)return e._src=i,e._state="loading","https:"===window.location.protocol&&"http:"===i.slice(0,5)&&(e._html5=!0,e._webAudio=!1),new A(e),e._webAudio&&s(e),e;e._emit("loaderror",null,"No codec support for selected audio sources.")}},play:function(e,i){var A=this,n=null;if("number"==typeof e)n=e,e=null;else{if("string"==typeof e&&"loaded"===A._state&&!A._sprite[e])return null;if(void 0===e&&(e="__default",!A._playLock)){for(var s=0,r=0;r<A._sounds.length;r++)A._sounds[r]._paused&&!A._sounds[r]._ended&&(s++,n=A._sounds[r]._id);1===s?e=null:n=null}}var a=n?A._soundById(n):A._inactiveSound();if(!a)return null;if(n&&!e&&(e=a._sprite||"__default"),"loaded"!==A._state){a._sprite=e,a._ended=!1;var o=a._id;return A._queue.push({event:"play",action:function(){A.play(o)}}),o}if(n&&!a._paused)return i||A._loadQueue("play"),a._id;A._webAudio&&t._autoResume();var c=Math.max(0,a._seek>0?a._seek:A._sprite[e][0]/1e3),l=Math.max(0,(A._sprite[e][0]+A._sprite[e][1])/1e3-c),h=1e3*l/Math.abs(a._rate),g=A._sprite[e][0]/1e3,d=(A._sprite[e][0]+A._sprite[e][1])/1e3;a._sprite=e,a._ended=!1;var u=function(){a._paused=!1,a._seek=c,a._start=g,a._stop=d,a._loop=!(!a._loop&&!A._sprite[e][2])};if(!(c>=d)){var I=a._node;if(A._webAudio){var C=function(){A._playLock=!1,u(),A._refreshBuffer(a);var e=a._muted||A._muted?0:a._volume;I.gain.setValueAtTime(e,t.ctx.currentTime),a._playStart=t.ctx.currentTime,void 0===I.bufferSource.start?a._loop?I.bufferSource.noteGrainOn(0,c,86400):I.bufferSource.noteGrainOn(0,c,l):a._loop?I.bufferSource.start(0,c,86400):I.bufferSource.start(0,c,l),h!==1/0&&(A._endTimers[a._id]=setTimeout(A._ended.bind(A,a),h)),i||setTimeout((function(){A._emit("play",a._id),A._loadQueue()}),0)};"running"===t.state&&"interrupted"!==t.ctx.state?C():(A._playLock=!0,A.once("resume",C),A._clearTimer(a._id))}else{var f=function(){I.currentTime=c,I.muted=a._muted||A._muted||t._muted||I.muted,I.volume=a._volume*t.volume(),I.playbackRate=a._rate;try{var n=I.play();if(n&&"undefined"!=typeof Promise&&(n instanceof Promise||"function"==typeof n.then)?(A._playLock=!0,u(),n.then((function(){A._playLock=!1,I._unlocked=!0,i?A._loadQueue():A._emit("play",a._id)})).catch((function(){A._playLock=!1,A._emit("playerror",a._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction."),a._ended=!0,a._paused=!0}))):i||(A._playLock=!1,u(),A._emit("play",a._id)),I.playbackRate=a._rate,I.paused)return void A._emit("playerror",a._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");"__default"!==e||a._loop?A._endTimers[a._id]=setTimeout(A._ended.bind(A,a),h):(A._endTimers[a._id]=function(){A._ended(a),I.removeEventListener("ended",A._endTimers[a._id],!1)},I.addEventListener("ended",A._endTimers[a._id],!1))}catch(e){A._emit("playerror",a._id,e)}};"data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"===I.src&&(I.src=A._src,I.load());var E=window&&window.ejecta||!I.readyState&&t._navigator.isCocoonJS;if(I.readyState>=3||E)f();else{A._playLock=!0,A._state="loading";var p=function(){A._state="loaded",f(),I.removeEventListener(t._canPlayEvent,p,!1)};I.addEventListener(t._canPlayEvent,p,!1),A._clearTimer(a._id)}}return a._id}A._ended(a)},pause:function(e){var t=this;if("loaded"!==t._state||t._playLock)return t._queue.push({event:"pause",action:function(){t.pause(e)}}),t;for(var i=t._getSoundIds(e),A=0;A<i.length;A++){t._clearTimer(i[A]);var n=t._soundById(i[A]);if(n&&!n._paused&&(n._seek=t.seek(i[A]),n._rateSeek=0,n._paused=!0,t._stopFade(i[A]),n._node))if(t._webAudio){if(!n._node.bufferSource)continue;void 0===n._node.bufferSource.stop?n._node.bufferSource.noteOff(0):n._node.bufferSource.stop(0),t._cleanBuffer(n._node)}else isNaN(n._node.duration)&&n._node.duration!==1/0||n._node.pause();arguments[1]||t._emit("pause",n?n._id:null)}return t},stop:function(e,t){var i=this;if("loaded"!==i._state||i._playLock)return i._queue.push({event:"stop",action:function(){i.stop(e)}}),i;for(var A=i._getSoundIds(e),n=0;n<A.length;n++){i._clearTimer(A[n]);var s=i._soundById(A[n]);s&&(s._seek=s._start||0,s._rateSeek=0,s._paused=!0,s._ended=!0,i._stopFade(A[n]),s._node&&(i._webAudio?s._node.bufferSource&&(void 0===s._node.bufferSource.stop?s._node.bufferSource.noteOff(0):s._node.bufferSource.stop(0),i._cleanBuffer(s._node)):isNaN(s._node.duration)&&s._node.duration!==1/0||(s._node.currentTime=s._start||0,s._node.pause(),s._node.duration===1/0&&i._clearSound(s._node))),t||i._emit("stop",s._id))}return i},mute:function(e,i){var A=this;if("loaded"!==A._state||A._playLock)return A._queue.push({event:"mute",action:function(){A.mute(e,i)}}),A;if(void 0===i){if("boolean"!=typeof e)return A._muted;A._muted=e}for(var n=A._getSoundIds(i),s=0;s<n.length;s++){var r=A._soundById(n[s]);r&&(r._muted=e,r._interval&&A._stopFade(r._id),A._webAudio&&r._node?r._node.gain.setValueAtTime(e?0:r._volume,t.ctx.currentTime):r._node&&(r._node.muted=!!t._muted||e),A._emit("mute",r._id))}return A},volume:function(){var e,i,A,n=this,s=arguments;if(0===s.length)return n._volume;if(1===s.length||2===s.length&&void 0===s[1]?n._getSoundIds().indexOf(s[0])>=0?i=parseInt(s[0],10):e=parseFloat(s[0]):s.length>=2&&(e=parseFloat(s[0]),i=parseInt(s[1],10)),!(void 0!==e&&e>=0&&e<=1))return(A=i?n._soundById(i):n._sounds[0])?A._volume:0;if("loaded"!==n._state||n._playLock)return n._queue.push({event:"volume",action:function(){n.volume.apply(n,s)}}),n;void 0===i&&(n._volume=e),i=n._getSoundIds(i);for(var r=0;r<i.length;r++)(A=n._soundById(i[r]))&&(A._volume=e,s[2]||n._stopFade(i[r]),n._webAudio&&A._node&&!A._muted?A._node.gain.setValueAtTime(e,t.ctx.currentTime):A._node&&!A._muted&&(A._node.volume=e*t.volume()),n._emit("volume",A._id));return n},fade:function(e,i,A,n){var s=this;if("loaded"!==s._state||s._playLock)return s._queue.push({event:"fade",action:function(){s.fade(e,i,A,n)}}),s;e=Math.min(Math.max(0,parseFloat(e)),1),i=Math.min(Math.max(0,parseFloat(i)),1),A=parseFloat(A),s.volume(e,n);for(var r=s._getSoundIds(n),a=0;a<r.length;a++){var o=s._soundById(r[a]);if(o){if(n||s._stopFade(r[a]),s._webAudio&&!o._muted){var c=t.ctx.currentTime,l=c+A/1e3;o._volume=e,o._node.gain.setValueAtTime(e,c),o._node.gain.linearRampToValueAtTime(i,l)}s._startFadeInterval(o,e,i,A,r[a],void 0===n)}}return s},_startFadeInterval:function(e,t,i,A,n,s){var r=this,a=t,o=i-t,c=Math.abs(o/.01),l=Math.max(4,c>0?A/c:A),h=Date.now();e._fadeTo=i,e._interval=setInterval((function(){var n=(Date.now()-h)/A;h=Date.now(),a+=o*n,a=Math.round(100*a)/100,a=o<0?Math.max(i,a):Math.min(i,a),r._webAudio?e._volume=a:r.volume(a,e._id,!0),s&&(r._volume=a),(i<t&&a<=i||i>t&&a>=i)&&(clearInterval(e._interval),e._interval=null,e._fadeTo=null,r.volume(i,e._id),r._emit("fade",e._id))}),l)},_stopFade:function(e){var i=this,A=i._soundById(e);return A&&A._interval&&(i._webAudio&&A._node.gain.cancelScheduledValues(t.ctx.currentTime),clearInterval(A._interval),A._interval=null,i.volume(A._fadeTo,e),A._fadeTo=null,i._emit("fade",e)),i},loop:function(){var e,t,i,A=this,n=arguments;if(0===n.length)return A._loop;if(1===n.length){if("boolean"!=typeof n[0])return!!(i=A._soundById(parseInt(n[0],10)))&&i._loop;e=n[0],A._loop=e}else 2===n.length&&(e=n[0],t=parseInt(n[1],10));for(var s=A._getSoundIds(t),r=0;r<s.length;r++)(i=A._soundById(s[r]))&&(i._loop=e,A._webAudio&&i._node&&i._node.bufferSource&&(i._node.bufferSource.loop=e,e&&(i._node.bufferSource.loopStart=i._start||0,i._node.bufferSource.loopEnd=i._stop,A.playing(s[r])&&(A.pause(s[r],!0),A.play(s[r],!0)))));return A},rate:function(){var e,i,A,n=this,s=arguments;if(0===s.length?i=n._sounds[0]._id:1===s.length?n._getSoundIds().indexOf(s[0])>=0?i=parseInt(s[0],10):e=parseFloat(s[0]):2===s.length&&(e=parseFloat(s[0]),i=parseInt(s[1],10)),"number"!=typeof e)return(A=n._soundById(i))?A._rate:n._rate;if("loaded"!==n._state||n._playLock)return n._queue.push({event:"rate",action:function(){n.rate.apply(n,s)}}),n;void 0===i&&(n._rate=e),i=n._getSoundIds(i);for(var r=0;r<i.length;r++)if(A=n._soundById(i[r])){n.playing(i[r])&&(A._rateSeek=n.seek(i[r]),A._playStart=n._webAudio?t.ctx.currentTime:A._playStart),A._rate=e,n._webAudio&&A._node&&A._node.bufferSource?A._node.bufferSource.playbackRate.setValueAtTime(e,t.ctx.currentTime):A._node&&(A._node.playbackRate=e);var a=n.seek(i[r]),o=1e3*((n._sprite[A._sprite][0]+n._sprite[A._sprite][1])/1e3-a)/Math.abs(A._rate);!n._endTimers[i[r]]&&A._paused||(n._clearTimer(i[r]),n._endTimers[i[r]]=setTimeout(n._ended.bind(n,A),o)),n._emit("rate",A._id)}return n},seek:function(){var e,i,A=this,n=arguments;if(0===n.length?A._sounds.length&&(i=A._sounds[0]._id):1===n.length?A._getSoundIds().indexOf(n[0])>=0?i=parseInt(n[0],10):A._sounds.length&&(i=A._sounds[0]._id,e=parseFloat(n[0])):2===n.length&&(e=parseFloat(n[0]),i=parseInt(n[1],10)),void 0===i)return 0;if("number"==typeof e&&("loaded"!==A._state||A._playLock))return A._queue.push({event:"seek",action:function(){A.seek.apply(A,n)}}),A;var s=A._soundById(i);if(s){if(!("number"==typeof e&&e>=0)){if(A._webAudio){var r=A.playing(i)?t.ctx.currentTime-s._playStart:0,a=s._rateSeek?s._rateSeek-s._seek:0;return s._seek+(a+r*Math.abs(s._rate))}return s._node.currentTime}var o=A.playing(i);o&&A.pause(i,!0),s._seek=e,s._ended=!1,A._clearTimer(i),A._webAudio||!s._node||isNaN(s._node.duration)||(s._node.currentTime=e);var c=function(){o&&A.play(i,!0),A._emit("seek",i)};if(o&&!A._webAudio){var l=function(){A._playLock?setTimeout(l,0):c()};setTimeout(l,0)}else c()}return A},playing:function(e){var t=this;if("number"==typeof e){var i=t._soundById(e);return!!i&&!i._paused}for(var A=0;A<t._sounds.length;A++)if(!t._sounds[A]._paused)return!0;return!1},duration:function(e){var t=this,i=t._duration,A=t._soundById(e);return A&&(i=t._sprite[A._sprite][1]/1e3),i},state:function(){return this._state},unload:function(){for(var e=this,i=e._sounds,A=0;A<i.length;A++)i[A]._paused||e.stop(i[A]._id),e._webAudio||(e._clearSound(i[A]._node),i[A]._node.removeEventListener("error",i[A]._errorFn,!1),i[A]._node.removeEventListener(t._canPlayEvent,i[A]._loadFn,!1),i[A]._node.removeEventListener("ended",i[A]._endFn,!1),t._releaseHtml5Audio(i[A]._node)),delete i[A]._node,e._clearTimer(i[A]._id);var s=t._howls.indexOf(e);s>=0&&t._howls.splice(s,1);var r=!0;for(A=0;A<t._howls.length;A++)if(t._howls[A]._src===e._src||e._src.indexOf(t._howls[A]._src)>=0){r=!1;break}return n&&r&&delete n[e._src],t.noAudio=!1,e._state="unloaded",e._sounds=[],e=null,null},on:function(e,t,i,A){var n=this["_on"+e];return"function"==typeof t&&n.push(A?{id:i,fn:t,once:A}:{id:i,fn:t}),this},off:function(e,t,i){var A=this,n=A["_on"+e],s=0;if("number"==typeof t&&(i=t,t=null),t||i)for(s=0;s<n.length;s++){var r=i===n[s].id;if(t===n[s].fn&&r||!t&&r){n.splice(s,1);break}}else if(e)A["_on"+e]=[];else{var a=Object.keys(A);for(s=0;s<a.length;s++)0===a[s].indexOf("_on")&&Array.isArray(A[a[s]])&&(A[a[s]]=[])}return A},once:function(e,t,i){return this.on(e,t,i,1),this},_emit:function(e,t,i){for(var A=this,n=A["_on"+e],s=n.length-1;s>=0;s--)n[s].id&&n[s].id!==t&&"load"!==e||(setTimeout(function(e){e.call(this,t,i)}.bind(A,n[s].fn),0),n[s].once&&A.off(e,n[s].fn,n[s].id));return A._loadQueue(e),A},_loadQueue:function(e){var t=this;if(t._queue.length>0){var i=t._queue[0];i.event===e&&(t._queue.shift(),t._loadQueue()),e||i.action()}return t},_ended:function(e){var i=this,A=e._sprite;if(!i._webAudio&&e._node&&!e._node.paused&&!e._node.ended&&e._node.currentTime<e._stop)return setTimeout(i._ended.bind(i,e),100),i;var n=!(!e._loop&&!i._sprite[A][2]);if(i._emit("end",e._id),!i._webAudio&&n&&i.stop(e._id,!0).play(e._id),i._webAudio&&n){i._emit("play",e._id),e._seek=e._start||0,e._rateSeek=0,e._playStart=t.ctx.currentTime;var s=1e3*(e._stop-e._start)/Math.abs(e._rate);i._endTimers[e._id]=setTimeout(i._ended.bind(i,e),s)}return i._webAudio&&!n&&(e._paused=!0,e._ended=!0,e._seek=e._start||0,e._rateSeek=0,i._clearTimer(e._id),i._cleanBuffer(e._node),t._autoSuspend()),i._webAudio||n||i.stop(e._id,!0),i},_clearTimer:function(e){var t=this;if(t._endTimers[e]){if("function"!=typeof t._endTimers[e])clearTimeout(t._endTimers[e]);else{var i=t._soundById(e);i&&i._node&&i._node.removeEventListener("ended",t._endTimers[e],!1)}delete t._endTimers[e]}return t},_soundById:function(e){for(var t=this,i=0;i<t._sounds.length;i++)if(e===t._sounds[i]._id)return t._sounds[i];return null},_inactiveSound:function(){var e=this;e._drain();for(var t=0;t<e._sounds.length;t++)if(e._sounds[t]._ended)return e._sounds[t].reset();return new A(e)},_drain:function(){var e=this,t=e._pool,i=0,A=0;if(!(e._sounds.length<t)){for(A=0;A<e._sounds.length;A++)e._sounds[A]._ended&&i++;for(A=e._sounds.length-1;A>=0;A--){if(i<=t)return;e._sounds[A]._ended&&(e._webAudio&&e._sounds[A]._node&&e._sounds[A]._node.disconnect(0),e._sounds.splice(A,1),i--)}}},_getSoundIds:function(e){if(void 0===e){for(var t=[],i=0;i<this._sounds.length;i++)t.push(this._sounds[i]._id);return t}return[e]},_refreshBuffer:function(e){return e._node.bufferSource=t.ctx.createBufferSource(),e._node.bufferSource.buffer=n[this._src],e._panner?e._node.bufferSource.connect(e._panner):e._node.bufferSource.connect(e._node),e._node.bufferSource.loop=e._loop,e._loop&&(e._node.bufferSource.loopStart=e._start||0,e._node.bufferSource.loopEnd=e._stop||0),e._node.bufferSource.playbackRate.setValueAtTime(e._rate,t.ctx.currentTime),this},_cleanBuffer:function(e){var i=t._navigator&&t._navigator.vendor.indexOf("Apple")>=0;if(!e.bufferSource)return this;if(t._scratchBuffer&&e.bufferSource&&(e.bufferSource.onended=null,e.bufferSource.disconnect(0),i))try{e.bufferSource.buffer=t._scratchBuffer}catch(e){}return e.bufferSource=null,this},_clearSound:function(e){/MSIE |Trident\//.test(t._navigator&&t._navigator.userAgent)||(e.src="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA")}};var A=function(e){this._parent=e,this.init()};A.prototype={init:function(){var e=this,i=e._parent;return e._muted=i._muted,e._loop=i._loop,e._volume=i._volume,e._rate=i._rate,e._seek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++t._counter,i._sounds.push(e),e.create(),e},create:function(){var e=this,i=e._parent,A=t._muted||e._muted||e._parent._muted?0:e._volume;return i._webAudio?(e._node=void 0===t.ctx.createGain?t.ctx.createGainNode():t.ctx.createGain(),e._node.gain.setValueAtTime(A,t.ctx.currentTime),e._node.paused=!0,e._node.connect(t.masterGain)):t.noAudio||(e._node=t._obtainHtml5Audio(),e._errorFn=e._errorListener.bind(e),e._node.addEventListener("error",e._errorFn,!1),e._loadFn=e._loadListener.bind(e),e._node.addEventListener(t._canPlayEvent,e._loadFn,!1),e._endFn=e._endListener.bind(e),e._node.addEventListener("ended",e._endFn,!1),e._node.src=i._src,e._node.preload=!0===i._preload?"auto":i._preload,e._node.volume=A*t.volume(),e._node.load()),e},reset:function(){var e=this,i=e._parent;return e._muted=i._muted,e._loop=i._loop,e._volume=i._volume,e._rate=i._rate,e._seek=0,e._rateSeek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++t._counter,e},_errorListener:function(){var e=this;e._parent._emit("loaderror",e._id,e._node.error?e._node.error.code:0),e._node.removeEventListener("error",e._errorFn,!1)},_loadListener:function(){var e=this,i=e._parent;i._duration=Math.ceil(10*e._node.duration)/10,0===Object.keys(i._sprite).length&&(i._sprite={__default:[0,1e3*i._duration]}),"loaded"!==i._state&&(i._state="loaded",i._emit("load"),i._loadQueue()),e._node.removeEventListener(t._canPlayEvent,e._loadFn,!1)},_endListener:function(){var e=this,t=e._parent;t._duration===1/0&&(t._duration=Math.ceil(10*e._node.duration)/10,t._sprite.__default[1]===1/0&&(t._sprite.__default[1]=1e3*t._duration),t._ended(e)),e._node.removeEventListener("ended",e._endFn,!1)}};var n={},s=function(e){var t=e._src;if(n[t])return e._duration=n[t].duration,void c(e);if(/^data:[^;]+;base64,/.test(t)){for(var i=atob(t.split(",")[1]),A=new Uint8Array(i.length),s=0;s<i.length;++s)A[s]=i.charCodeAt(s);o(A.buffer,e)}else{var r=new XMLHttpRequest;r.open(e._xhr.method,t,!0),r.withCredentials=e._xhr.withCredentials,r.responseType="arraybuffer",e._xhr.headers&&Object.keys(e._xhr.headers).forEach((function(t){r.setRequestHeader(t,e._xhr.headers[t])})),r.onload=function(){var t=(r.status+"")[0];"0"===t||"2"===t||"3"===t?o(r.response,e):e._emit("loaderror",null,"Failed loading audio file with status: "+r.status+".")},r.onerror=function(){e._webAudio&&(e._html5=!0,e._webAudio=!1,e._sounds=[],delete n[t],e.load())},a(r)}},a=function(e){try{e.send()}catch(t){e.onerror()}},o=function(e,i){var A=function(){i._emit("loaderror",null,"Decoding audio data failed.")},s=function(e){e&&i._sounds.length>0?(n[i._src]=e,c(i,e)):A()};"undefined"!=typeof Promise&&1===t.ctx.decodeAudioData.length?t.ctx.decodeAudioData(e).then(s).catch(A):t.ctx.decodeAudioData(e,s,A)},c=function(e,t){t&&!e._duration&&(e._duration=t.duration),0===Object.keys(e._sprite).length&&(e._sprite={__default:[0,1e3*e._duration]}),"loaded"!==e._state&&(e._state="loaded",e._emit("load"),e._loadQueue())},l=function(){if(t.usingWebAudio){try{"undefined"!=typeof AudioContext?t.ctx=new AudioContext:"undefined"!=typeof webkitAudioContext?t.ctx=new webkitAudioContext:t.usingWebAudio=!1}catch(e){t.usingWebAudio=!1}t.ctx||(t.usingWebAudio=!1);var e=/iP(hone|od|ad)/.test(t._navigator&&t._navigator.platform),i=t._navigator&&t._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),A=i?parseInt(i[1],10):null;if(e&&A&&A<9){var n=/safari/.test(t._navigator&&t._navigator.userAgent.toLowerCase());t._navigator&&!n&&(t.usingWebAudio=!1)}t.usingWebAudio&&(t.masterGain=void 0===t.ctx.createGain?t.ctx.createGainNode():t.ctx.createGain(),t.masterGain.gain.setValueAtTime(t._muted?0:t._volume,t.ctx.currentTime),t.masterGain.connect(t.ctx.destination)),t._setup()}};Io.Howler=t,Io.Howl=i,void 0!==r?(r.HowlerGlobal=e,r.Howler=t,r.Howl=i,r.Sound=A):"undefined"!=typeof window&&(window.HowlerGlobal=e,window.Howler=t,window.Howl=i,window.Sound=A)}(),function(){var e;HowlerGlobal.prototype._pos=[0,0,0],HowlerGlobal.prototype._orientation=[0,0,-1,0,1,0],HowlerGlobal.prototype.stereo=function(e){var t=this;if(!t.ctx||!t.ctx.listener)return t;for(var i=t._howls.length-1;i>=0;i--)t._howls[i].stereo(e);return t},HowlerGlobal.prototype.pos=function(e,t,i){var A=this;return A.ctx&&A.ctx.listener?(t="number"!=typeof t?A._pos[1]:t,i="number"!=typeof i?A._pos[2]:i,"number"!=typeof e?A._pos:(A._pos=[e,t,i],void 0!==A.ctx.listener.positionX?(A.ctx.listener.positionX.setTargetAtTime(A._pos[0],Howler.ctx.currentTime,.1),A.ctx.listener.positionY.setTargetAtTime(A._pos[1],Howler.ctx.currentTime,.1),A.ctx.listener.positionZ.setTargetAtTime(A._pos[2],Howler.ctx.currentTime,.1)):A.ctx.listener.setPosition(A._pos[0],A._pos[1],A._pos[2]),A)):A},HowlerGlobal.prototype.orientation=function(e,t,i,A,n,s){var r=this;if(!r.ctx||!r.ctx.listener)return r;var a=r._orientation;return t="number"!=typeof t?a[1]:t,i="number"!=typeof i?a[2]:i,A="number"!=typeof A?a[3]:A,n="number"!=typeof n?a[4]:n,s="number"!=typeof s?a[5]:s,"number"!=typeof e?a:(r._orientation=[e,t,i,A,n,s],void 0!==r.ctx.listener.forwardX?(r.ctx.listener.forwardX.setTargetAtTime(e,Howler.ctx.currentTime,.1),r.ctx.listener.forwardY.setTargetAtTime(t,Howler.ctx.currentTime,.1),r.ctx.listener.forwardZ.setTargetAtTime(i,Howler.ctx.currentTime,.1),r.ctx.listener.upX.setTargetAtTime(A,Howler.ctx.currentTime,.1),r.ctx.listener.upY.setTargetAtTime(n,Howler.ctx.currentTime,.1),r.ctx.listener.upZ.setTargetAtTime(s,Howler.ctx.currentTime,.1)):r.ctx.listener.setOrientation(e,t,i,A,n,s),r)},Howl.prototype.init=(e=Howl.prototype.init,function(t){var i=this;return i._orientation=t.orientation||[1,0,0],i._stereo=t.stereo||null,i._pos=t.pos||null,i._pannerAttr={coneInnerAngle:void 0!==t.coneInnerAngle?t.coneInnerAngle:360,coneOuterAngle:void 0!==t.coneOuterAngle?t.coneOuterAngle:360,coneOuterGain:void 0!==t.coneOuterGain?t.coneOuterGain:0,distanceModel:void 0!==t.distanceModel?t.distanceModel:"inverse",maxDistance:void 0!==t.maxDistance?t.maxDistance:1e4,panningModel:void 0!==t.panningModel?t.panningModel:"HRTF",refDistance:void 0!==t.refDistance?t.refDistance:1,rolloffFactor:void 0!==t.rolloffFactor?t.rolloffFactor:1},i._onstereo=t.onstereo?[{fn:t.onstereo}]:[],i._onpos=t.onpos?[{fn:t.onpos}]:[],i._onorientation=t.onorientation?[{fn:t.onorientation}]:[],e.call(this,t)}),Howl.prototype.stereo=function(e,i){var A=this;if(!A._webAudio)return A;if("loaded"!==A._state)return A._queue.push({event:"stereo",action:function(){A.stereo(e,i)}}),A;var n=void 0===Howler.ctx.createStereoPanner?"spatial":"stereo";if(void 0===i){if("number"!=typeof e)return A._stereo;A._stereo=e,A._pos=[e,0,0]}for(var s=A._getSoundIds(i),r=0;r<s.length;r++){var a=A._soundById(s[r]);if(a){if("number"!=typeof e)return a._stereo;a._stereo=e,a._pos=[e,0,0],a._node&&(a._pannerAttr.panningModel="equalpower",a._panner&&a._panner.pan||t(a,n),"spatial"===n?void 0!==a._panner.positionX?(a._panner.positionX.setValueAtTime(e,Howler.ctx.currentTime),a._panner.positionY.setValueAtTime(0,Howler.ctx.currentTime),a._panner.positionZ.setValueAtTime(0,Howler.ctx.currentTime)):a._panner.setPosition(e,0,0):a._panner.pan.setValueAtTime(e,Howler.ctx.currentTime)),A._emit("stereo",a._id)}}return A},Howl.prototype.pos=function(e,i,A,n){var s=this;if(!s._webAudio)return s;if("loaded"!==s._state)return s._queue.push({event:"pos",action:function(){s.pos(e,i,A,n)}}),s;if(i="number"!=typeof i?0:i,A="number"!=typeof A?-.5:A,void 0===n){if("number"!=typeof e)return s._pos;s._pos=[e,i,A]}for(var r=s._getSoundIds(n),a=0;a<r.length;a++){var o=s._soundById(r[a]);if(o){if("number"!=typeof e)return o._pos;o._pos=[e,i,A],o._node&&(o._panner&&!o._panner.pan||t(o,"spatial"),void 0!==o._panner.positionX?(o._panner.positionX.setValueAtTime(e,Howler.ctx.currentTime),o._panner.positionY.setValueAtTime(i,Howler.ctx.currentTime),o._panner.positionZ.setValueAtTime(A,Howler.ctx.currentTime)):o._panner.setPosition(e,i,A)),s._emit("pos",o._id)}}return s},Howl.prototype.orientation=function(e,i,A,n){var s=this;if(!s._webAudio)return s;if("loaded"!==s._state)return s._queue.push({event:"orientation",action:function(){s.orientation(e,i,A,n)}}),s;if(i="number"!=typeof i?s._orientation[1]:i,A="number"!=typeof A?s._orientation[2]:A,void 0===n){if("number"!=typeof e)return s._orientation;s._orientation=[e,i,A]}for(var r=s._getSoundIds(n),a=0;a<r.length;a++){var o=s._soundById(r[a]);if(o){if("number"!=typeof e)return o._orientation;o._orientation=[e,i,A],o._node&&(o._panner||(o._pos||(o._pos=s._pos||[0,0,-.5]),t(o,"spatial")),void 0!==o._panner.orientationX?(o._panner.orientationX.setValueAtTime(e,Howler.ctx.currentTime),o._panner.orientationY.setValueAtTime(i,Howler.ctx.currentTime),o._panner.orientationZ.setValueAtTime(A,Howler.ctx.currentTime)):o._panner.setOrientation(e,i,A)),s._emit("orientation",o._id)}}return s},Howl.prototype.pannerAttr=function(){var e,i,A,n=this,s=arguments;if(!n._webAudio)return n;if(0===s.length)return n._pannerAttr;if(1===s.length){if("object"!=typeof s[0])return(A=n._soundById(parseInt(s[0],10)))?A._pannerAttr:n._pannerAttr;e=s[0],void 0===i&&(e.pannerAttr||(e.pannerAttr={coneInnerAngle:e.coneInnerAngle,coneOuterAngle:e.coneOuterAngle,coneOuterGain:e.coneOuterGain,distanceModel:e.distanceModel,maxDistance:e.maxDistance,refDistance:e.refDistance,rolloffFactor:e.rolloffFactor,panningModel:e.panningModel}),n._pannerAttr={coneInnerAngle:void 0!==e.pannerAttr.coneInnerAngle?e.pannerAttr.coneInnerAngle:n._coneInnerAngle,coneOuterAngle:void 0!==e.pannerAttr.coneOuterAngle?e.pannerAttr.coneOuterAngle:n._coneOuterAngle,coneOuterGain:void 0!==e.pannerAttr.coneOuterGain?e.pannerAttr.coneOuterGain:n._coneOuterGain,distanceModel:void 0!==e.pannerAttr.distanceModel?e.pannerAttr.distanceModel:n._distanceModel,maxDistance:void 0!==e.pannerAttr.maxDistance?e.pannerAttr.maxDistance:n._maxDistance,refDistance:void 0!==e.pannerAttr.refDistance?e.pannerAttr.refDistance:n._refDistance,rolloffFactor:void 0!==e.pannerAttr.rolloffFactor?e.pannerAttr.rolloffFactor:n._rolloffFactor,panningModel:void 0!==e.pannerAttr.panningModel?e.pannerAttr.panningModel:n._panningModel})}else 2===s.length&&(e=s[0],i=parseInt(s[1],10));for(var r=n._getSoundIds(i),a=0;a<r.length;a++)if(A=n._soundById(r[a])){var o=A._pannerAttr;o={coneInnerAngle:void 0!==e.coneInnerAngle?e.coneInnerAngle:o.coneInnerAngle,coneOuterAngle:void 0!==e.coneOuterAngle?e.coneOuterAngle:o.coneOuterAngle,coneOuterGain:void 0!==e.coneOuterGain?e.coneOuterGain:o.coneOuterGain,distanceModel:void 0!==e.distanceModel?e.distanceModel:o.distanceModel,maxDistance:void 0!==e.maxDistance?e.maxDistance:o.maxDistance,refDistance:void 0!==e.refDistance?e.refDistance:o.refDistance,rolloffFactor:void 0!==e.rolloffFactor?e.rolloffFactor:o.rolloffFactor,panningModel:void 0!==e.panningModel?e.panningModel:o.panningModel};var c=A._panner;c||(A._pos||(A._pos=n._pos||[0,0,-.5]),t(A,"spatial"),c=A._panner),c.coneInnerAngle=o.coneInnerAngle,c.coneOuterAngle=o.coneOuterAngle,c.coneOuterGain=o.coneOuterGain,c.distanceModel=o.distanceModel,c.maxDistance=o.maxDistance,c.refDistance=o.refDistance,c.rolloffFactor=o.rolloffFactor,c.panningModel=o.panningModel}return n},Sound.prototype.init=function(e){return function(){var t=this,i=t._parent;t._orientation=i._orientation,t._stereo=i._stereo,t._pos=i._pos,t._pannerAttr=i._pannerAttr,e.call(this),t._stereo?i.stereo(t._stereo):t._pos&&i.pos(t._pos[0],t._pos[1],t._pos[2],t._id)}}(Sound.prototype.init),Sound.prototype.reset=function(e){return function(){var t=this,i=t._parent;return t._orientation=i._orientation,t._stereo=i._stereo,t._pos=i._pos,t._pannerAttr=i._pannerAttr,t._stereo?i.stereo(t._stereo):t._pos?i.pos(t._pos[0],t._pos[1],t._pos[2],t._id):t._panner&&(t._panner.disconnect(0),t._panner=void 0,i._refreshBuffer(t)),e.call(this)}}(Sound.prototype.reset);var t=function(e,t){"spatial"===(t=t||"spatial")?(e._panner=Howler.ctx.createPanner(),e._panner.coneInnerAngle=e._pannerAttr.coneInnerAngle,e._panner.coneOuterAngle=e._pannerAttr.coneOuterAngle,e._panner.coneOuterGain=e._pannerAttr.coneOuterGain,e._panner.distanceModel=e._pannerAttr.distanceModel,e._panner.maxDistance=e._pannerAttr.maxDistance,e._panner.refDistance=e._pannerAttr.refDistance,e._panner.rolloffFactor=e._pannerAttr.rolloffFactor,e._panner.panningModel=e._pannerAttr.panningModel,void 0!==e._panner.positionX?(e._panner.positionX.setValueAtTime(e._pos[0],Howler.ctx.currentTime),e._panner.positionY.setValueAtTime(e._pos[1],Howler.ctx.currentTime),e._panner.positionZ.setValueAtTime(e._pos[2],Howler.ctx.currentTime)):e._panner.setPosition(e._pos[0],e._pos[1],e._pos[2]),void 0!==e._panner.orientationX?(e._panner.orientationX.setValueAtTime(e._orientation[0],Howler.ctx.currentTime),e._panner.orientationY.setValueAtTime(e._orientation[1],Howler.ctx.currentTime),e._panner.orientationZ.setValueAtTime(e._orientation[2],Howler.ctx.currentTime)):e._panner.setOrientation(e._orientation[0],e._orientation[1],e._orientation[2])):(e._panner=Howler.ctx.createStereoPanner(),e._panner.pan.setValueAtTime(e._stereo,Howler.ctx.currentTime)),e._panner.connect(e._node),e._paused||e._parent.pause(e._id,!0).play(e._id,!0)}}();class fo extends t{url="";audio=null;static VOLUMN=1;static MUTED=!1;constructor(e){super(),e&&(this.url=e,this.setUrl(e))}async setUrl(e){return this.isPlaying()&&this.pause(),this.url=e,new Promise((t=>{const i=new Co.Howl({src:e,loop:!1,preload:!0,volume:fo.VOLUMN,format:["wav"],mute:fo.MUTED,onload:()=>{t(!0),this.emit("onload");const e=Howler.ctx;if(fo.VOLUMN>1){const t=e.createGain();i._sounds[0]._node.connect(t),t.connect(e.destination),i.gainNode=t,i.gainNode.gain.value=fo.VOLUMN}},onplay:()=>{this.emit("onplay")},onstop:()=>{this.emit("onstop")},onend:()=>{this.emit("onend")},onplayerror:(e,i)=>{t(!1),this.emit("onplayerror")}});this.audio=i}))}getUrl(){return this.url}async play(){return this.audio?.play(),Promise.resolve(!0)}async restart(){return this.reset(),this.play()}pause(){this.audio?.pause()}seek(e){this.audio?.seek(e)}load(){this.audio?.load()}reset(){this.audio?.seek(0)}isLoaded(){return"loaded"===this.audio?.state()}isPlaying(){return!!this.audio?.playing()}getDuration(){return this.audio.duration()}setVolume(e){fo.VOLUMN=e,this.audio?.volume(e)}getVolume(){return this.audio.volume()}destroy(){this.url="",this.audio?.pause()}mute(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.audio&&this.audio.mute(e)}}const Eo=fo;var po=new fo;var Bo=function(){this.__data__=[],this.size=0};var Qo=function(e,t){return e===t||e!=e&&t!=t},mo=Qo;var yo=function(e,t){for(var i=e.length;i--;)if(mo(e[i][0],t))return i;return-1},wo=yo,So=Array.prototype.splice;var _o=yo;var To=yo;var Do=yo;var bo=Bo,Ro=function(e){var t=this.__data__,i=wo(t,e);return!(i<0)&&(i==t.length-1?t.pop():So.call(t,i,1),--this.size,!0)},vo=function(e){var t=this.__data__,i=_o(t,e);return i<0?void 0:t[i][1]},ko=function(e){return To(this.__data__,e)>-1},xo=function(e,t){var i=this.__data__,A=Do(i,e);return A<0?(++this.size,i.push([e,t])):i[A][1]=t,this};function Po(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var A=e[t];this.set(A[0],A[1])}}Po.prototype.clear=bo,Po.prototype.delete=Ro,Po.prototype.get=vo,Po.prototype.has=ko,Po.prototype.set=xo;var Fo=Po,Mo=Fo;var No=function(){this.__data__=new Mo,this.size=0};var Lo=function(e){var t=this.__data__,i=t.delete(e);return this.size=t.size,i};var Uo=function(e){return this.__data__.get(e)};var Go=function(e){return this.__data__.has(e)},Oo="object"==typeof r&&r&&r.Object===Object&&r,Jo=Oo,qo="object"==typeof self&&self&&self.Object===Object&&self,Ko=Jo||qo||Function("return this")(),Ho=Ko.Symbol,Wo=Ho,Yo=Object.prototype,zo=Yo.hasOwnProperty,jo=Yo.toString,Vo=Wo?Wo.toStringTag:void 0;var Zo=function(e){var t=zo.call(e,Vo),i=e[Vo];try{e[Vo]=void 0;var A=!0}catch(e){}var n=jo.call(e);return A&&(t?e[Vo]=i:delete e[Vo]),n},Xo=Object.prototype.toString;var $o=Zo,ec=function(e){return Xo.call(e)},tc=Ho?Ho.toStringTag:void 0;var ic=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":tc&&tc in Object(e)?$o(e):ec(e)};var Ac=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},nc=ic,sc=Ac;var rc,ac=function(e){if(!sc(e))return!1;var t=nc(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},oc=Ko["__core-js_shared__"],cc=(rc=/[^.]+$/.exec(oc&&oc.keys&&oc.keys.IE_PROTO||""))?"Symbol(src)_1."+rc:"";var lc=function(e){return!!cc&&cc in e},hc=Function.prototype.toString;var gc=ac,dc=lc,uc=Ac,Ic=function(e){if(null!=e){try{return hc.call(e)}catch(e){}try{return e+""}catch(e){}}return""},Cc=/^\[object .+?Constructor\]$/,fc=Function.prototype,Ec=Object.prototype,pc=fc.toString,Bc=Ec.hasOwnProperty,Qc=RegExp("^"+pc.call(Bc).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var mc=function(e){return!(!uc(e)||dc(e))&&(gc(e)?Qc:Cc).test(Ic(e))},yc=function(e,t){return null==e?void 0:e[t]};var wc=function(e,t){var i=yc(e,t);return mc(i)?i:void 0},Sc=wc(Ko,"Map"),_c=wc(Object,"create"),Tc=_c;var Dc=function(){this.__data__=Tc?Tc(null):{},this.size=0};var bc=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Rc=_c,vc=Object.prototype.hasOwnProperty;var kc=function(e){var t=this.__data__;if(Rc){var i=t[e];return"__lodash_hash_undefined__"===i?void 0:i}return vc.call(t,e)?t[e]:void 0},xc=_c,Pc=Object.prototype.hasOwnProperty;var Fc=_c;var Mc=Dc,Nc=bc,Lc=kc,Uc=function(e){var t=this.__data__;return xc?void 0!==t[e]:Pc.call(t,e)},Gc=function(e,t){var i=this.__data__;return this.size+=this.has(e)?0:1,i[e]=Fc&&void 0===t?"__lodash_hash_undefined__":t,this};function Oc(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var A=e[t];this.set(A[0],A[1])}}Oc.prototype.clear=Mc,Oc.prototype.delete=Nc,Oc.prototype.get=Lc,Oc.prototype.has=Uc,Oc.prototype.set=Gc;var Jc=Oc,qc=Fo,Kc=Sc;var Hc=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var Wc=function(e,t){var i=e.__data__;return Hc(t)?i["string"==typeof t?"string":"hash"]:i.map},Yc=Wc;var zc=Wc;var jc=Wc;var Vc=Wc;var Zc=function(){this.size=0,this.__data__={hash:new Jc,map:new(Kc||qc),string:new Jc}},Xc=function(e){var t=Yc(this,e).delete(e);return this.size-=t?1:0,t},$c=function(e){return zc(this,e).get(e)},el=function(e){return jc(this,e).has(e)},tl=function(e,t){var i=Vc(this,e),A=i.size;return i.set(e,t),this.size+=i.size==A?0:1,this};function il(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var A=e[t];this.set(A[0],A[1])}}il.prototype.clear=Zc,il.prototype.delete=Xc,il.prototype.get=$c,il.prototype.has=el,il.prototype.set=tl;var Al=Fo,nl=Sc,sl=il;var rl=Fo,al=No,ol=Lo,cl=Uo,ll=Go,hl=function(e,t){var i=this.__data__;if(i instanceof Al){var A=i.__data__;if(!nl||A.length<199)return A.push([e,t]),this.size=++i.size,this;i=this.__data__=new sl(A)}return i.set(e,t),this.size=i.size,this};function gl(e){var t=this.__data__=new rl(e);this.size=t.size}gl.prototype.clear=al,gl.prototype.delete=ol,gl.prototype.get=cl,gl.prototype.has=ll,gl.prototype.set=hl;var dl=gl,ul=wc,Il=function(){try{var e=ul(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),Cl=Il;var fl=function(e,t,i){"__proto__"==t&&Cl?Cl(e,t,{configurable:!0,enumerable:!0,value:i,writable:!0}):e[t]=i},El=fl,pl=Qo;var Bl=function(e,t,i){(void 0!==i&&!pl(e[t],i)||void 0===i&&!(t in e))&&El(e,t,i)};var Ql=function(e){return function(t,i,A){for(var n=-1,s=Object(t),r=A(t),a=r.length;a--;){var o=r[e?a:++n];if(!1===i(s[o],o,s))break}return t}}(),ml={exports:{}};!function(e,t){var i=Ko,A=t&&!t.nodeType&&t,n=A&&e&&!e.nodeType&&e,s=n&&n.exports===A?i.Buffer:void 0,r=s?s.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var i=e.length,A=r?r(i):new e.constructor(i);return e.copy(A),A}}(ml,ml.exports);var yl=ml.exports,wl=Ko.Uint8Array;var Sl=function(e){var t=new e.constructor(e.byteLength);return new wl(t).set(new wl(e)),t};var _l=function(e,t){var i=t?Sl(e.buffer):e.buffer;return new e.constructor(i,e.byteOffset,e.length)};var Tl=function(e,t){var i=-1,A=e.length;for(t||(t=Array(A));++i<A;)t[i]=e[i];return t},Dl=Ac,bl=Object.create,Rl=function(){function e(){}return function(t){if(!Dl(t))return{};if(bl)return bl(t);e.prototype=t;var i=new e;return e.prototype=void 0,i}}();var vl=function(e,t){return function(i){return e(t(i))}}(Object.getPrototypeOf,Object),kl=Object.prototype;var xl=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||kl)},Pl=Rl,Fl=vl,Ml=xl;var Nl=function(e){return"function"!=typeof e.constructor||Ml(e)?{}:Pl(Fl(e))};var Ll=function(e){return null!=e&&"object"==typeof e},Ul=ic,Gl=Ll;var Ol=function(e){return Gl(e)&&"[object Arguments]"==Ul(e)},Jl=Ll,ql=Object.prototype,Kl=ql.hasOwnProperty,Hl=ql.propertyIsEnumerable,Wl=Ol(function(){return arguments}())?Ol:function(e){return Jl(e)&&Kl.call(e,"callee")&&!Hl.call(e,"callee")},Yl=Array.isArray;var zl=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},jl=ac,Vl=zl;var Zl=function(e){return null!=e&&Vl(e.length)&&!jl(e)},Xl=Zl,$l=Ll;var eh=function(e){return $l(e)&&Xl(e)},th={exports:{}};var ih=function(){return!1};!function(e,t){var i=Ko,A=ih,n=t&&!t.nodeType&&t,s=n&&e&&!e.nodeType&&e,r=s&&s.exports===n?i.Buffer:void 0,a=(r?r.isBuffer:void 0)||A;e.exports=a}(th,th.exports);var Ah=th.exports,nh=ic,sh=vl,rh=Ll,ah=Function.prototype,oh=Object.prototype,ch=ah.toString,lh=oh.hasOwnProperty,hh=ch.call(Object);var gh=function(e){if(!rh(e)||"[object Object]"!=nh(e))return!1;var t=sh(e);if(null===t)return!0;var i=lh.call(t,"constructor")&&t.constructor;return"function"==typeof i&&i instanceof i&&ch.call(i)==hh},dh=ic,uh=zl,Ih=Ll,Ch={};Ch["[object Float32Array]"]=Ch["[object Float64Array]"]=Ch["[object Int8Array]"]=Ch["[object Int16Array]"]=Ch["[object Int32Array]"]=Ch["[object Uint8Array]"]=Ch["[object Uint8ClampedArray]"]=Ch["[object Uint16Array]"]=Ch["[object Uint32Array]"]=!0,Ch["[object Arguments]"]=Ch["[object Array]"]=Ch["[object ArrayBuffer]"]=Ch["[object Boolean]"]=Ch["[object DataView]"]=Ch["[object Date]"]=Ch["[object Error]"]=Ch["[object Function]"]=Ch["[object Map]"]=Ch["[object Number]"]=Ch["[object Object]"]=Ch["[object RegExp]"]=Ch["[object Set]"]=Ch["[object String]"]=Ch["[object WeakMap]"]=!1;var fh=function(e){return Ih(e)&&uh(e.length)&&!!Ch[dh(e)]};var Eh=function(e){return function(t){return e(t)}},ph={exports:{}};!function(e,t){var i=Oo,A=t&&!t.nodeType&&t,n=A&&e&&!e.nodeType&&e,s=n&&n.exports===A&&i.process,r=function(){try{var e=n&&n.require&&n.require("util").types;return e||s&&s.binding&&s.binding("util")}catch(e){}}();e.exports=r}(ph,ph.exports);var Bh=ph.exports,Qh=fh,mh=Eh,yh=Bh&&Bh.isTypedArray,wh=yh?mh(yh):Qh;var Sh=function(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]},_h=fl,Th=Qo,Dh=Object.prototype.hasOwnProperty;var bh=function(e,t,i){var A=e[t];Dh.call(e,t)&&Th(A,i)&&(void 0!==i||t in e)||_h(e,t,i)},Rh=fl;var vh=function(e,t,i,A){var n=!i;i||(i={});for(var s=-1,r=t.length;++s<r;){var a=t[s],o=A?A(i[a],e[a],a,i,e):void 0;void 0===o&&(o=e[a]),n?Rh(i,a,o):bh(i,a,o)}return i};var kh=/^(?:0|[1-9]\d*)$/;var xh=function(e,t){var i=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==i||"symbol"!=i&&kh.test(e))&&e>-1&&e%1==0&&e<t},Ph=function(e,t){for(var i=-1,A=Array(e);++i<e;)A[i]=t(i);return A},Fh=Wl,Mh=Yl,Nh=Ah,Lh=xh,Uh=wh,Gh=Object.prototype.hasOwnProperty;var Oh=function(e,t){var i=Mh(e),A=!i&&Fh(e),n=!i&&!A&&Nh(e),s=!i&&!A&&!n&&Uh(e),r=i||A||n||s,a=r?Ph(e.length,String):[],o=a.length;for(var c in e)!t&&!Gh.call(e,c)||r&&("length"==c||n&&("offset"==c||"parent"==c)||s&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||Lh(c,o))||a.push(c);return a};var Jh=Ac,qh=xl,Kh=function(e){var t=[];if(null!=e)for(var i in Object(e))t.push(i);return t},Hh=Object.prototype.hasOwnProperty;var Wh=Oh,Yh=function(e){if(!Jh(e))return Kh(e);var t=qh(e),i=[];for(var A in e)("constructor"!=A||!t&&Hh.call(e,A))&&i.push(A);return i},zh=Zl;var jh=function(e){return zh(e)?Wh(e,!0):Yh(e)},Vh=vh,Zh=jh;var Xh=Bl,$h=yl,eg=_l,tg=Tl,ig=Nl,Ag=Wl,ng=Yl,sg=eh,rg=Ah,ag=ac,og=Ac,cg=gh,lg=wh,hg=Sh,gg=function(e){return Vh(e,Zh(e))};var dg=dl,ug=Bl,Ig=Ql,Cg=function(e,t,i,A,n,s,r){var a=hg(e,i),o=hg(t,i),c=r.get(o);if(c)Xh(e,i,c);else{var l=s?s(a,o,i+"",e,t,r):void 0,h=void 0===l;if(h){var g=ng(o),d=!g&&rg(o),u=!g&&!d&&lg(o);l=o,g||d||u?ng(a)?l=a:sg(a)?l=tg(a):d?(h=!1,l=$h(o,!0)):u?(h=!1,l=eg(o,!0)):l=[]:cg(o)||Ag(o)?(l=a,Ag(a)?l=gg(a):og(a)&&!ag(a)||(l=ig(o))):h=!1}h&&(r.set(o,l),n(l,o,A,s,r),r.delete(o)),Xh(e,i,l)}},fg=Ac,Eg=jh,pg=Sh;var Bg=function e(t,i,A,n,s){t!==i&&Ig(i,(function(r,a){if(s||(s=new dg),fg(r))Cg(t,i,a,A,e,n,s);else{var o=n?n(pg(t,a),r,a+"",t,i,s):void 0;void 0===o&&(o=r),ug(t,a,o)}}),Eg)};var Qg=function(e){return e};var mg=function(e,t,i){switch(i.length){case 0:return e.call(t);case 1:return e.call(t,i[0]);case 2:return e.call(t,i[0],i[1]);case 3:return e.call(t,i[0],i[1],i[2])}return e.apply(t,i)},yg=Math.max;var wg=function(e,t,i){return t=yg(void 0===t?e.length-1:t,0),function(){for(var A=arguments,n=-1,s=yg(A.length-t,0),r=Array(s);++n<s;)r[n]=A[t+n];n=-1;for(var a=Array(t+1);++n<t;)a[n]=A[n];return a[t]=i(r),mg(e,this,a)}};var Sg=function(e){return function(){return e}},_g=Il,Tg=_g?function(e,t){return _g(e,"toString",{configurable:!0,enumerable:!1,value:Sg(t),writable:!0})}:Qg,Dg=Date.now;var bg=function(e){var t=0,i=0;return function(){var A=Dg(),n=16-(A-i);if(i=A,n>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(Tg),Rg=Qg,vg=wg,kg=bg;var xg=Qo,Pg=Zl,Fg=xh,Mg=Ac;var Ng=function(e,t){return kg(vg(e,t,Rg),e+"")},Lg=function(e,t,i){if(!Mg(i))return!1;var A=typeof t;return!!("number"==A?Pg(i)&&Fg(t,i.length):"string"==A&&t in i)&&xg(i[t],e)};var Ug=Bg,Gg=a(function(e){return Ng((function(t,i){var A=-1,n=i.length,s=n>1?i[n-1]:void 0,r=n>2?i[2]:void 0;for(s=e.length>3&&"function"==typeof s?(n--,s):void 0,r&&Lg(i[0],i[1],r)&&(s=n<3?void 0:s,n=1),t=Object(t);++A<n;){var a=i[A];a&&e(t,a,A,s)}return t}))}((function(e,t,i){Ug(e,t,i)})));var Og;!function(e){e.IDLE="idle",e.PLAYING="playing",e.PAUSED="paused",e.STOPPED="stopped"}(Og||(Og={}));class Jg{audioContext=null;audioWorkletNode=null;outputGainNode=null;aecGainNode=null;aecNode=null;aecMicSource=null;aecDest=null;aecRefNode=null;aecModuleAdded=!1;lastAecErleDb=0;aecDebug=!1;state=Og.IDLE;config;isInitialized=!1;initializingPromise=null;mediaStreamDestination=null;audioElement=null;onPlaybackStartedHandler;onPlaybackEndedHandler;onPlaybackStoppedHandler;onBufferLowHandler;onErrorHandler;processorBlobUrl=null;onAudioWaiting=null;onAudioPlaying=null;jitterConfig={initialBuffer:200,minBuffer:100,maxBuffer:500,jitterMultiplier:3,shrinkRate:20};lastChunkArrivalTime=0;lastChunkTimestamp=0;jitterEstimate=0;totalSamplesReceived=0;chunkCount=0;chunkIntervals=[];maxChunkInterval=0;targetBufferMs=100;lastTargetUpdateTime=0;workletStats={actualBufferMs:0,underrunCount:0,minBufferMs:100};isMobile;isIOS;workletConfig;useAecOutput;outputGain=1;duckingTimer=null;isChangingRate=!1;resampleSequence=0;pendingResamples=new Map;nextSendSequence=0;isProcessingResample=!1;resampleLastSample=0;constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.config={sampleRate:e.sampleRate||24e3,channels:e.channels||1,bufferSize:e.bufferSize||4096,...e};const t=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),i="undefined"!=typeof window&&("1"===new URLSearchParams(window.location.search).get("forceMobileBuffer")||"1"===window.localStorage.getItem("forceMobileBuffer"));this.isMobile=t||i,this.isIOS=/iPhone|iPad|iPod/.test(navigator.userAgent)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1,this.useAecOutput=!0,this.isIOS,this.isMobile?(this.jitterConfig={initialBuffer:350,minBuffer:200,maxBuffer:800,jitterMultiplier:3,shrinkRate:15},this.workletConfig={firstPlaybackBufferMs:650,maxWaitForDataSec:4}):this.workletConfig={firstPlaybackBufferMs:350,maxWaitForDataSec:2}}async setRate(e){if(this.config.sampleRate!==e||!this.isInitialized)if(this.isChangingRate)console.warn("[AudioManager] Rate change already in progress, skipping");else{this.isChangingRate=!0;try{this.config.sampleRate=e,await this.dispose(),this.resetJitterBuffer(),await this.initialize()}finally{this.isChangingRate=!1}}}setFirstPlaybackBuffer(e){let t;if(e<=0?t=this.isMobile?650:350:(t=e,this.isMobile),this.workletConfig.firstPlaybackBufferMs=t,this.audioWorkletNode&&this.audioContext){const e=this.audioContext.sampleRate,i=Math.floor(e*(t/1e3));this.audioWorkletNode.port.postMessage({type:"update-first-playback-buffer",payload:{firstPlaybackBuffer:i}})}}async setMuted(e){this.config.muted!==e&&(this.config.muted=e,this.isInitialized&&this.audioWorkletNode&&(e?(this.audioWorkletNode.disconnect(),this.outputGainNode?.disconnect(),this.aecGainNode?.disconnect(),this.audioElement&&this.audioElement.pause()):(this.audioContext&&(this.outputGainNode||(this.outputGainNode=this.audioContext.createGain()),this.outputGainNode.gain.value=this.outputGain,this.audioWorkletNode.connect(this.outputGainNode),this.outputGainNode.connect(this.audioContext.destination)),this.mediaStreamDestination&&(this.aecGainNode||(this.aecGainNode=this.audioContext.createGain()),this.aecGainNode.gain.value=1,this.audioWorkletNode.connect(this.aecGainNode),this.aecGainNode.connect(this.mediaStreamDestination)),this.audioElement&&this.audioElement.play().catch((e=>{console.warn("[AudioManager] AEC reference resume failed:",e)})))))}setOutputGain(e){const t=Math.max(0,Math.min(1,e));this.outputGain=t,this.outputGainNode&&(this.outputGainNode.gain.value=t)}duckOutput(e,t){this.setOutputGain(e),this.duckingTimer&&(clearTimeout(this.duckingTimer),this.duckingTimer=null),this.duckingTimer=window.setTimeout((()=>{this.duckingTimer=null,this.setOutputGain(1)}),t)}async setAecEnabled(e){}isAecEnabled(){return this.useAecOutput}isMobileDevice(){return this.isMobile}async initialize(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!this.isInitialized)try{this.audioContext=new(window.AudioContext||window.webkitAudioContext);this.audioContext.sampleRate,this.config.sampleRate;if("suspended"===this.audioContext.state){if(!e)return void(this.isInitialized=!0);await this.audioContext.resume()}await this.completeInitialization()}catch(e){const t=e instanceof Error?e:new Error("Failed to initialize audio");throw this.onErrorHandler?.(t),t}}async completeInitialization(){if(!this.audioContext)throw new Error("AudioContext not created");const e=this.createProcessorBlobUrl();if(await this.audioContext.audioWorklet.addModule(e),this.audioWorkletNode=new AudioWorkletNode(this.audioContext,"pcm-audio-processor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[this.config.channels||1]}),this.audioWorkletNode.port.onmessage=e=>{this.handleWorkletMessage(e.data)},this.config.muted||(this.outputGainNode=this.audioContext.createGain(),this.outputGainNode.gain.value=this.outputGain,this.audioWorkletNode.connect(this.outputGainNode),this.outputGainNode.connect(this.audioContext.destination),this.isIOS||(this.aecGainNode=this.audioContext.createGain(),this.aecGainNode.gain.value=1,this.mediaStreamDestination=this.audioContext.createMediaStreamDestination(),this.audioWorkletNode.connect(this.aecGainNode),this.aecGainNode.connect(this.mediaStreamDestination),this.audioElement=new Audio,this.audioElement.srcObject=this.mediaStreamDestination.stream,this.audioElement.volume=.01,this.onAudioWaiting=()=>{this.audioElement,Date.now()},this.onAudioPlaying=()=>{this.audioElement,Date.now()},this.audioElement.addEventListener("waiting",this.onAudioWaiting),this.audioElement.addEventListener("playing",this.onAudioPlaying),this.audioElement.play().catch((e=>{console.warn("[AudioManager] AEC reference play failed:",e)})))),this.aecNode){const e=this.outputGainNode??this.audioWorkletNode;if(e&&e!==this.aecRefNode)try{e.connect(this.aecNode,0,1),this.aecRefNode=e}catch(e){}}this.isInitialized=!0}async ensureFullyInitialized(){if(this.initializingPromise)await this.initializingPromise;else if(!this.audioWorkletNode||!this.audioContext||"running"!==this.audioContext.state){this.initializingPromise=this.doEnsureFullyInitialized();try{await this.initializingPromise}finally{this.initializingPromise=null}}}async doEnsureFullyInitialized(){if(this.audioContext){if("suspended"===this.audioContext.state)try{await this.audioContext.resume(),this.audioContext.state}catch(e){throw console.error("[AudioManager] ❌ AudioContext resume failed:",e),new Error("AudioContext could not be resumed. User interaction may be required.")}this.audioWorkletNode||await this.completeInitialization()}else await this.initialize(!0)}async playAudio(e){if(await this.ensureFullyInitialized(),!this.audioWorkletNode)throw new Error("AudioWorklet not initialized");const t=new Int16Array(e),i=new Float32Array(t.length);for(let e=0;e<t.length;e++)i[e]=t[e]/32768;this.audioWorkletNode.port.postMessage({type:"append-float32-data",payload:i.buffer},[i.buffer])}async appendAudio(e){if(await this.ensureFullyInitialized(),!this.audioWorkletNode||!this.audioContext)throw new Error("AudioWorklet not initialized");const t=performance.now(),i=this.config.sampleRate||24e3;this.audioContext.sampleRate;const A=e.byteLength/2;if(this.chunkCount>0){const e=t-this.lastChunkArrivalTime,A=e-(this.totalSamplesReceived-this.lastChunkTimestamp)/i*1e3;this.jitterEstimate=this.jitterEstimate+(Math.abs(A)-this.jitterEstimate)/16,this.chunkIntervals.push(e),this.chunkIntervals.length>50&&this.chunkIntervals.shift(),this.maxChunkInterval=Math.max(this.maxChunkInterval,e),this.updateTargetBuffer()}this.lastChunkArrivalTime=t,this.lastChunkTimestamp=this.totalSamplesReceived,this.totalSamplesReceived+=A,this.chunkCount++;const n=new Int16Array(e),s=new Float32Array(n.length);for(let e=0;e<n.length;e++)s[e]=n[e]/32768;this.audioWorkletNode.port.postMessage({type:"append-float32-data",payload:s.buffer},[s.buffer])}async resampleWithWebAudio(e,t,i){if(t===i)return e;const A=e.length,n=Math.round(A*i/t);try{const s=new OfflineAudioContext(1,n,i),r=s.createBuffer(1,A,t);r.copyToChannel(e,0);const a=s.createBufferSource();a.buffer=r,a.connect(s.destination),a.start();return(await s.startRendering()).getChannelData(0)}catch(A){return console.warn("[AudioManager] Web Audio resample failed, using fallback:",A),this.resampleLinear(e,t,i)}}resampleLinear(e,t,i){const A=t/i,n=Math.round(e.length/A),s=new Float32Array(n);for(let t=0;t<n;t++){const i=t*A,n=Math.floor(i),r=i-n,a=n<e.length?e[n]:0,o=n+1<e.length?e[n+1]:a;s[t]=a+(o-a)*r}return s}processResampleQueue(){if(!this.isProcessingResample){for(this.isProcessingResample=!0;this.pendingResamples.has(this.nextSendSequence);){const e=this.pendingResamples.get(this.nextSendSequence);if(this.pendingResamples.delete(this.nextSendSequence),this.nextSendSequence++,this.audioWorkletNode){const t=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);this.audioWorkletNode.port.postMessage({type:"append-resampled-data",payload:t},[t])}}this.isProcessingResample=!1}}resetResampleState(){this.resampleSequence=0,this.pendingResamples.clear(),this.nextSendSequence=0,this.resampleLastSample=0}updateTargetBuffer(){const e=performance.now(),{initialBuffer:t,minBuffer:i,maxBuffer:A,jitterMultiplier:n,shrinkRate:s}=this.jitterConfig,r=t+n*this.jitterEstimate;if(r>this.targetBufferMs)this.targetBufferMs=r;else{const t=s*(e-this.lastTargetUpdateTime)/1e3;this.targetBufferMs=Math.max(r,this.targetBufferMs-t)}if(this.targetBufferMs=Math.max(i,Math.min(A,this.targetBufferMs)),this.lastTargetUpdateTime=e,this.audioWorkletNode&&this.audioContext){const e=this.audioContext.sampleRate,t=Math.floor(this.targetBufferMs/1e3*e);this.audioWorkletNode.port.postMessage({type:"update-min-buffer",payload:{minBufferSize:t}})}this.chunkCount%30==0&&(this.audioWorkletNode&&this.audioWorkletNode.port.postMessage({type:"get-stats"}),this.jitterEstimate.toFixed(1),this.targetBufferMs.toFixed(0),this.workletStats.actualBufferMs.toFixed(0),this.workletStats.underrunCount,this.chunkCount,this.getAverageChunkInterval().toFixed(0),this.maxChunkInterval.toFixed(0))}getAverageChunkInterval(){if(0===this.chunkIntervals.length)return 0;return this.chunkIntervals.reduce(((e,t)=>e+t),0)/this.chunkIntervals.length}getJitterBufferStats(){return this.audioWorkletNode&&this.audioWorkletNode.port.postMessage({type:"get-stats"}),{jitter:this.jitterEstimate,targetBuffer:this.targetBufferMs,actualBuffer:this.workletStats.actualBufferMs,underrunCount:this.workletStats.underrunCount,chunkCount:this.chunkCount,avgChunkInterval:this.getAverageChunkInterval(),maxChunkInterval:this.maxChunkInterval}}getChunkIntervalPercentiles(){if(0===this.chunkIntervals.length)return{p50:0,p95:0,p99:0};const e=[...this.chunkIntervals].sort(((e,t)=>e-t)),t=e.length,i=Math.floor(.5*t),A=Math.floor(.95*t),n=Math.floor(.99*t);return{p50:e[i]||0,p95:e[A]||e[t-1]||0,p99:e[n]||e[t-1]||0}}printJitterBufferReport(){const e=this.getJitterBufferStats(),t=this.getChunkIntervalPercentiles();e.jitter.toFixed(1),e.targetBuffer.toFixed(0),e.actualBuffer.toFixed(0),e.underrunCount,e.chunkCount,e.avgChunkInterval.toFixed(0),e.maxChunkInterval.toFixed(0),t.p50.toFixed(0),t.p95.toFixed(0),t.p99.toFixed(0)}resetJitterBuffer(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];if(this.lastChunkArrivalTime=0,this.lastChunkTimestamp=0,this.totalSamplesReceived=0,this.chunkCount=0,this.chunkIntervals=[],this.maxChunkInterval=0,this.lastTargetUpdateTime=0,e&&this.jitterEstimate>0?(this.targetBufferMs=Math.min(this.jitterConfig.maxBuffer,this.jitterConfig.initialBuffer+this.jitterConfig.jitterMultiplier*this.jitterEstimate),this.jitterEstimate.toFixed(1),this.targetBufferMs.toFixed(0)):(this.jitterEstimate=0,this.targetBufferMs=this.jitterConfig.initialBuffer),this.resetResampleState(),this.audioWorkletNode&&this.audioContext){const e=this.audioContext.sampleRate,t=Math.floor(this.targetBufferMs/1e3*e);this.audioWorkletNode.port.postMessage({type:"update-min-buffer",payload:{minBufferSize:t}})}}stopPlayback(){this.audioWorkletNode&&(this.audioWorkletNode.port.postMessage({type:"stop"}),this.state=Og.STOPPED)}clearBuffer(){this.audioWorkletNode&&(this.audioWorkletNode.port.postMessage({type:"clear"}),this.state=Og.IDLE)}notifyStreamStarted(){this.audioWorkletNode&&this.audioWorkletNode.port.postMessage({type:"stream-started"})}notifyStreamEnded(){this.audioWorkletNode&&this.audioWorkletNode.port.postMessage({type:"stream-ended"})}async getStats(){return this.audioWorkletNode?new Promise((e=>{let t=!1;const i=setTimeout((()=>{t||(t=!0,this.audioWorkletNode?.port.removeEventListener("message",A),e(null))}),2e3),A=n=>{if("stats"===n.data.type){if(t)return;t=!0,clearTimeout(i),this.audioWorkletNode?.port.removeEventListener("message",A),e(n.data.payload)}};this.audioWorkletNode&&(this.audioWorkletNode.port.addEventListener("message",A),this.audioWorkletNode.port.postMessage({type:"get-stats"}))})):null}getState(){return this.state}isPlaying(){return this.state===Og.PLAYING}async enableAudio(){this.audioContext?"suspended"===this.audioContext.state&&await this.audioContext.resume():await this.initialize(!0)}isAudioEnabled(){return"running"===this.audioContext?.state}async dispose(){this.stopPlayback(),this.duckingTimer&&(clearTimeout(this.duckingTimer),this.duckingTimer=null),this.audioElement&&(this.onAudioWaiting&&(this.audioElement.removeEventListener("waiting",this.onAudioWaiting),this.onAudioWaiting=null),this.onAudioPlaying&&(this.audioElement.removeEventListener("playing",this.onAudioPlaying),this.onAudioPlaying=null),this.audioElement.pause(),this.audioElement.srcObject=null,this.audioElement=null),this.mediaStreamDestination&&(this.mediaStreamDestination.disconnect(),this.mediaStreamDestination=null),this.outputGainNode&&(this.outputGainNode.disconnect(),this.outputGainNode=null),this.aecGainNode&&(this.aecGainNode.disconnect(),this.aecGainNode=null),this.audioWorkletNode&&(this.audioWorkletNode.disconnect(),this.audioWorkletNode=null),this.audioContext&&(await this.audioContext.close(),this.audioContext=null),this.processorBlobUrl&&(URL.revokeObjectURL(this.processorBlobUrl),this.processorBlobUrl=null),this.initializingPromise=null,this.onPlaybackStartedHandler=void 0,this.onPlaybackEndedHandler=void 0,this.onPlaybackStoppedHandler=void 0,this.onBufferLowHandler=void 0,this.onErrorHandler=void 0,this.isInitialized=!1,this.state=Og.IDLE}onPlaybackStarted(e){this.onPlaybackStartedHandler=e}onPlaybackEnded(e){this.onPlaybackEndedHandler=e}onPlaybackStopped(e){this.onPlaybackStoppedHandler=e}onBufferLow(e){this.onBufferLowHandler=e}onError(e){this.onErrorHandler=e}handleWorkletMessage(e){const{type:t,payload:i}=e;switch(t){case"playback-started":i?.isFirstPlayback?(i.requiredBufferMs?.toFixed(0),i.actualBufferMs?.toFixed(0),Date.now()):(i?.actualBufferMs?.toFixed(0),Date.now()),this.state=Og.PLAYING,this.onPlaybackStartedHandler?.();break;case"playback-ended":this.state=Og.IDLE,this.onPlaybackEndedHandler?.();break;case"playback-stopped":this.state=Og.STOPPED,this.onPlaybackStoppedHandler?.();break;case"buffer-cleared":this.state=Og.IDLE;break;case"buffer-low":this.onBufferLowHandler?.(i.remainingSamples);break;case"buffer-empty":console.warn("[AudioManager] ⚠️ Buffer empty (underrun):",{underrunCount:i.underrunCount,consecutiveUnderruns:i.consecutiveUnderruns,streamEnded:i.streamEnded,time:Date.now()}),this.workletStats.underrunCount=i.underrunCount;break;case"stats":i&&(this.workletStats={actualBufferMs:i.remainingDurationMs||0,underrunCount:i.underrunCount||0,minBufferMs:i.minBufferMs||100});break;case"init-info":i.outputSampleRate,i.inputSampleRate,i.needResample,i.resampleRatio?.toFixed(4),i.bufferCapacity;break;case"buffer-overflow":console.warn("[AudioManager] ⚠️ Buffer overflow, dropped samples:",i.droppedSamples);break;case"error":console.error("[AudioManager] ❌ Error:",i.message),this.onErrorHandler?.(new Error(i.message))}}async attachAEC(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.aecDebug="undefined"!=typeof location&&"1"===new URLSearchParams(location.search).get("aecDebug")||"undefined"!=typeof localStorage&&"1"===localStorage.getItem("aecDebug"),this.audioContext||await this.initialize();const i=this.audioContext;if(!i)throw new Error("[AudioManager][AEC] 无 AudioContext");if("suspended"===i.state)try{await i.resume()}catch{}if(!this.aecModuleAdded){const e=new Blob([this.getAECProcessorCode()],{type:"application/javascript"}),t=URL.createObjectURL(e);try{await i.audioWorklet.addModule(t)}finally{URL.revokeObjectURL(t)}this.aecModuleAdded=!0}this.detachAEC(),this.aecMicSource=i.createMediaStreamSource(e);const A=function(){const e=atob("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AUEBciIQIANqQQJ0IhFqIhQgCSAQQQJ0aiIQIBVqKgIAIBQqAgCUIBAqAgAgCCARaioCAJSSOAIAIAFBAmohASAEQQJqIgQgDEcNAAsgDkUNAQsgCiABIANqQQJ0IgNqIgQgCSABQQJ0aiIBIAJBAnRqKgIAIAQqAgCUIAEqAgAgAyAIaioCAJSSOAIACyAGQQFqIgYgE0cNAAsMAQsCQCAqIC+UICxDAACAQJReDQAgJSAplCAnQwAAgECUXg0AICggLpQgK0MAAIBAlF5FDQELAkAgCyAPbCAHbCATbCIEQQBMDQAgBEEDcSEJIAUoAmAhAyAFKAJkIQZBACEIQQAhASAEQQRPBEAgBEH8////B3EhDEEAIQQDQCADIAFBAnQiCmogBiAKaioCADgCACADIApBBHIiDmogBiAOaioCADgCACADIApBCHIiDmogBiAOaioCADgCACADIApBDHIiCmogBiAKaioCADgCACABQQRqIQEgBEEEaiIEIAxHDQALIAlFDQELA0AgAyABQQJ0IgRqIAQgBmoqAgA4AgAgAUEBaiEBIAhBAWoiCCAJRw0ACwsgE0EASgRAIAJB/v///wdxIREgAkEBcSEUIAJB/P///wdxIRUgAkEDcSEOQQAhDCACQQRJIRIDQAJAIAJBAEwNACALIAxsIgkgAmohECAFKAJMIQEgBSgCPCEDQQAhCkEAIQRBACEIQQAhBgJAIBJFBEADQCABIAggEGpBAnQiBGogAyAEaioCADgCACABIARBBGoiFmogAyAWaioCADgCACABIARBCGoiFmogAyAWaioCADgCACABIARBDGoiBGogAyAEaioCADgCACAIQQRqIQggBkEEaiIGIBVHDQALIAghBCAORQ0BCwNAIAEgBCAQakECdCIGaiADIAZqKgIAOAIAIARBAWohBCAKQQFqIgogDkcNAAsLIAUoAkwgAkECdGohAyAFKAJIIAIgDGxBAnRqIQQgBSgCPCEGQQAhAUEAIQggAkEBRwRAA0AgBiABIAlqQQJ0IgpqIAQgAUECdGoqAgAgAyAKaioCAJM4AgAgBiABQQFyIgogCWpBAnQiEGogBCAKQQJ0aioCACADIBBqKgIAkzgCACABQQJqIQEgCEECaiIIIBFHDQALIBRFDQELIAYgASAJakECdCIIaiAEIAFBAnRqKgIAIAMgCGoqAgCTOAIACyAMQQFqIgwgE0cNAAsLIAVCADcCcCAFQgA3AmggJCEmCyATQQBMDQAgC0EDayIBQQJxIRQgAUEBdiIQQQJqIQ4gEEEBakF+cSEVQQAhCUMAAAAAISpDAAAAACErQwAAAAAhLANAIAUoAjwhCgJAIAUoAgAiCEEASgRAIAogCSALbCIMQQJ0aiIRIAhBAnQiA2ohAiAFKAJIIAggCWxBAnRqIQQgBSgCtAEgCUECdGoiBioCACElQQAhAQNAIAUqArgBICWUIAQgAUECdCISaioCACACIBJqKgIAk5IhJQJAIA0gASATbCAJakEBdCISai8BAEGA+gFrQf//A3FBgAxLDQAgBSgCFA0AIAVBATYCFAsgEiAXagJ/QYCAAiAlQwD//8ZdDQAaQf//ASAlQwD9/0ZeDQAaICW7RAAAAAAAAOA/oJz8Ags7AQAgBiAlOAIAIAFBAWoiASAIRw0ACyAIQQNxIRJBACEEQQAhASAIQQRPBEAgCEH8////B3EhFkEAIQYDQCARIAFBAnRqIgIgA2ogAioCADgCACACQQA2AgAgAkEEaiADaiACKgIEOAIAIAJBADYCBCACQQhqIANqIAIqAgg4AgAgAkEANgIIIAJBDGogA2ogAioCDDgCACACQQA2AgwgAUEEaiEBIAZBBGoiBiAWRw0ACyASRQ0CCwNAIBEgAUECdGoiAiADaiACKgIAOAIAIAJBADYCACABQQFqIQEgBEEBaiIEIBJHDQALDAELIAkgC2whDAsgCiAMQQJ0IgxqIRECQCAIQQF1IgJFBEBDAAAAACElQwAAAAAhKEMAAAAAIScMAQsgCEECdCIBIAUoAkwgDGpqIQogAkEBayEGIAEgEWohAUMAAAAAISUCfyAIQQJxIhJFBEAgAiEEIAoMAQsgASoCBCAKKgIElCABKgIAIAoqAgCUQwAAAACSkkMAAAAAkiElIAFBCGohASAGIQQgCkEIagshAyAGBEADQCAlIAEqAgQgAyoCBJQgASoCACADKgIAlEMAAAAAkpKSIAEqAgwgAyoCDJQgASoCCCADKgIIlEMAAAAAkpKSISUgA0EQaiEDIAFBEGohASAEQQJrIgQNAAsLQwAAAAAhKAJ/IBJFBEAgAiEDIAoMAQsgAkEBayEDIAoqAgQiJyAnlCAKKgIAIicgJ5RDAAAAAJKSQwAAAACSISggCkEIagshASAGBEADQCAoIAEqAgQiJyAnlCABKgIAIicgJ5RDAAAAAJKSkiABKgIMIicgJ5QgASoCCCInICeUQwAAAACSkpIhKCABQRBqIQEgA0ECayIDDQALCyAFKAJIIAggCWxBAnRqIQFDAAAAACEnIBIEQCACQQFrIQIgASoCBCInICeUIAEqAgAiJyAnlEMAAAAAkpJDAAAAAJIhJyABQQhqIQELIAZFDQADQCAnIAEqAgQiJyAnlCABKgIAIicgJ5RDAAAAAJKSkiABKgIMIicgJ5QgASoCCCInICeUQwAAAACSkpIhJyABQRBqIQEgAkECayICDQALCyAFKAKoASARIAUoAlggDGoQCiAFKAJMIQECQCAFKAIAIgJBAEwNACACQQJ0IgJFDQAgASAMakEAIAL8CwALIAUoAqgBIAEgDGogBSgCVCAMahAKIAUoAoQBIgEgBSgCWCAMaiIGKgIAIikgKZQgASoCAJI4AgBBASECQQEhBCABAn9BASALQQNIIhINABpBACEIQQEhCkEBIQMgEARAA0AgASAKQQJ0aiIDIAMqAgAgBiAEQQJ0aiIRKgIAIikgKZQgESoCBCIpICmUkpI4AgAgAyADKgIEIBEqAggiKSAplCARKgIMIikgKZSSkjgCBCAKQQJqIQogBEEEaiEEIAhBAmoiCCAVRw0ACyAEIQMgDiAUDQEaCyABIApBAnRqIgQgBCoCACAGIANBAnRqIgQqAgAiKSAplCAEKgIEIikgKZSSkjgCACADQQJqIQQgDgtBAnRqIgEgBiAEQQJ0aioCACIpICmUIAEqAgCSOAIAIAUoAogBIgEgBSgCVCAMaiIGKgIAIikgKZQgASoCAJI4AgAgKyAnkiErICogKJIhKiAsICWSISwgAQJ/QQEgEg0AGkEAIQpBASEEQQEhAyAQBEADQCABIARBAnRqIgMgAyoCACAGIAJBAnRqIggqAgAiJSAllCAIKgIEIiUgJZSSkjgCACADIAMqAgQgCCoCCCIlICWUIAgqAgwiJSAllJKSOAIEIARBAmohBCACQQRqIQIgCkECaiIKIBVHDQALIAIhAyAOIBQNARoLIAEgBEECdGoiAiACKgIAIAYgA0ECdGoiAioCACIlICWUIAIqAgQiJSAllJKSOAIAIANBAmohAiAOC0ECdGoiASAGIAJBAnRqKgIAIiUgJZQgASoCAJI4AgAgCUEBaiIJIBNHDQALICwgLJQMAQtDAAAAACErQwAAAAAhKkMAAAAACyEsAkACQAJAAkACQAJAICpDAAAAAGBFDQAgLUMAAAAAYEUNACAmQwAAAABgRQ0AIAu3RAAAAABlzc1BoiIxICS7ZEUNACAxICq7ZEUNACAxIC27ZA0BCyAFIAUoAhhBMmoiATYCGCAFKAIAIBNsIgJBAEwNASACQQF0IgJFDQEgF0EAIAL8CwAMAQsgJCALskMAQBxGlCArkl5FDQEgBSAFKAIYQQFqIgE2AhgLIAFBMkgNASAcQekINgIAQdj0ACgCACAcEBtBACELIAVBADYCGCAFQQA2AgwgBSgCICEGIAUoAhwhAwJAIAUoAggiAiAFKAIEIgdsIgFBAEwNACABQQJ0IgFFIgRFBEAgBSgCYEEAIAH8CwALIAQNACAFKAJkQQAgAfwLAAsCQCACQQFqIAdsIgFBAEwNACABQQJ0IgFFDQAgBSgCREEAIAH8CwALAn9BACAFKAIAIgJBAEgNABogBSgClAEhCCAFKAKQASEKIAUoAnwhCSAFKAJ4IQ1BACEBAkAgAgRAIAJBAWpBfnEhDwNAIA0gAUECdCIEakEANgIAIAQgCWpBgICA/AM2AgAgBCAKakEANgIAIAQgCGpBADYCACANIARBBHIiBGpBADYCACAEIAlqQYCAgPwDNgIAIAQgCmpBADYCACAEIAhqQQA2AgAgAUECaiEBIAtBAmoiCyAPRw0ACyACQQFxDQELIA0gAUECdCIBakEANgIAIAEgCWpBgICA/AM2AgAgASAKakEANgIAIAEgCGpBADYCAAtBACACRQ0AGiACQQJ0IgEEQCAFKAJQQQAgAfwLAAtBAQshCQJAIAMgB2wiAUEATA0AIAFBAnQiAUUNACAFKAJYQQAgAfwLAAsCQCAGIAdsIgFBAEwNACABQQJ0IgFFDQAgBSgCQEEAIAH8CwALAkAgA0EATA0AQQAhAUEBIANBAXQiBCAEQQFMG0ECdCIEBEAgBSgCwAFBACAE/AsACyADQQNxIQggBSgCsAEhBCAFKAK0ASEHIANBBE8EQCADQfz///8HcSENQQAhCgNAIAcgAUECdCIDakEANgIAIAMgBGpBADYCACAHIANBBHIiC2pBADYCACAEIAtqQQA2AgAgByADQQhyIgtqQQA2AgAgBCALakEANgIAIAcgA0EMciIDakEANgIAIAMgBGpBADYCACABQQRqIQEgCkEEaiIKIA1HDQALIAhFDQELQQAhAwNAIAcgAUECdCIKakEANgIAIAQgCmpBADYCACABQQFqIQEgA0EBaiIDIAhHDQALCwJAIAZBAEwNACAGQQJ0IgFFDQAgBSgCrAFBACAB/AsACyAFQQA2AjQgBUIANwIQIAVCgICA/IOAgMA/NwKYASAFQgA3AmggBUIANwJwAkAgCUUNAEEBIAJBA2wiASABQQFMG0EBdCIBRQ0AIAUoAsQBQQAgAfwLAAsgBUEANgLMASAFIAJBAXQ2AsgBDAILIAVBADYCGAsgJiALsiIrQwAAyEKUIileIREgBSgCACEJIA9BAEoEQCAJQQJxIRQgC0EDayIBQQJxIRUgCUEBdSITQQFrIRIgBSgCQCAJQQJ0aiEWIAFBAXYiDkECaiEQIA5BAWpBfnEhGSAFKAJEIRggBSgCjAEiCCoCACEnQQAhBiALQQNIIRoDQCAGIAtsIQRDAAAAACElAkAgE0UNACAWIARBAnRqIQICfyAURQRAIAIhASATDAELIAJBCGohASACKgIEIiQgJJQgAioCACIkICSUQwAAAACSkkMAAAAAkiElIBILIQMgE0EBRg0AA0AgJSABKgIEIiQgJJQgASoCACIkICSUQwAAAACSkpIgASoCDCIkICSUIAEqAggiJCAklEMAAAAAkpKSISUgAUEQaiEBIANBAmsiAw0ACwsgCCAYIARBAnRqIgEqAgAiJCAklCAnkiInOAIAQQEhAiAtICWSIS0gCAJ/QQEgGg0AGkEAIQpBASEEQQEhAyAOBEADQCAIIARBAnRqIgMgAyoCACABIAJBAnRqIgwqAgAiJCAklCAMKgIEIiQgJJSSkjgCACADIAMqAgQgDCoCCCIkICSUIAwqAgwiJCAklJKSOAIEIARBAmohBCACQQRqIQIgCkECaiIKIBlHDQALIAIhAyAQIBUNARoLIAggBEECdGoiAiACKgIAIAEgA0ECdGoiAioCACIkICSUIAIqAgQiJCAklJKSOAIAIANBAmohAiAQC0ECdGoiAyABIAJBAnRqKgIAIiQgJJQgAyoCAJI4AgAgBkEBaiIGIA9HDQALC0EAIQFDAACAPyEoQwAAgD8hJSAJQQBOBEBDAACAP0RmZmZmZmbWPyAHt6O2IiSTISUgBSgCjAEhAiAFKAJ4IQMCQCAJBEAgCUEBakF+cSEGQQAhCgNAIAMgAUECdCIEaiIIICQgAiAEaioCAJQgJSAIKgIAlEMAAIA/kpI4AgAgAyAEQQRyIgRqIgggJCACIARqKgIAlCAlIAgqAgCUQwAAgD+SkjgCACABQQJqIQEgCkECaiIKIAZHDQALIAlBAXENAQsgAyABQQJ0IgFqIgMgJCABIAJqKgIAlCAlIAMqAgCUQwAAgD+SkjgCAAsgBSgClAEhBCAFKAKIASEGIAUoApABIQggBSgChAEhCiAJIQFDAACAPyEnA0AgBCABIgJBAnQiAWoiAyoCACEkIAEgBmoiCyoCACElIAEgCGoiD0MAAIA/IAUqAigiLpMgDyoCACIvlCABIApqKgIAIjAgLpSSOAIAIANDAACAPyAFKgIoIi6TIAMqAgCUIC4gCyoCAJSSOAIAIDAgL5MgJSAkkyIklCAokiEoICQgJJQgJ5IhJyACQQFrIQEgAg0ACyAnkSElCyAFQwAAgD8gJiApIBEbIiQgBSoCMJQiJiAqIAUqAiyUIicgJiAnXRsgJJUiJpMiKSAFKgKYAZQgKCAllSAmlJIiJzgCmAEgBUMAAIA/ICkgBSoCnAGUICUgJpSSIiYgJkMAAIA/XRsiJjgCnAEgJiAmQwrXozuUIiUgJyAlICdeIgEbIiUgJSAmXiICGyElIAEgAnIEQCAFICU4ApgBCyAFQwD+/0YgJSAmlSImICZDAPx/Rl4bIiY4AjggKiAmlCEmICS7ITECfwJAIAUoAhBFBEAgBSoCNCAHsl5FDQEgJiAqQ4/C9TyUXkUNASAFQQE2AhALQQAhASAJQQBIDQJDAAAAPyAsICQgKpRDAACAP5KVIiQgLbtELUMc6+I2Gj+iICa7RAAAAAAAAAhAoqAgMaO2IiYgJCAmXhsiJCAkQwAAAD9eGyEmIAUoAnwhAyAFKAJ4IQQgBSgChAEhByAFKAKIASEGA0AgAyABQQJ0IgJqIAIgB2oqAgBDAACAP5IiJLtEAAAAAAAA4D+iIjG2IAUqAjggAiAGaioCAJQiJSAxICW7Yxu7RGZmZmZmZuY/oiAmICSUu0QzMzMzMzPTP6KgtiAkIAIgBGoqAgBDAAAgQZKUlTgCACABIAlGIQIgAUEBaiEBIAJFDQALQQAMAQtDAAAAACElICtDAAB6RJQgLV0EQCAxRAAAAAAAANA/oiIxtiAtQwAAgD6UIiYgMSAmu2MbICSVISULQQAhAQJAIAlBAEgNACAFKAJ8IQIgBSgCeCEDIAkEQCAJQQFqQX5xIQdBACEKA0AgAiABQQJ0IgRqICUgAyAEaioCAEMAACBBkpU4AgAgAiAEQQRyIgRqICUgAyAEaioCAEMAACBBkpU4AgAgAUECaiEBIApBAmoiCiAHRw0ACyAJQQFxDQELIAIgAUECdCIBaiAlIAEgA2oqAgBDAAAgQZKVOAIACyAFICUgBSoCNJI4AjRBAQshBiAJQQBMDQAgCUEDcSEHIAUoAlAiAiAJQQJ0aiEDQQAhCkEAIQECQCAJQQRPBEAgCUH8////B3EhC0EAIQgDQCACIAFBAnQiBGogAyAEaioCADgCACACIARBBHIiD2ogAyAPaioCADgCACACIARBCHIiD2ogAyAPaioCADgCACACIARBDHIiBGogAyAEaioCADgCACABQQRqIQEgCEEEaiIIIAtHDQALIAdFDQELA0AgAiABQQJ0IgRqIAMgBGoqAgA4AgAgAUEBaiEBIApBAWoiCiAHRw0ACwsgBg0AIAUoAlAgCUECdGohA0EAIQEgCUEBRwRAIAlBAXEhBCAJQf7///8HcSEHQQAhAgNAIAMgAUECdGogDSABQQF0IgZqLgEAIAYgF2ouAQBrsjgCACADIAFBAXIiBkECdGogDSAGQQF0IgZqLgEAIAYgF2ouAQBrsjgCACABQQJqIQEgAkECaiICIAdHDQALIARFDQELIAMgAUECdGogDSABQQF0IgFqLgEAIAEgF2ouAQBrsjgCAAsgHEEQaiQAQQAhBCAAKAIEIgAgACgCzAFBAWo2AswBIABBn5wBIAAoAsQBIgEgAUGfnAFOG0EBaiIQNgLEASAAKAIEIQEgACgCACETIAAoAgwhCiAAKAJMIQgCQCAAKAI8IgJFBEAgASAKaiICQQBMDQEgAkECdCICRQ0BIAAoAogBQQAgAvwLAAwBCyAAKAKMASEGQQAhA0EAIQ8CQCACKAIEIgVBAEwEQCACKAJMIQcMAQsgAigCTCEHIAIoAlAhCSACKAKgASENIAVBAUcEQCAFQQFxIQwgBUH+////B3EhDgNAIAcgA0ECdCILaiALIA1qKgIAIAkgC2oqAgCUOAIAIAcgC0EEciILaiALIA1qKgIAIAkgC2oqAgCUOAIAIANBAmohAyAPQQJqIg8gDkcNAAsgDEUNAQsgByADQQJ0IgNqIAMgDWoqAgAgAyAJaioCAJQ4AgALIAIoAqgBIAcgAigCVBAKIAYgAigCVCIJKgIAIiQgJJQ4AgBBASEDQQEhDQJAIAVBA0gNACAFQQNrIg9BAXYiB0ECaiENAkAgB0UEQEEBIQcMAQsgB0EBakF+cSEMQQAhC0EBIQcDQCAGIAdBAnRqIg4gCSADQQJ0aiIFKgIAIiQgJJQgBSoCBCIkICSUkjgCACAOIAUqAggiJCAklCAFKgIMIiQgJJSSOAIEIAdBAmohByADQQRqIQMgC0ECaiILIAxHDQALIA9BAnENAQsgBiAHQQJ0aiAJIANBAnRqIgcqAgAiJCAklCAHKgIEIiQgJJSSOAIAIANBAmohAwsgBiANQQJ0aiAJIANBAnRqKgIAIiQgJJQ4AgBBACEFAkAgAigCACIDQQBIDQBDAACAPyACKgI4IiQgJJIgJEMAAAA/XhshJCADQQFqIgJBA3EhCSADQQNPBEAgAkF8cSEDQQAhBwNAIAYgBUECdGoiAiAkIAIqAgCU/ACyOAIAIAIgJCACKgIElPwAsjgCBCACICQgAioCCJT8ALI4AgggAiAkIAIqAgyU/ACyOAIMIAVBBGohBSAHQQRqIgcgA0cNAAsgCUUNAQtBACEDA0AgBiAFQQJ0aiICICQgAioCAJT8ALI4AgAgBUEBaiEFIANBAWoiAyAJRw0ACwsCQAJAAkACQCAAKAKMASIDKgIAIiRDAAAAAGAEQCABQQBKIgIgJCABskMoa25OlF1FcQ0BIAINAgwDCyABQQBMDQILIAFBAnQiAkUNACADQQAgAvwLAAsgACgCiAEhByABQQFHBEAgAUEBcSEFIAFBfnEhCUEAIQIDQCAHIARBAnQiBmoiDSANKgIAQ5qZGT+UIiQgAyAGaioCACImICQgJl4bOAIAIAcgBkEEciIGaiINIA0qAgBDmpkZP5QiJCADIAZqKgIAIiYgJCAmXhs4AgAgBEECaiEEIAJBAmoiAiAJRw0ACyAFRQ0CCyAHIARBAnQiAmoiBCAEKgIAQ5qZGT+UIiQgAiADaioCACImICQgJl4bOAIADAELIAAoAogBIQcLIAAoAhAgByAHIAFBAnRqEAwLQQAhAkEAIQNBACEMIAAoAkwhBQJAIAAoAgQiCUEBdCINIAAoAgAiB2siBkEATA0AIAZBA3EhDiAAKAJEIQQgACgCkAEhCyAHIA1rQXxNBEAgBkH8////B3EhHANAIAQgAkECdCIPaiALIA9qKgIAOAIAIAQgD0EEciIRaiALIBFqKgIAOAIAIAQgD0EIciIRaiALIBFqKgIAOAIAIAQgD0EMciIPaiALIA9qKgIAOAIAIAJBBGohAiAMQQRqIgwgHEcNAAsgDkUNAQsDQCAEIAJBAnQiD2ogCyAPaioCADgCACACQQFqIQIgA0EBaiIDIA5HDQALCwJAIAdBAEwNACAHQQNxIQ8gACgCRCAGQQJ0aiELQQAhA0EAIQIgB0EETwRAIAdB/P///wdxIQxBACEEA0AgCyACQQJ0aiAXIAJBAXRqLgEAsjgCACALIAJBAXIiDkECdGogFyAOQQF0ai4BALI4AgAgCyACQQJyIg5BAnRqIBcgDkEBdGouAQCyOAIAIAsgAkEDciIOQQJ0aiAXIA5BAXRqLgEAsjgCACACQQRqIQIgBEEEaiIEIAxHDQALIA9FDQELA0AgCyACQQJ0aiAXIAJBAXRqLgEAsjgCACACQQFqIQIgA0EBaiIDIA9HDQALCwJAIAZBAEwNACAGQQNxIQwgFyAHIAZrQQF0aiELIAAoApABIQ9BACEDQQAhAiAHIA1rQXxNBEAgBkH8////B3EhB0EAIQQDQCAPIAJBAnRqIAsgAkEBdGouAQCyOAIAIA8gAkEBciIGQQJ0aiALIAZBAXRqLgEAsjgCACAPIAJBAnIiBkECdGogCyAGQQF0ai4BALI4AgAgDyACQQNyIgZBAnRqIAsgBkEBdGouAQCyOAIAIAJBBGohAiAEQQRqIgQgB0cNAAsgDEUNAQsDQCAPIAJBAnRqIAsgAkEBdGouAQCyOAIAIAJBAWohAiADQQFqIgMgDEcNAAsLIAAoAkQhBwJAIAlBAEwNACAAKAJYIQZBACEEQQAhAiANQQRPBEAgDUECcSELIA1B/P///wdxIQ9BACEDA0AgByACQQJ0Ig1qIgwgDCoCACAGIA1qKgIAlDgCACAHIA1BBHIiDGoiDiAOKgIAIAYgDGoqAgCUOAIAIAcgDUEIciIMaiIOIA4qAgAgBiAMaioCAJQ4AgAgByANQQxyIg1qIgwgDCoCACAGIA1qKgIAlDgCACACQQRqIQIgA0EEaiIDIA9HDQALIAtFDQELA0AgByACQQJ0IgNqIg0gDSoCACADIAZqKgIAlDgCACACQQFqIQIgBEEBaiIEQQJHDQALCyAAKALQASAHIAAoAkgQCiAFIAAoAkgiAyoCACIkICSUOAIAAkAgCUECSA0AQQEhAiAJQQJHBEAgCUEBayICQQFxIQcgAkF+cSEGQQAhBEEBIQIDQCAFIAJBAnRqIAMgAkEDdGoiDUEEayoCACIkICSUIA0qAgAiJCAklJI4AgAgBSACQQFqIg1BAnRqIAMgDUEDdGoiDUEEayoCACIkICSUIA0qAgAiJCAklJI4AgAgAkECaiECIARBAmoiBCAGRw0ACyAHRQ0BCyAFIAJBAnRqIAMgAkEDdGoiAkEEayoCACIkICSUIAIqAgAiJCAklJI4AgALIAAoAhAgBSAFIAlBAnRqEAwgACIDKAIEIgRBAWshBiADKAJMIQIgAygCdCEHIARBA04EQEEBIQADQCAHIABBAnQiBWoiCSACIABBAWoiAEECdGoqAgBDzcxMPZQgAiAFaiIFKgIAQ83MzD2UIAkqAgBDzcxMP5QgBUEEayoCAEPNzEw9lJKSkjgCACAAIAZHDQALCyAHIAcqAgBDzcxMP5QgAioCAEPNzEw+lJI4AgAgByAGQQJ0IgBqIgUgBSoCAEPNzEw/lCAAIAJqKgIAQ83MTD6UkjgCAAJ/AkACQCADKALEASIAQQFHDQAgBEEATA0AIARBA3EhCyADKAJ4IQUgAygCfCEJQQAhACAEQQRPBEAgBEH8////B3EhD0EAIQIDQCAJIABBAnQiDWpBADYCACAFIA1qQQA2AgAgCSANQQRyIgxqQQA2AgAgBSAMakEANgIAIAkgDUEIciIMakEANgIAIAUgDGpBADYCACAJIA1BDHIiDWpBADYCACAFIA1qQQA2AgAgAEEEaiEAIAJBBGoiAiAPRw0ACyALRQ0CC0EAIQIDQCAJIABBAnQiDWpBADYCACAFIA1qQQA2AgAgAEEBaiEAIAJBAWoiAiALRw0ACwwBCyAAQeQASA0AQTIgAEHoB0kNARpBlgFBrAIgAEGQzgBJGwwBC0EPCyEAAkACQAJAAkAgACADKALMAU4EQCAEQQBMDQQgAygCfCEFIAMoAnghCSAGDQFBACEADAILQQAhACADQQA2AswBIARBAEwNAyADKAJ4IQUgAygCfCEJIAYEQCAEQQFxIQsgBEH+////B3EhD0EAIQIDQCAFIABBAnQiDWogCSANaiIMKgIAIiQgByANaiIOKgIAIiYgJCAmXRs4AgAgDCAOKgIAOAIAIAUgDUEEciINaiAJIA1qIgwqAgAiJCAHIA1qIg0qAgAiJiAkICZdGzgCACAMIA0qAgA4AgAgAEECaiEAIAJBAmoiAiAPRw0ACyALRQ0DCyAFIABBAnQiAGogACAJaiICKgIAIiQgACAHaiIAKgIAIiYgJCAmXRs4AgAgAiAAKgIAOAIADAILIARBAXEhCyAEQf7///8HcSEPQQAhAEEAIQIDQCAJIABBAnQiDWoiDCAMKgIAIiQgByANaiIMKgIAIiYgJCAmXRs4AgAgBSANaiIOIA4qAgAiJCAMKgIAIiYgJCAmXRs4AgAgCSANQQRyIg1qIgwgDCoCACIkIAcgDWoiDCoCACImICQgJl0bOAIAIAUgDWoiDSANKgIAIiQgDCoCACImICQgJl0bOAIAIABBAmohACACQQJqIgIgD0cNAAsgC0UNAQsgCSAAQQJ0IgBqIgIgAioCACIkIAAgB2oiAioCACImICQgJl0bOAIAIAAgBWoiACAAKgIAIiQgAioCACImICQgJl0bOAIACyADKAJ4IQUCQCAGRQRAQQAhAAwBCyAEQQFxIQkgBEF+cSENIAMoAoABIQZBACEAQQAhAgNAIAYgAEECdCIEaiAEIAVqKgIAIAQgB2oqAgBDzczMPpRdNgIAIAYgBEEEciIEaiAEIAVqKgIAIAQgB2oqAgBDzczMPpRdNgIAIABBAmohACACQQJqIgIgDUcNAAsgCUUNAQsgAEECdCIAIAMoAoABaiAAIAVqKgIAIAAgB2oqAgBDzczMPpRdNgIAC0EAIQYCQCABQQBMBEAgAygCXCEHDAELQwAAgD9Dj8L1PEMAAIA/IBCylSIkICS7RLgehetRuJ4/YxsiJZMhJyADKAJcIQcgAygCgAEhAgNAAkACQCACIAZBAnQiAGooAgBFBEAgAygCTCAAaioCACEkIAAgB2oqAgAhJgwBCyADKAJMIABqKgIAIiQgACAHaioCACImXUUNAQsgACAHakMAAAAAICcgJpQgJSAklJIiJCAkQwAAAABdGzgCAAsgBkEBaiIGIAFHDQALCyADKAIQIAcgByABQQJ0ahAMIAEgCmohBQJAAkACQCADKALEAUEBRgRAIAVBAEwNASAFQQNxIQkgAygCZCECQQAhAEEAIQQgBUEBa0EDTwRAIAVB/P///wdxIQ1BACEHA0AgAiAEQQJ0IgZqIAYgCGoqAgA4AgAgAiAGQQRyIgtqIAggC2oqAgA4AgAgAiAGQQhyIgtqIAggC2oqAgA4AgAgAiAGQQxyIgZqIAYgCGoqAgA4AgAgBEEEaiEEIAdBBGoiByANRw0ACyAJRQ0DCwNAIAIgBEECdCIHaiAHIAhqKgIAOAIAIARBAWohBCAAQQFqIgAgCUcNAAsMAgsgBUEASg0BCyADKAJsIQZBACENDAELIAMoAmwhBiADKAJkIQIgAygCcCEEIAMoAmAhCSADKAKIASELIAMoAlwhD0EAIQcDQCAEIAdBAnQiAGogACAIaioCACAAIA9qKgIAQwAAgD+SIAAgC2oqAgCSIAAgCWoqAgCSIiSVQwAAgL+SIiZDAADIQiAmQwAAyEJdGyImOAIAIAAgBmogACACaioCACIlICQgJZKVIicgJ5RDCtdjP5RDzczMPZIiJ0MAAAAAICYgJkMAAAAAXRuUICUgJJVDAACAPyAnk5SSIiRDAADIQiAkQwAAyEJdGzgCAEEBIQ0gB0EBaiIHIAVHDQALCyADKAKEASIJIAkqAgBDMzMzP5QgBioCAEOamZk+lJI4AgAgAUEBayECIAFBAkoEQEEBIQQDQCAJIARBAnQiAGoiByAGIARBAWoiBEECdGoqAgBDmpmZPZQgACAGaiIAQQRrKgIAQ5qZmT2UIAcqAgBDMzMzP5QgACoCAEOamRk+lJKSkjgCACACIARHDQALC0EAIQRDAAAAACEkAkAgCkEASARAQQAhBwwBCyACIQAgCkEBcUUEQCAJIAJBAnQiAGoiByAHKgIAQzMzMz+UIAAgBmoqAgBDmpmZPpSSOAIAIAEhAAtBACEHIApFDQADQCAJIABBAnQiB2oiCyALKgIAQzMzMz+UIAYgB2oqAgBDmpmZPpSSOAIAIAkgB0EEaiIHaiILIAsqAgBDMzMzP5QgBiAHaioCAEOamZk+lJI4AgAgAEECaiIAIAVHDQALIApFBEBBACEHDAELIAEhAANAICQgCSAAQQJ0aioCAJIhJEEBIQcgAEEBaiIAIAVIDQALC0MAAIA/QwAAgD9DmpkZPiAkIAMoAgyylZVDAACAP5KVQ90kZj+UQ83MzD2SIieTIAMoAjSylCAnIAMoAjiylJL8ALJD4shrPpS7EBohMSADKAJUIQsgAygCiAEhDyADKAJcIQwgAygCMLJD4shrPpS7EBohMgJAIAcEQCAxtiEkIAsgAUECdCIAaiEHIAAgD2ohCyAAIAxqIQ8gMrYhJgNAIAcgBEECdCIAaiAmIAAgD2oqAgAiJZQgACALaioCACIoICSUkrufICVDAACAP5IgKJK7n6O2OAIAIARBAWoiBCAKRw0ACyADKAJQIQcgJ4whJSADKAJkIQsgAygCaCEPIAMoAnAhDCABIQADQAJ9QwAAgD8gBiAAQQJ0IgRqIg4qAgAiJCAkQwAAgD+SlSImIAQgDGoqAgBDAACAP5KUIiQgJJIiKI4iKvwAIgpBAEgNABpEguLHmLuWwD8gJLujRAAAAAAAAPA/oLYgCkEUTw0AGkMAAIA/ICggKpMiKJMgCkECdCIKKgLACpQgKCAKKgLECpSSuyAkQxe30TiSu5+jtgshKCAEIA9qQwAAgD8gJiAolCImICZDAACAP14bIiY4AgAgBCALaiIKIAoqAgBDzcxMPpQgJiAmlEPNzEw/lCAEIAhqKgIAlJI4AgAgBCAHakQAAAAAAADwPyAOKgIAQwAAgD+SICVDAACAP0OamRk+IAQgCWoqAgCVQwAAgD+SlUPNzEw/lEOoxks+kpRDAACAP5IiJkMAAIA/ICaTlZS7ICSMuxAaokQAAAAAAADwP6CjtjgCACAAQQFqIgAgBUgNAAsMAQsgAygCUCEHCyADKAIQIAcgAUECdCIAaiAHEA0gAygCECADKAJoIgQgAGogBBANIAMoAhAgACADKAJUIgRqIAQQDSADKAJQIQAgAUEASgRAIAMoAlQhCiADKAJkIQkgAygCaCELIAMoAnAhDyADKAJsIQxBACEHA0ACfUMAAIA/IAwgB0ECdCIEaioCACIkICRDAACAP5KVIiYgBCAPaioCAEMAAIA/kpQiJCAkkiIljiIo/AAiBkEASA0AGkSC4seYu5bAPyAku6NEAAAAAAAA8D+gtiAGQRRPDQAaQwAAgD8gJSAokyIlkyAGQQJ0IgYqAsAKlCAlIAYqAsQKlJK7ICRDF7fROJK7n6O2CyEkIAAgBGoiDioCACEoIAQgC2oiBiAGKgIAIiVDAABAQJRDAACAPyAmICSUIiQgJEMAAIA/XhsiJCAkQ/p+qj6UICVeGyIkOAIAIAQgCWoiECAQKgIAQ83MTD6UICQgJJRDzcxMP5QgBCAIaioCAJSSOAIAAkAgBioCACImIAQgCmoiBCoCACIkXUUEQCAkISUgJiEkDAELIAYgJDgCACAEKgIAISULIA4gKLsgJLufoiAlu59DAACAPyAok7uioLYiJCAklDgCACAHQQFqIgcgAUcNAAsLQQAhBAJAIAMoAhQgDUVyDQAgBUEHcSEIIAVBAWtBB08EQCAFQXhxIQVBACEHA0AgACAEQQJ0aiIGQoCAgPyDgIDAPzcCGCAGQoCAgPyDgIDAPzcCECAGQoCAgPyDgIDAPzcCCCAGQoCAgPyDgIDAPzcCACAEQQhqIQQgB0EIaiIHIAVHDQALIAhFDQELQQAhBgNAIAAgBEECdGpBgICA/AM2AgAgBEEBaiEEIAZBAWoiBiAIRw0ACwsgAUEBdCEFIAMoAkghCAJAIAFBAkgNAEEBIQQgAUECRwRAIAJBAXEhCiACQX5xIQlBACEHA0AgCCAEQQN0aiIGQQRrIg0gACAEQQJ0aiILKgIAIA0qAgCUOAIAIAYgCyoCACAGKgIAlDgCACAIIARBAWoiDUEDdGoiBkEEayILIAAgDUECdGoiDSoCACALKgIAlDgCACAGIA0qAgAgBioCAJQ4AgAgBEECaiEEIAdBAmoiByAJRw0ACyAKRQ0BCyAIIARBA3RqIgdBBGsiBiAAIARBAnRqIgQqAgAgBioCAJQ4AgAgByAEKgIAIAcqAgCUOAIACyAIIAAqAgAgCCoCAJQ4AgAgCCAFQQJ0akEEayIEIAAgAkECdGoqAgAgBCoCAJQ4AgAgAygCmAEEQEMAAIA/ISQgAygCBCIAQQNOBEAgAygCpAEhAiADKAJMIQcgALMiJCAkkiEmQwAAgD8hJEECIQQCQCAAQQNHBEAgAEEBcSEJIABB/v///wdxQQRrIQ1BACEGA0AgJiAHIARBAnQiCkEEciILaioCAJQgAiALaioCAJQgJiAHIApqKgIAlCACIApqKgIAlCAkkpIhJCAEQQJqIQQgBiANRyEKIAZBAmohBiAKDQALIAlFDQELICYgByAEQQJ0IgRqKgIAlCACIARqKgIAlCAkkiEkCyAkkSEkCwJAICdDmpmZPl5FBEAgAyoCoAEhJiADKgKoASElDAELIANDAACAPyAnuyIxRLgehetRuJ4/oiAxorYiJZMiKCADKgKgAZQgJZIiJjgCoAEgAyAluyAkQ28SgzqUu0QAAAAAAAAUQBAcoiAoIAMqAqgBlLugtiIlOAKoASADKgLAASIoIAMqArABXUUNACADKALEAUEVSA0AIAMgJ0PNzMw9lCAnlEMAAIA/kiAolDgCwAELIAMqApwBISggJbsgJrtELUMc6+I2Gj+go0QAAACgmZnJvxAcIChDbxKDOpS7orYhJgJAAkACQCAnQwAAAD9eRQ0AIAMoAsQBQRVIDQAgAyoCrAEhJQwBCyADKgKsASIlICZeRQ0BCwJAICUgAyoCtAGUIiggJiAmICheGyImICUgAyoCuAGUIiVdRQ0AICQgAyoCvAFDAAAgQZRdRQ0AICUhJgsgAyADKgLAASIlIAMqArABIiggJiAmICheGyImICUgJl0bOAKsAQsCQCAAQQBMDQBBASAAQQF0IgAgAEEBTBsiAkEDcSEEQQAhB0EAIQYgAEEETgRAIAJB/P///wdxIQpBACEAA0AgCCAGQQJ0aiICIAMqAqwBIAIqAgCUOAIAIAIgAyoCrAEgAioCBJQ4AgQgAiADKgKsASACKgIIlDgCCCACIAMqAqwBIAIqAgyUOAIMIAZBBGohBiAAQQRqIgAgCkcNAAsgBEUNAQsDQCAIIAZBAnRqIgAgAyoCrAEgACoCAJQ4AgAgBkEBaiEGIAdBAWoiByAERw0ACwsgAyAkOAK8AQsgBSATayEKIAMoAtABIAggAygCRBALAkACQCADKAKYAQRAIAFBAEwNAkEBIAUgBUEBTBsiAEEDcSEIIAMoAkQhCUEAIQdDAAAAACEkQQAhBAJAIAVBBE4EQCAAQfz///8HcSENQQAhAgNAIAkgBEECdGoiBioCDIsiJiAGKgIIiyIlIAYqAgSLIiggBioCAIsiKiAkICQgKl0bIiQgJCAoXRsiJCAkICVdGyIkICQgJl0bISQgBEEEaiEEIAJBBGoiAiANRw0ACyAIRQ0BCwNAIAkgBEECdGoqAgCLIiYgJCAkICZdGyEkIARBAWohBCAHQQFqIgcgCEcNAAsLICRDAMDaRl5FDQEgAEEDcSEEQwDA2kYgJJUhJCADKAJEIQhBACEHQQAhBiAFQQROBEAgAEH8////B3EhCUEAIQIDQCAIIAZBAnRqIgAgJCAAKgIAlDgCACAAICQgACoCBJQ4AgQgACAkIAAqAgiUOAIIIAAgJCAAKgIMlDgCDCAGQQRqIQYgAkEEaiICIAlHDQALIARFDQILA0AgCCAGQQJ0aiIAICQgACoCAJQ4AgAgBkEBaiEGIAdBAWoiByAERw0ACwwBCyABQQBMDQELQQEgBSAFQQFMGyIHQQNxIQkgAygCWCEAIAMoAkQhBkEAIQJBACEEIAVBBE4EQCAHQfz///8HcSENQQAhBwNAIAYgBEECdCIIaiILIAsqAgAgACAIaioCAJQ4AgAgBiAIQQRyIgtqIg8gDyoCACAAIAtqKgIAlDgCACAGIAhBCHIiC2oiDyAPKgIAIAAgC2oqAgCUOAIAIAYgCEEMciIIaiILIAsqAgAgACAIaioCAJQ4AgAgBEEEaiEEIAdBBGoiByANRw0ACyAJRQ0BCwNAIAYgBEECdCIHaiIIIAgqAgAgACAHaioCAJQ4AgAgBEEBaiEEIAJBAWoiAiAJRw0ACwsgCkEASgRAIAMoAkQhACADKAKUASECQQAhBANAIBcgBEEBdGoCf0GAgAIgAiAEQQJ0IgdqKgIAIAAgB2oqAgCSIiRDAP//xl0NABpB//8BICRDAP3/Rl4NABogJLtEAAAAAAAA4D+gnPwCCzsBACAEQQFqIgQgCkcNAAsLAkAgEyAKayICQQBMDQAgAkEDcSEGIAMoAkQhB0EAIQBBACEEIAEgE2tBAXRBfE0EQCACQfz///8HcSEIQQAhAgNAIBcgBCAKaiIBQQF0aiAHIAFBAnRqKgIA/AA7AQAgFyABQQFqIglBAXRqIAcgCUECdGoqAgD8ADsBACAXIAFBAmoiCUEBdGogByAJQQJ0aioCAPwAOwEAIBcgAUEDaiIBQQF0aiAHIAFBAnRqKgIA/AA7AQAgBEEEaiEEIAJBBGoiAiAIRw0ACyAGRQ0BCwNAIBcgBCAKaiIBQQF0aiAHIAFBAnRqKgIA/AA7AQAgBEEBaiEEIABBAWoiACAGRw0ACwsCQCAKQQBMDQAgCkEDcSEXIAMoAkQgAygCAEECdGohASADKAKUASECQQAhAEEAIQQgEyAFa0F8TQRAIApB/P///wdxIQVBACEHA0AgAiAEQQJ0IgZqIAEgBmoqAgA4AgAgAiAGQQRyIghqIAEgCGoqAgA4AgAgAiAGQQhyIghqIAEgCGoqAgA4AgAgAiAGQQxyIgZqIAEgBmoqAgA4AgAgBEEEaiEEIAdBBGoiByAFRw0ACyAXRQ0BCwNAIAIgBEECdCIHaiABIAdqKgIAOAIAIARBAWohBCAAQQFqIgAgF0cNAAsLIAMgJzgCQCADKAIYBEAgAwJ/AkAgJyADKgIoXkUEQCADKALIAUUNASAnIAMqAixeRQ0BC0EBDAELQQALNgLIAQsLugMBAn8gACgCBCIBKAJEECwgASgCSBAsIAEoAkwQLCABKAJQECwgASgCVBAsIAEoAlgQLCABKAJcECwgASgCYBAsIAEoAmQQLCABKAJoECwgASgCbBAsIAEoAnAQLCABKAKkARAsIAEoAogBECwgASgCjAEQLCABKAJ0ECwgASgCeBAsIAEoAnwQLCABKAKAARAsIAEoAoQBECwgASgCkAEQLCABKAKUARAsIAEoAtABEAkgASgCECICKAIAECwgAigCBBAsIAIoAggQLCACKAIMECwgAigCEBAsIAIQLCABECwgACgCACIBKAKoARAJIAEoAjwQLCABKAJAECwgASgCSBAsIAEoAkwQLCABKAJQECwgASgCiAEQLCABKAKEARAsIAEoAowBECwgASgClAEQLCABKAKQARAsIAEoAkQQLCABKAJUECwgASgCWBAsIAEoAmAQLCABKAJkECwgASgCXBAsIAEoAngQLCABKAJ8ECwgASgCoAEQLCABKAKkARAsIAEoAoABECwgASgCrAEQLCABKAKwARAsIAEoArQBECwgASgCwAEQLCABKALEARAsIAEQLCAAECwLxwUDEn8DfQF8QQwQLSIPIgEgACIJNgIAIAEgAEEMbBAtIgs2AgQgAUGAARAtIgY2AggCQCAAQQFGDQAgBkEMaiEMIAZBCGohB0F/IQAgCSEBAn8DQCAAQQFqIQpBACEFAn8gAEECTARAIApBAnRBoAtqKAIADAELIARBAmoLIgRBAkYEQCACIQADQCAAIQMgAiAFakECdCEAIAFBAm0iCEEBdCABRwRAIAohACADIQIMAwsgBiADQQJ0akECNgIIIAMEQAJAIANBAEwNACAARQ0A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QQhyIAEgAyAFRiIBGyIDQQFBAiABGyIHIARBDGoQASIBBH9B4PkAIAE2AgBBfwVBAAsEQCADIQEMAQsDQCAGIAQoAgwiBUYNAiAFQQBIBEAgAyEBDAQLIANBCEEAIAUgAygCBCIISyIJG2oiASAFIAhBACAJG2siCCABKAIAajYCACADQQxBBCAJG2oiAyADKAIAIAhrNgIAIAYgBWshBiAAKAI8IAEiAyAHIAlrIgcgBEEMahABIgUEf0Hg+QAgBTYCAEF/BUEAC0UNAAsLIAZBf0cNAQsgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCECACDAELIABBADYCHCAAQgA3AxAgACAAKAIAQSByNgIAQQAgB0ECRg0AGiACIAEoAgRrCyEAIARBIGokACAAC08BAX8gACgCPCEDIwBBEGsiACQAIAMgASACQf8BcSAAQQhqEAIiAgR/QeD5ACACNgIAQX8FQQALIQIgACkDCCEBIABBEGokAEJ/IAEgAhsL8AICAn8BfgJAIAJFDQAgACABOgAAIAAgAmoiA0EBayABOgAAIAJBA0kNACAAIAE6AAIgACABOgABIANBA2sgAToAACADQQJrIAE6AAAgAkEHSQ0AIAAgAToAAyADQQRrIAE6AAAgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgA2AgAgAyACIARrQXxxIgJqIgFBBGsgADYCACACQQlJDQAgAyAANgIIIAMgADYCBCABQQhrIAA2AgAgAUEMayAANgIAIAJBGUkNACADIAA2AhggAyAANgIUIAMgADYCECADIAA2AgwgAUEQayAANgIAIAFBFGsgADYCACABQRhrIAA2AgAgAUEcayAANgIAIAIgA0EEcUEYciIBayICQSBJDQAgAK1CgYCAgBB+IQUgASADaiEBA0AgASAFNwMYIAEgBTcDECABIAU3AwggASAFNwMAIAFBIGohASACQSBrIgJBH0sNAAsLC1kBAX8gACAAKAJIIgFBAWsgAXI2AkggACgCACIBQQhxBEAgACABQSByNgIAQX8PCyAAQgA3AgQgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCEEEAC5wVAhN/A35BlwohASMAQUBqIgYkACAGQZcKNgI8IAZBKWohFSAGQSdqIRYgBkEoaiEP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"),t=new Uint8Array(e.length);for(let i=0;i<e.length;i++)t[i]=e.charCodeAt(i);return t}().buffer;this.aecNode=new AudioWorkletNode(i,"aec-processor",{numberOfInputs:2,numberOfOutputs:1,outputChannelCount:[1],processorOptions:{wasmBytes:A,frameMs:10,tailMs:t.tailMs??200}}),this.aecNode.port.onmessage=e=>{const t=e.data;t&&("error"===t.type?console.error("[AudioManager][AEC] worklet error:",t.error):"ready"===t.type||"erle"===t.type&&(this.lastAecErleDb=t.erleDb,this.aecDebug&&(t.erleDb.toFixed(1),(t.micE??0).toExponential(1),(t.refE??0).toExponential(1))))},this.aecMicSource.connect(this.aecNode,0,0);const n=this.outputGainNode??this.audioWorkletNode;return n&&(n.connect(this.aecNode,0,1),this.aecRefNode=n),this.aecDest=i.createMediaStreamDestination(),this.aecNode.connect(this.aecDest),this.aecDest.stream.getAudioTracks()[0]}detachAEC(){try{this.aecMicSource?.disconnect()}catch{}try{this.aecRefNode&&this.aecNode&&this.aecRefNode.disconnect(this.aecNode)}catch{}try{this.aecNode?.disconnect()}catch{}this.aecMicSource=null,this.aecNode=null,this.aecDest=null,this.aecRefNode=null}getAECProcessorCode(){return"\nconst WASM_IMPORTS = {\n wasi_snapshot_preview1: { fd_close: () => 0, fd_write: () => 0, fd_seek: () => 0 },\n env: { emscripten_notify_memory_growth: () => {} },\n};\nconst clamp16 = (v) => (v > 32767 ? 32767 : v < -32768 ? -32768 : v | 0);\nclass AECProcessor extends AudioWorkletProcessor {\n constructor(options) {\n super();\n const opt = options.processorOptions || {};\n const frameMs = opt.frameMs || 10;\n const tailMs = opt.tailMs || 100;\n this.ready = false;\n this.frameSize = Math.round((sampleRate * frameMs) / 1000);\n this.filter = Math.round((sampleRate * tailMs) / 1000);\n this.micBuf = new Float32Array(this.frameSize);\n this.refBuf = new Float32Array(this.frameSize);\n this.fill = 0;\n this.outQueue = [];\n this.outChunk = null;\n this.outPos = 0;\n this.eIn = 0; this.eOut = 0; this.eRef = 0; this.reportCounter = 0;\n WebAssembly.instantiate(opt.wasmBytes, WASM_IMPORTS).then((r) => {\n const ex = r.instance.exports;\n if (typeof ex._initialize === 'function') ex._initialize();\n this.ex = ex;\n this.handle = ex.aec_create(sampleRate, this.frameSize, this.filter);\n const nb = this.frameSize * 2;\n this.pMic = ex.malloc(nb); this.pRef = ex.malloc(nb); this.pOut = ex.malloc(nb);\n this.ready = true;\n this.port.postMessage({ type: 'ready', sampleRate: sampleRate, frameSize: this.frameSize, filter: this.filter });\n }).catch((e) => this.port.postMessage({ type: 'error', error: String((e && e.stack) || e) }));\n }\n _processFrame() {\n const ex = this.ex, fs = this.frameSize;\n let h = new Int16Array(ex.memory.buffer);\n const mb = this.pMic >> 1, rb = this.pRef >> 1;\n for (let i = 0; i < fs; i++) { h[mb + i] = clamp16(this.micBuf[i] * 32768); h[rb + i] = clamp16(this.refBuf[i] * 32768); }\n ex.aec_process(this.handle, this.pMic, this.pRef, this.pOut);\n h = new Int16Array(ex.memory.buffer);\n const ob = this.pOut >> 1, chunk = new Float32Array(fs);\n for (let i = 0; i < fs; i++) chunk[i] = h[ob + i] / 32768;\n this.outQueue.push(chunk);\n }\n _nextOut() {\n if (!this.outChunk || this.outPos >= this.outChunk.length) { this.outChunk = this.outQueue.shift() || null; this.outPos = 0; }\n if (!this.outChunk) return 0;\n return this.outChunk[this.outPos++];\n }\n process(inputs, outputs) {\n const mic = inputs[0] && inputs[0][0];\n const ref = inputs[1] && inputs[1][0];\n const out = outputs[0] && outputs[0][0];\n if (!out) return true;\n if (!this.ready || !mic) { if (mic) out.set(mic); return true; }\n for (let i = 0; i < mic.length; i++) {\n this.micBuf[this.fill] = mic[i];\n this.refBuf[this.fill] = ref ? ref[i] : 0;\n this.fill++;\n if (this.fill === this.frameSize) { this._processFrame(); this.fill = 0; }\n }\n for (let i = 0; i < out.length; i++) { const o = this._nextOut(); out[i] = o; this.eIn += mic[i] * mic[i]; this.eOut += o * o; this.eRef += ref ? ref[i] * ref[i] : 0; }\n if ((this.reportCounter += mic.length) >= sampleRate) {\n this.port.postMessage({ type: 'erle', erleDb: 10 * Math.log10((this.eIn + 1e-9) / (this.eOut + 1e-9)), micE: this.eIn, refE: this.eRef });\n this.eIn = 0; this.eOut = 0; this.eRef = 0; this.reportCounter = 0;\n }\n return true;\n }\n}\nregisterProcessor('aec-processor', AECProcessor);\n"}createProcessorBlobUrl(){const e=this.getProcessorCode(),t=new Blob([e],{type:"application/javascript"});return this.processorBlobUrl&&URL.revokeObjectURL(this.processorBlobUrl),this.processorBlobUrl=URL.createObjectURL(t),this.processorBlobUrl}getProcessorCode(){return`\n// AudioWorklet processor for PCM audio playback\n// 使用环形缓冲区(Ring Buffer)实现,避免 GC 卡顿\nconst outputSampleRate = ${this.audioContext?.sampleRate||this.config.sampleRate||24e3}; // AudioContext 实际采样率\nconst inputSampleRate = ${this.config.sampleRate||24e3}; // TTS 数据采样率\nconst initialMinBufferMs = ${this.jitterConfig.initialBuffer};\nconst firstPlaybackBufferMs = ${this.workletConfig.firstPlaybackBufferMs};\nconst maxWaitForData = ${this.workletConfig.maxWaitForDataSec};\n\n// 是否需要重采样\nconst needResample = outputSampleRate !== inputSampleRate;\nconst resampleRatio = needResample ? inputSampleRate / outputSampleRate : 1.0;\n\nclass PCMAudioProcessor extends AudioWorkletProcessor {\n constructor() {\n super();\n\n // ========== 环形缓冲区(Ring Buffer)==========\n // 预分配固定大小的 Float32Array,避免运行时内存分配和 GC\n // 容量需要足够大以容纳完整的 TTS 响应:gRPC 传输速度 > 实时播放速度,\n // 长回复(30秒+)的音频数据会在短时间内全部到达并缓存\n const maxBufferSeconds = 60;\n this.bufferCapacity = outputSampleRate * maxBufferSeconds;\n this.ringBuffer = new Float32Array(this.bufferCapacity);\n this.writeIndex = 0; // 写入位置\n this.readIndex = 0; // 读取位置\n this.availableSamples = 0; // 可用样本数\n\n // ========== 重采样相关 ==========\n this.resampleBuffer = null; // 重采样临时缓冲区\n this.lastInputSample = 0; // 上一个输入样本(用于插值)\n this.resamplePhase = 0; // 重采样相位(跨 chunk 的小数部分)\n\n // ========== Jitter Buffer 配置 ==========\n this.minBufferSize = Math.floor(outputSampleRate * (initialMinBufferMs / 1000));\n this.lowBufferThreshold = Math.floor(this.minBufferSize * 0.5);\n this.firstPlaybackBuffer = Math.floor(outputSampleRate * (firstPlaybackBufferMs / 1000));\n this.hasStartedFirstPlayback = false;\n\n // ========== 播放状态 ==========\n this.isPlaying = false;\n this.shouldStop = false;\n this.streamEnded = false;\n this.bufferEmptyTime = 0;\n this.maxWaitForData = maxWaitForData;\n\n // ========== 统计信息 ==========\n this.underrunCount = 0;\n this.consecutiveUnderruns = 0;\n this.lastLowBufferWarning = 0;\n this.totalSamplesWritten = 0;\n this.totalSamplesRead = 0;\n\n this.port.onmessage = (event) => {\n this.handleMessage(event.data);\n };\n\n // 日志:初始化信息\n this.port.postMessage({\n type: 'init-info',\n payload: {\n outputSampleRate,\n inputSampleRate,\n needResample,\n resampleRatio,\n bufferCapacity: this.bufferCapacity\n }\n });\n }\n\n handleMessage(data) {\n const { type, payload } = data;\n\n switch (type) {\n case 'audio-data':\n this.addAudioData(payload, true);\n break;\n case 'append-audio-data':\n this.addAudioData(payload, false);\n break;\n case 'append-float32-data':\n // P1-4: 主线程已完成 Int16→Float32 转换,只需重采样\n this.addFloat32Data(payload);\n break;\n case 'append-resampled-data':\n // 主线程已完成高质量重采样,直接写入缓冲区\n this.addResampledData(payload);\n break;\n case 'play':\n this.startPlayback();\n break;\n case 'stop':\n this.stopPlayback();\n break;\n case 'clear':\n this.clearBuffer();\n break;\n case 'get-stats':\n this.sendStats();\n break;\n case 'stream-ended':\n this.streamEnded = true;\n break;\n case 'stream-started':\n this.streamEnded = false;\n this.bufferEmptyTime = 0;\n this.hasStartedFirstPlayback = false;\n break;\n case 'update-min-buffer':\n const newMinBuffer = payload.minBufferSize;\n if (newMinBuffer > 0 && newMinBuffer !== this.minBufferSize) {\n this.minBufferSize = newMinBuffer;\n this.lowBufferThreshold = Math.floor(newMinBuffer * 0.5);\n }\n break;\n case 'update-first-playback-buffer':\n const newFirstPlaybackBuffer = payload.firstPlaybackBuffer;\n if (newFirstPlaybackBuffer > 0) {\n this.firstPlaybackBuffer = newFirstPlaybackBuffer;\n }\n break;\n }\n }\n\n // 状态保持型线性插值重采样(正确处理 chunk 边界)\n // 支持任意采样率比率(如 24000→48000, 24000→44100 等)\n // 关键:使用 lastInputSample 和 resamplePhase 确保 chunk 之间的连续性\n resample(inputData) {\n if (!needResample) {\n if (inputData.length > 0) {\n this.lastInputSample = inputData[inputData.length - 1];\n }\n return inputData;\n }\n\n const inputLength = inputData.length;\n if (inputLength === 0) return inputData;\n\n // 使用实际的采样率比率计算输出长度\n // resampleRatio = inputSampleRate / outputSampleRate(如 24000/48000 = 0.5)\n // outputLength = inputLength / resampleRatio = inputLength * (outputSampleRate / inputSampleRate)\n const outputLength = Math.ceil(inputLength / resampleRatio);\n\n // 复用或创建重采样缓冲区\n if (!this.resampleBuffer || this.resampleBuffer.length < outputLength) {\n this.resampleBuffer = new Float32Array(outputLength);\n }\n\n // 状态保持型线性插值重采样:\n // 对于每个输出样本,计算其在输入序列中的位置,然后线性插值\n // resamplePhase 保存跨 chunk 的小数部分,确保边界连续\n let inputPos = this.resamplePhase || 0; // 从上次的位置继续\n let outputIdx = 0;\n\n while (outputIdx < outputLength && inputPos < inputLength) {\n const intPart = Math.floor(inputPos);\n const fracPart = inputPos - intPart;\n\n // 获取插值所需的两个样本\n const sample0 = (intPart === 0 && fracPart < 0.0001)\n ? this.lastInputSample // chunk 边界:使用上一个 chunk 的最后一个样本\n : (intPart > 0 ? inputData[intPart - 1] : this.lastInputSample);\n const sample1 = intPart < inputLength ? inputData[intPart] : inputData[inputLength - 1];\n\n // 线性插值\n this.resampleBuffer[outputIdx] = sample0 + (sample1 - sample0) * fracPart;\n\n outputIdx++;\n inputPos += resampleRatio; // 按比率前进(如 0.5 表示每输出 1 个样本消耗 0.5 个输入样本)\n }\n\n // 保存状态供下一个 chunk 使用\n this.lastInputSample = inputData[inputLength - 1];\n this.resamplePhase = inputPos - inputLength; // 保存小数部分\n\n return this.resampleBuffer.subarray(0, outputIdx);\n }\n\n addAudioData(pcmData, replaceBuffer = false) {\n // 1. 转换 Int16 PCM 到 Float32\n let audioData;\n if (pcmData instanceof ArrayBuffer) {\n const int16Array = new Int16Array(pcmData);\n audioData = new Float32Array(int16Array.length);\n for (let i = 0; i < int16Array.length; i++) {\n audioData[i] = int16Array[i] / 32768.0;\n }\n } else {\n audioData = new Float32Array(pcmData);\n }\n\n // 2. 重采样(如果需要)\n const processedData = this.resample(audioData);\n const length = processedData.length;\n\n // 3. 写入环形缓冲区\n if (replaceBuffer) {\n // 替换模式:清空缓冲区\n this.writeIndex = 0;\n this.readIndex = 0;\n this.availableSamples = 0;\n }\n\n // 检查是否有足够空间\n const freeSpace = this.bufferCapacity - this.availableSamples;\n if (length > freeSpace) {\n // 缓冲区溢出,丢弃最旧的数据\n const overflow = length - freeSpace;\n this.readIndex = (this.readIndex + overflow) % this.bufferCapacity;\n this.availableSamples -= overflow;\n // 通知主线程\n this.port.postMessage({\n type: 'buffer-overflow',\n payload: { droppedSamples: overflow }\n });\n }\n\n // 写入数据到环形缓冲区(使用 TypedArray.set() 批量写入,性能提升 10-100x)\n if (this.writeIndex + length <= this.bufferCapacity) {\n // 不需要环绕,直接批量写入\n this.ringBuffer.set(processedData, this.writeIndex);\n this.writeIndex += length;\n } else {\n // 需要环绕,分两段写入\n const firstPart = this.bufferCapacity - this.writeIndex;\n this.ringBuffer.set(processedData.subarray(0, firstPart), this.writeIndex);\n this.ringBuffer.set(processedData.subarray(firstPart), 0);\n this.writeIndex = length - firstPart;\n }\n this.availableSamples += length;\n this.totalSamplesWritten += length;\n\n // 自动开始播放\n const requiredBuffer = this.hasStartedFirstPlayback\n ? this.minBufferSize\n : this.firstPlaybackBuffer;\n\n if (!this.isPlaying && this.availableSamples >= requiredBuffer) {\n const isFirstPlayback = !this.hasStartedFirstPlayback;\n this.hasStartedFirstPlayback = true;\n this.startPlayback(isFirstPlayback, requiredBuffer);\n }\n\n // 重置缓冲区空时间\n if (this.isPlaying && this.bufferEmptyTime > 0) {\n this.bufferEmptyTime = 0;\n }\n }\n\n // P1-4: 添加已在主线程转换的 Float32 数据(跳过 Int16→Float32 转换,只需重采样)\n addFloat32Data(float32Buffer) {\n // 数据已经是 Float32 格式,直接从 ArrayBuffer 创建视图\n const audioData = new Float32Array(float32Buffer);\n\n // 重采样(如果需要)\n const processedData = this.resample(audioData);\n const length = processedData.length;\n\n // 检查是否有足够空间\n const freeSpace = this.bufferCapacity - this.availableSamples;\n if (length > freeSpace) {\n // 缓冲区溢出,丢弃最旧的数据\n const overflow = length - freeSpace;\n this.readIndex = (this.readIndex + overflow) % this.bufferCapacity;\n this.availableSamples -= overflow;\n // 通知主线程\n this.port.postMessage({\n type: 'buffer-overflow',\n payload: { droppedSamples: overflow }\n });\n }\n\n // 写入数据到环形缓冲区(使用 TypedArray.set() 批量写入)\n if (this.writeIndex + length <= this.bufferCapacity) {\n // 不需要环绕,直接批量写入\n this.ringBuffer.set(processedData, this.writeIndex);\n this.writeIndex += length;\n } else {\n // 需要环绕,分两段写入\n const firstPart = this.bufferCapacity - this.writeIndex;\n this.ringBuffer.set(processedData.subarray(0, firstPart), this.writeIndex);\n this.ringBuffer.set(processedData.subarray(firstPart), 0);\n this.writeIndex = length - firstPart;\n }\n this.availableSamples += length;\n this.totalSamplesWritten += length;\n\n // 自动开始播放\n const requiredBuffer = this.hasStartedFirstPlayback\n ? this.minBufferSize\n : this.firstPlaybackBuffer;\n\n if (!this.isPlaying && this.availableSamples >= requiredBuffer) {\n const isFirstPlayback = !this.hasStartedFirstPlayback;\n this.hasStartedFirstPlayback = true;\n this.startPlayback(isFirstPlayback, requiredBuffer);\n }\n\n // 重置缓冲区空时间\n if (this.isPlaying && this.bufferEmptyTime > 0) {\n this.bufferEmptyTime = 0;\n }\n }\n\n // 添加已在主线程重采样的数据(跳过重采样步骤)\n addResampledData(resampledBuffer) {\n // 数据已经是 Float32 格式,直接从 ArrayBuffer 创建视图\n const processedData = new Float32Array(resampledBuffer);\n const length = processedData.length;\n\n // 检查是否有足够空间\n const freeSpace = this.bufferCapacity - this.availableSamples;\n if (length > freeSpace) {\n // 缓冲区溢出,丢弃最旧的数据\n const overflow = length - freeSpace;\n this.readIndex = (this.readIndex + overflow) % this.bufferCapacity;\n this.availableSamples -= overflow;\n // 通知主线程\n this.port.postMessage({\n type: 'buffer-overflow',\n payload: { droppedSamples: overflow }\n });\n }\n\n // 写入数据到环形缓冲区(使用 TypedArray.set() 批量写入)\n if (this.writeIndex + length <= this.bufferCapacity) {\n // 不需要环绕,直接批量写入\n this.ringBuffer.set(processedData, this.writeIndex);\n this.writeIndex += length;\n } else {\n // 需要环绕,分两段写入\n const firstPart = this.bufferCapacity - this.writeIndex;\n this.ringBuffer.set(processedData.subarray(0, firstPart), this.writeIndex);\n this.ringBuffer.set(processedData.subarray(firstPart), 0);\n this.writeIndex = length - firstPart;\n }\n this.availableSamples += length;\n this.totalSamplesWritten += length;\n\n // 自动开始播放\n const requiredBuffer = this.hasStartedFirstPlayback\n ? this.minBufferSize\n : this.firstPlaybackBuffer;\n\n if (!this.isPlaying && this.availableSamples >= requiredBuffer) {\n const isFirstPlayback = !this.hasStartedFirstPlayback;\n this.hasStartedFirstPlayback = true;\n this.startPlayback(isFirstPlayback, requiredBuffer);\n }\n\n // 重置缓冲区空时间\n if (this.isPlaying && this.bufferEmptyTime > 0) {\n this.bufferEmptyTime = 0;\n }\n }\n\n startPlayback(isFirstPlayback = false, requiredBuffer = 0) {\n this.isPlaying = true;\n this.shouldStop = false;\n this.port.postMessage({\n type: 'playback-started',\n payload: {\n isFirstPlayback,\n requiredBufferMs: (requiredBuffer / outputSampleRate) * 1000,\n actualBufferMs: (this.availableSamples / outputSampleRate) * 1000\n }\n });\n }\n\n stopPlayback() {\n this.isPlaying = false;\n this.shouldStop = true;\n this.port.postMessage({ type: 'playback-stopped' });\n }\n\n clearBuffer() {\n // 重置环形缓冲区指针(O(1),不需要清空数组)\n this.writeIndex = 0;\n this.readIndex = 0;\n this.availableSamples = 0;\n this.isPlaying = false;\n this.shouldStop = true;\n this.hasStartedFirstPlayback = false;\n this.bufferEmptyTime = 0;\n this.lastInputSample = 0; // 重置重采样边界样本\n this.resamplePhase = 0; // 重置重采样相位\n this.port.postMessage({ type: 'buffer-cleared' });\n }\n\n sendStats() {\n const stats = {\n // 缓冲区状态\n availableSamples: this.availableSamples,\n bufferCapacity: this.bufferCapacity,\n bufferUsagePercent: ((this.availableSamples / this.bufferCapacity) * 100).toFixed(1) + '%',\n remainingDurationMs: (this.availableSamples / outputSampleRate) * 1000,\n // 播放状态\n isPlaying: this.isPlaying,\n streamEnded: this.streamEnded,\n hasStartedFirstPlayback: this.hasStartedFirstPlayback,\n // 统计信息\n underrunCount: this.underrunCount,\n consecutiveUnderruns: this.consecutiveUnderruns,\n totalSamplesWritten: this.totalSamplesWritten,\n totalSamplesRead: this.totalSamplesRead,\n // Jitter Buffer 配置\n minBufferSize: this.minBufferSize,\n minBufferMs: (this.minBufferSize / outputSampleRate) * 1000,\n firstPlaybackBufferMs: (this.firstPlaybackBuffer / outputSampleRate) * 1000,\n // 重采样信息\n needResample,\n resampleRatio,\n inputSampleRate,\n outputSampleRate\n };\n\n this.port.postMessage({ type: 'stats', payload: stats });\n }\n\n process(inputs, outputs, parameters) {\n const output = outputs[0];\n const outputChannel = output[0];\n const frameCount = outputChannel.length;\n\n // 非播放状态,输出静音\n if (!this.isPlaying || this.shouldStop) {\n outputChannel.fill(0);\n return true;\n }\n\n // 缓冲区完全为空\n if (this.availableSamples === 0) {\n outputChannel.fill(0);\n this.underrunCount++;\n this.consecutiveUnderruns++;\n\n if (this.bufferEmptyTime === 0) {\n this.bufferEmptyTime = currentTime;\n this.port.postMessage({\n type: 'buffer-empty',\n payload: {\n underrunCount: this.underrunCount,\n consecutiveUnderruns: this.consecutiveUnderruns,\n streamEnded: this.streamEnded\n }\n });\n }\n\n if (this.streamEnded) {\n this.isPlaying = false;\n this.port.postMessage({ type: 'playback-ended' });\n } else if (currentTime - this.bufferEmptyTime > this.maxWaitForData) {\n this.isPlaying = false;\n this.port.postMessage({ type: 'playback-ended' });\n }\n\n return true;\n }\n\n // 缓冲区低警告\n const now = currentTime;\n if (this.availableSamples < this.lowBufferThreshold && this.availableSamples > 0) {\n if (now - this.lastLowBufferWarning > 0.5) {\n this.lastLowBufferWarning = now;\n this.port.postMessage({\n type: 'buffer-low',\n payload: {\n remainingSamples: this.availableSamples,\n threshold: this.lowBufferThreshold\n }\n });\n }\n }\n\n // 从环形缓冲区批量读取数据(使用 TypedArray 操作,性能提升显著)\n // 重置连续 underrun 计数\n if (this.consecutiveUnderruns > 0) {\n this.consecutiveUnderruns = 0;\n }\n\n // 计算实际可读取的样本数\n const samplesToRead = Math.min(frameCount, this.availableSamples);\n\n if (samplesToRead > 0) {\n // 批量读取数据\n if (this.readIndex + samplesToRead <= this.bufferCapacity) {\n // 不需要环绕,直接批量复制\n outputChannel.set(\n this.ringBuffer.subarray(this.readIndex, this.readIndex + samplesToRead)\n );\n this.readIndex += samplesToRead;\n } else {\n // 需要环绕,分两段读取\n const firstPart = this.bufferCapacity - this.readIndex;\n outputChannel.set(\n this.ringBuffer.subarray(this.readIndex, this.bufferCapacity),\n 0\n );\n outputChannel.set(\n this.ringBuffer.subarray(0, samplesToRead - firstPart),\n firstPart\n );\n this.readIndex = samplesToRead - firstPart;\n }\n\n this.availableSamples -= samplesToRead;\n this.totalSamplesRead += samplesToRead;\n\n // 淡出处理(仅在流结束时且接近尾部)\n if (this.streamEnded) {\n const fadeThreshold = Math.floor(outputSampleRate * 0.05); // 50ms\n if (this.availableSamples < fadeThreshold) {\n // 对已读取的样本应用淡出\n const fadeStartSample = Math.max(0, samplesToRead - fadeThreshold);\n for (let i = fadeStartSample; i < samplesToRead; i++) {\n const fadeGain = (samplesToRead - i) / fadeThreshold;\n outputChannel[i] *= fadeGain;\n }\n }\n }\n }\n\n // 如果读取的样本不够,填充静音并记录 underrun\n if (samplesToRead < frameCount) {\n // 填充剩余部分为静音\n outputChannel.fill(0, samplesToRead);\n\n // 流已结束时,尾帧不足属于正常情况,不计为 underrun\n if (!this.streamEnded) {\n this.underrunCount++;\n this.consecutiveUnderruns++;\n\n if (now - this.lastLowBufferWarning > 0.5) {\n this.lastLowBufferWarning = now;\n this.port.postMessage({\n type: 'buffer-empty',\n payload: {\n underrunCount: this.underrunCount,\n consecutiveUnderruns: this.consecutiveUnderruns,\n streamEnded: this.streamEnded\n }\n });\n }\n }\n }\n\n // 检查是否应该结束播放\n if (this.availableSamples === 0) {\n if (this.streamEnded) {\n this.isPlaying = false;\n this.port.postMessage({ type: 'playback-ended' });\n } else {\n if (this.bufferEmptyTime === 0) {\n this.bufferEmptyTime = currentTime;\n }\n if (currentTime - this.bufferEmptyTime > this.maxWaitForData) {\n this.isPlaying = false;\n this.port.postMessage({ type: 'playback-ended' });\n }\n }\n } else {\n this.bufferEmptyTime = 0;\n }\n\n return true;\n }\n}\n\nregisterProcessor('pcm-audio-processor', PCMAudioProcessor);\n `}}const qg=8,Kg=10,Hg=0,Wg=300,Yg=3,zg=0,jg=new Array(52).fill(0);class Vg extends t{blendShapes=[];audioBuffer=[];audioBufferReadIndex=0;static AUDIO_BUFFER_CLEANUP_THRESHOLD=100;get unreadAudioCount(){return this.audioBuffer.length-this.audioBufferReadIndex}playInfo={shapes:[],audios:[],duration:0,rate:16e3,content:""};fps=30;isPlaying=!1;isInited=!1;isIntervalStarted=!1;time=0;idx=0;playShapeFn=(e,t)=>{};lastBlendShapeLength=0;lastBlendShape=[];lastTimedFrameAt=0;lastShapeReceivedAt=0;isTransitioningToIdle=!1;transitionProgress=0;static TRANSITION_DURATION_MS=200;static TRANSITION_FRAMES=6;static MAX_SYNC_DRIFT_MS=500;static END_GRACE_MS=250;static REBASE_COOLDOWN_MS=500;lastRebaseAt=0;audioManager;timerId=null;callbackMap=new Map;isAudioEnded=!1;audioStreamEndedTime=0;static DELAYED_PACKET_THRESHOLD_MS=500;waitingForAudio=!1;isAudioMuted=!1;isAppendingAudio=!1;isDestroyed=!1;totalAudioBytesReceived=0;totalBlendShapesReceived=0;actualFps=30;playbackStartTime=0;framesPlayedSinceStart=0;useAudioOffsetSync=!1;timedBlendShapes=[];firstAudioOffset=0;lastPlayedOffset=-1;totalWaitTime=0;waitStartTime=0;audioPlaybackStartTime=0;isAudioPlaybackStarted=!1;firstAudioDataTime=0;isFirstAudioDataReceived=!1;externalAudioTimeProvider=null;playAudioThroughAudioManager=!0;hasReceivedRealShape=!1;usingDefaultShape=!1;defaultShapeFrameCount=0;planBDelayTimer=null;static PLAN_B_DELAY_MS=100;quickStartMode=!1;constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;super(),this.playShapeFn=t,this.fps=e.fps||30,this.actualFps=this.fps,this.time=Math.floor(1e3/this.fps)-1,this.audioManager=new Jg({}),this.audioManager.initialize(),this.audioManager.onPlaybackStarted((()=>{this.isAudioPlaybackStarted?(this.audioPlaybackStartTime,(performance.now()-this.audioPlaybackStartTime).toFixed(0)):(this.audioPlaybackStartTime=performance.now(),this.isAudioPlaybackStarted=!0,this.audioPlaybackStartTime,this.playbackStartTime,(this.audioPlaybackStartTime-this.playbackStartTime).toFixed(0),this.emit("audio-playback-started"))})),this.audioManager.onPlaybackEnded((()=>{this.isPlaying&&(this.isAudioEnded,this.isPlaying,this.playAudioThroughAudioManager,this.playAudioThroughAudioManager&&this.isAudioEnded?this.finishPlayback():this.playAudioThroughAudioManager&&this.isAudioEnded)})),this.audioManager.onBufferLow((e=>{this.audioBuffer.length>0&&(this.audioBuffer.length,this.isAppendingAudio||(this.isAppendingAudio=!0,this.appendAudio().finally((()=>{this.isAppendingAudio=!1}))))}))}checkStartPlay(){if(this.isPlaying)return!1;if(this.isInited)return!0;const e=this.useAudioOffsetSync?this.timedBlendShapes.length:this.blendShapes.length,t=this.audioBuffer.length;if(this.quickStartMode){return!(t<1)}if(this.useAudioOffsetSync){const i=this.externalAudioTimeProvider?0:qg,A=this.externalAudioTimeProvider?zg:Hg;return!(t<i||e<A)}return!(t<qg||e<Kg)}startIntervalFPS(e){let t=performance.now();const i=()=>{const A=performance.now()-t,n=Math.floor(1e3/this.actualFps)-1;t+=n,this.timerId=setTimeout(i,Math.max(0,n-A));try{e(this.time)}catch(e){console.error(e)}};i()}addShapes(e,t){if(!this.isDestroyed&&(void 0!==t?(this.useAudioOffsetSync=!0,e.forEach((e=>{0!==e.length&&(0===this.totalBlendShapesReceived&&(this.firstAudioOffset=t),this.timedBlendShapes.push({audioOffset:t,blendShape:e}),this.playInfo.shapes.push(e),this.totalBlendShapesReceived++,this.lastShapeReceivedAt=performance.now(),this.hasReceivedRealShape||(this.hasReceivedRealShape=!0,this.usingDefaultShape&&(this.defaultShapeFrameCount,this.usingDefaultShape=!1)))})),this.isTransitioningToIdle&&(this.isTransitioningToIdle=!1,this.transitionProgress=0)):e.forEach((e=>{this.blendShapes.push(e),0!==e.length&&(this.playInfo.shapes.push(e),this.totalBlendShapesReceived++)})),this.checkStartPlay()&&!this.isIntervalStarted)){this.planBDelayTimer&&(clearTimeout(this.planBDelayTimer),this.planBDelayTimer=null),this.isIntervalStarted=!0,this.playbackStartTime=performance.now(),this.emit("bs-startplay");this.useAudioOffsetSync?this.timedBlendShapes.length:this.blendShapes.length;this.audioBuffer.length,this.useAudioOffsetSync,this.useAudioOffsetSync,this.startIntervalFPS((()=>{this.play()}))}}addBinaryAudio(e){if(!this.isDestroyed){if(this.isAudioEnded&&this.isInited){const e=Date.now()-this.audioStreamEndedTime;if(e<Vg.DELAYED_PACKET_THRESHOLD_MS)return;this.autoResetForNewTTS()}if(this.isFirstAudioDataReceived||(this.firstAudioDataTime=performance.now(),this.isFirstAudioDataReceived=!0,this.firstAudioDataTime),this.audioBuffer.push(e),this.totalAudioBytesReceived+=e.byteLength,this.totalAudioBytesReceived===e.byteLength&&(this.useAudioOffsetSync?this.timedBlendShapes.length:this.blendShapes.length,e.byteLength,this.useAudioOffsetSync),this.playAudioThroughAudioManager&&this.isPlaying&&this.unreadAudioCount>0&&(this.isAppendingAudio||(this.isAppendingAudio=!0,this.appendAudio().finally((()=>{this.isAppendingAudio=!1})))),this.waitingForAudio&&this.unreadAudioCount>=Yg&&this.unreadAudioCount,this.checkStartPlay()&&!this.isIntervalStarted&&!this.planBDelayTimer){if(this.timedBlendShapes.length>0)return void this.startPlaybackPlanA("audio-arrival");if(this.quickStartMode)return void this.startPlaybackPlanB();this.audioBuffer.length,this.planBDelayTimer=setTimeout((()=>{this.planBDelayTimer=null,this.timedBlendShapes.length>0?this.startPlaybackPlanA("delayed"):this.isIntervalStarted||this.startPlaybackPlanB()}),Vg.PLAN_B_DELAY_MS)}}}startPlaybackPlanA(e){if(this.isIntervalStarted)return;this.isIntervalStarted=!0,this.playbackStartTime=performance.now(),this.useAudioOffsetSync=!0,this.emit("bs-startplay");this.timedBlendShapes.length;this.audioBuffer.length,this.hasReceivedRealShape,this.startIntervalFPS((()=>{this.play()}))}startPlaybackPlanB(){this.isIntervalStarted||(this.isIntervalStarted=!0,this.playbackStartTime=performance.now(),this.useAudioOffsetSync=!0,this.audioManager.setFirstPlaybackBuffer(400),this.emit("bs-startplay"),this.audioBuffer.length,this.timedBlendShapes.length,this.hasReceivedRealShape,this.startIntervalFPS((()=>{this.play()})))}markAudioStreamEnded(){this.isAudioEnded=!0,this.audioStreamEndedTime=Date.now(),this.audioManager.notifyStreamEnded();const e=this.playInfo.rate,t=this.totalAudioBytesReceived/(2*e);if(t>0&&this.totalBlendShapesReceived>0){const e=this.totalBlendShapesReceived/t;this.actualFps=Math.max(15,Math.min(120,e)),this.totalAudioBytesReceived,t.toFixed(2),this.totalBlendShapesReceived,e.toFixed(1),this.actualFps.toFixed(1),this.blendShapes.length}}resetSyncState(){this.isAudioEnded=!1,this.audioStreamEndedTime=0,this.audioPlaybackStartTime=0,this.isAudioPlaybackStarted=!1,this.playbackStartTime=0,this.firstAudioDataTime=0,this.isFirstAudioDataReceived=!1,this.firstAudioOffset=0,this.lastPlayedOffset=-1,this.useAudioOffsetSync=!1,this.totalAudioBytesReceived=0,this.totalBlendShapesReceived=0,this.totalWaitTime=0,this.waitStartTime=0,this.lastRebaseAt=0,this.hasReceivedRealShape=!1,this.usingDefaultShape=!1,this.defaultShapeFrameCount=0}async clear(){const e=this.isPlaying,t=this.lastBlendShapeLength>0;if(this.isPlaying=!1,this.isIntervalStarted=!1,this.blendShapes=[],this.audioBuffer=[],this.audioBufferReadIndex=0,this.idx=0,this.isInited=!1,this.waitingForAudio=!1,this.isAppendingAudio=!1,this.lastShapeReceivedAt=0,this.resetSyncState(),this.actualFps=this.fps,this.framesPlayedSinceStart=0,this.timedBlendShapes=[],this.isTransitioningToIdle=!1,this.transitionProgress=0,this.externalAudioTimeProvider=null,this.playInfo={shapes:[],audios:[],duration:0,rate:16e3,content:""},this.timerId&&(clearTimeout(this.timerId),this.timerId=null),this.planBDelayTimer&&(clearTimeout(this.planBDelayTimer),this.planBDelayTimer=null),await this.audioManager.stopPlayback(),await this.audioManager.clearBuffer(),t){const e=new Array(this.lastBlendShapeLength).fill(0);this.playShapeFn(e,this.idx++)}this.lastBlendShapeLength=0,this.lastBlendShape=[],e&&this.emit("playend")}async appendAudio(){let e=0;for(;this.audioBufferReadIndex<this.audioBuffer.length&&e<10;){const t=this.audioBuffer[this.audioBufferReadIndex++];await this.audioManager.appendAudio(t),e++}if(this.audioBufferReadIndex>=Vg.AUDIO_BUFFER_CLEANUP_THRESHOLD){const e=this.audioBufferReadIndex;"undefined"!=typeof requestIdleCallback?requestIdleCallback((()=>{this.audioBufferReadIndex>=e&&(this.audioBuffer=this.audioBuffer.slice(e),this.audioBufferReadIndex-=e)}),{timeout:100}):setTimeout((()=>{this.audioBufferReadIndex>=e&&(this.audioBuffer=this.audioBuffer.slice(e),this.audioBufferReadIndex-=e)}),0)}this.unreadAudioCount>0&&setTimeout((()=>{this.isAppendingAudio||(this.isAppendingAudio=!0,this.appendAudio().finally((()=>{this.isAppendingAudio=!1})))}),0)}async play(){if(this.isPlaying=!0,this.isTransitioningToIdle)return void this.playTransitionFrame();const e=this.useAudioOffsetSync?this.timedBlendShapes.length:this.blendShapes.length;if(0===e){if(!this.useAudioOffsetSync||this.isAudioEnded){if(this.useAudioOffsetSync&&this.isAudioEnded){const e=performance.now();if(this.lastShapeReceivedAt>0&&e-this.lastShapeReceivedAt<Vg.END_GRACE_MS)return;return void this.finishPlayback()}return void this.finishPlayback()}!this.usingDefaultShape&&this.isInited&&(this.usingDefaultShape=!0,this.hasReceivedRealShape&&this.lastBlendShape.length),this.usingDefaultShape&&(this.defaultShapeFrameCount++,this.hasReceivedRealShape&&this.lastBlendShape.length>0?this.playShapeFn([...this.lastBlendShape],this.idx++):(this.playShapeFn([...jg],this.idx++),this.lastBlendShapeLength=jg.length))}if(0===this.unreadAudioCount&&!this.isAudioEnded&&this.isInited)if(this.playAudioThroughAudioManager)this.waitingForAudio=!1;else{if(!this.useAudioOffsetSync)return void(this.waitingForAudio||(this.isAudioEnded,this.waitingForAudio=!0,this.waitStartTime=performance.now()));if(this.externalAudioTimeProvider)this.waitingForAudio=!1;else{this.waitingForAudio||(this.waitingForAudio=!0,this.waitStartTime=performance.now());const e=performance.now()-this.waitStartTime,t=Wg;if(e<t)return;e<t+50&&e.toFixed(0)}}if(this.waitingForAudio){const e=Yg;if(!(this.unreadAudioCount>=e||this.isAudioEnded))return;{const e=performance.now()-this.waitStartTime;this.playAudioThroughAudioManager||(this.totalWaitTime+=e),e.toFixed(0),this.totalWaitTime.toFixed(0),this.audioBuffer.length,this.playAudioThroughAudioManager,this.waitingForAudio=!1}}const t=this.isInited;this.isInited=!0;if(this.audioBufferReadIndex<this.audioBuffer.length&&(!this.externalAudioTimeProvider||this.playAudioThroughAudioManager)){if(!t){const e=this.audioBuffer[this.audioBufferReadIndex++];await this.audioManager.playAudio(e),this.emit("playstart")}this.isAppendingAudio||(this.isAppendingAudio=!0,this.appendAudio().finally((()=>{this.isAppendingAudio=!1})))}if(this.useAudioOffsetSync)this.playTimedBlendShape();else for(;this.blendShapes.length>0;){const[e]=this.blendShapes.splice(0,1);if(!e||1!==e.length){e&&(this.lastBlendShapeLength=e.length,this.lastBlendShape=[...e],this.playShapeFn(e,this.idx++));break}this.invokeCallback(e[0].toString())}}startMouthCloseTransition(){return this.finishPlayback(),0}findAndPlayFrame(e,t,i){let A=null,n=0;for(let t=0;t<this.timedBlendShapes.length;t++){const i=this.timedBlendShapes[t];if(!(i.audioOffset<=e))break;A=i,n=t+1}A&&A.audioOffset!==this.lastPlayedOffset&&(this.idx%30==0&&(e.toFixed(0),A.audioOffset,this.timedBlendShapes.length,this.idx),this.lastPlayedOffset=A.audioOffset,this.lastBlendShapeLength=A.blendShape.length,this.lastBlendShape=[...A.blendShape],this.playShapeFn(A.blendShape,this.idx++),this.lastTimedFrameAt=performance.now(),n>0&&this.timedBlendShapes.splice(0,n))}playTimedBlendShape(){if(0===this.timedBlendShapes.length)return;const e=this.externalAudioTimeProvider?this.externalAudioTimeProvider():NaN;if(!Number.isNaN(e)){let t=this.firstAudioOffset+e;this.isAudioEnded&&this.timedBlendShapes.length>0&&(t=this.timedBlendShapes[this.timedBlendShapes.length-1].audioOffset);const i=this.timedBlendShapes.find((e=>e.audioOffset<=t));if(i){const A=e-(i.audioOffset-this.firstAudioOffset),n=performance.now();Math.abs(A)>Vg.MAX_SYNC_DRIFT_MS&&n-this.lastRebaseAt>Vg.REBASE_COOLDOWN_MS&&(this.firstAudioOffset=i.audioOffset-e,this.lastRebaseAt=n,A.toFixed(0),this.firstAudioOffset.toFixed(0),t=this.firstAudioOffset+e)}return void this.findAndPlayFrame(t,"external clock",{audioTimeMs:e.toFixed(0)+"ms"})}let t;if(this.isAudioPlaybackStarted)t=this.audioPlaybackStartTime;else if(this.playAudioThroughAudioManager)t=this.playbackStartTime;else if(this.isFirstAudioDataReceived){const e=150;t=this.firstAudioDataTime+e}else t=this.playbackStartTime;const i=this.playAudioThroughAudioManager?performance.now()-t:performance.now()-t-this.totalWaitTime,A=this.firstAudioOffset+i;this.findAndPlayFrame(A,"internal clock",{elapsed:i.toFixed(0)+"ms",totalWaitTime:this.totalWaitTime.toFixed(0)+"ms"})}playTransitionFrame(){this.transitionProgress++;const e=Math.min(this.transitionProgress/Vg.TRANSITION_FRAMES,1),t=1-(1-e)*(1-e),i=this.lastBlendShape.map((e=>e*(1-t)));(1===this.transitionProgress||e>=1)&&((100*e).toFixed(0),(100*t).toFixed(0),this.transitionProgress),this.playShapeFn(i,this.idx++),e>=1&&(this.isTransitioningToIdle=!1,this.transitionProgress=0,this.finishPlayback())}finishPlayback(){if(this.isPlaying=!1,this.isIntervalStarted=!1,this.quickStartMode=!1,this.lastBlendShapeLength>0){const e=new Array(this.lastBlendShapeLength).fill(0);this.lastBlendShape=[...e],this.playShapeFn(e,this.idx++)}this.emit("playend"),this.timerId&&(clearTimeout(this.timerId),this.timerId=null)}getPlayInfo(){const e=Math.ceil(this.playInfo.shapes.length/this.fps*1e3);return this.playInfo.duration=e,this.playInfo}async setAudioRate(e){this.playInfo.rate=e,await this.audioManager.setRate(e)}setExternalAudioTimeProvider(e){this.externalAudioTimeProvider=e}setPlayAudioThroughAudioManager(e){this.playAudioThroughAudioManager=e}async setAudioMuted(e){this.isAudioMuted=e,await this.audioManager.setMuted(e)}duckAudio(e,t){this.audioManager.duckOutput(e,t)}async enableAudio(){await this.audioManager.enableAudio()}attachMicAEC(e){return this.audioManager.attachAEC(e)}detachMicAEC(){this.audioManager.detachAEC()}autoResetForNewTTS(){this.resetSyncState(),this.playbackStartTime=performance.now(),this.timedBlendShapes=[],this.audioManager.resetJitterBuffer(),this.audioManager.notifyStreamStarted()}prepareForNewTTS(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=this.isPlaying,i=this.isIntervalStarted;this.quickStartMode=e,this.isInited,this.isAudioEnded,this.audioBuffer.length,this.useAudioOffsetSync?this.timedBlendShapes.length:this.blendShapes.length,this.isPlaying=!1,this.isIntervalStarted=!1,this.timerId&&(clearTimeout(this.timerId),this.timerId=null),this.planBDelayTimer&&(clearTimeout(this.planBDelayTimer),this.planBDelayTimer=null),this.blendShapes=[],this.audioBuffer=[],this.audioBufferReadIndex=0,this.timedBlendShapes=[],this.idx=0,this.isInited=!1,this.waitingForAudio=!1,this.isAppendingAudio=!1,this.lastShapeReceivedAt=0,this.resetSyncState(),this.actualFps=this.fps,this.framesPlayedSinceStart=0,this.isTransitioningToIdle=!1,this.transitionProgress=0,this.playInfo={shapes:[],audios:[],duration:0,rate:this.playInfo.rate,content:""},this.lastBlendShapeLength=0,this.lastBlendShape=[],(t||i)&&(this.audioManager.stopPlayback(),this.audioManager.clearBuffer()),this.audioManager.resetJitterBuffer(),this.audioManager.setFirstPlaybackBuffer(0),this.audioManager.notifyStreamStarted()}getPlayingStatus(){return this.isPlaying}getBlendShapes(){return this.useAudioOffsetSync?this.timedBlendShapes.map((e=>e.blendShape)):this.blendShapes}registerCallback(e,t){this.callbackMap.set(`${e}`,t),this.blendShapes.push([e])}invokeCallback(e){const t=this.callbackMap.get(e);if(t){for(var i=arguments.length,A=new Array(i>1?i-1:0),n=1;n<i;n++)A[n-1]=arguments[n];t(...A),this.callbackMap.delete(e)}}async destroy(){this.isDestroyed||(this.isDestroyed=!0,await this.clear(),await this.audioManager.dispose(),this.callbackMap.clear(),this.clearListeners())}}var Zg,Xg=new class{events=new Map;on(e,t){this.events.set(e,[...this.events.get(e)||[],t])}off(e,t){t?this.events.set(e,(this.events.get(e)||[]).filter((e=>e!==t))):this.events.delete(e)}emit(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),A=1;A<t;A++)i[A-1]=arguments[A];(this.events.get(e)||[]).forEach((e=>e(...i)))}};!function(e){e.DISCONNECTED="disconnected",e.CONNECTING="connecting",e.SOCKET_OPEN="socket_open",e.AUTHENTICATED="authenticated",e.CONNECTED="connected",e.RECONNECTING="reconnecting",e.CLOSED="closed"}(Zg||(Zg={}));class $g{static IOS_AUDIO_MODES=["baseline","aec","aec_full"];config;ws=null;state=Zg.DISCONNECTED;reconnectAttempts=0;reconnectTimer=null;heartbeatTimer=null;heartbeatPongTimer=null;isDestroyed=!1;updateTokenWarnedOnce=!1;connectInFlight=null;lastStateSyncFrame="";lastVoiceInteractionConfigFrame="";authenticationCount=0;_sessionId="";get sessionId(){return this._sessionId}llmCallback=null;ttsCallback=null;asrCallback=null;serverPushTTSCallback=null;webrtcSDPCallback=null;webrtcICECallback=null;currentTTSSampleRate=16e3;peerConnection=null;dataChannel=null;remoteAudioElement=null;isWebRTCReady=!1;localAudioTrack=null;webrtcReconnectAttempts=0;webrtcReconnectTimer=null;webrtcASRCallback=null;isWebRTCReconnecting=!1;isCreatingWebRTC=!1;static WEBRTC_MAX_RECONNECT_ATTEMPTS=3;static WEBRTC_RECONNECT_INTERVAL=3e3;webrtcStatsTimer=null;lastInboundStats=null;ttsDataChannelCallback=null;vadAudioContext=null;vadAnalyser=null;vadSourceNode=null;vadDetectionTimer=null;vadCallback=null;vadEnabled=!1;vadEnergyHistory=[];vadConsecutiveSpikes=0;vadWarmupComplete=!1;audioLevelCallback=null;audioLevelTimer=null;static AUDIO_LEVEL_INTERVAL=60;static VAD_DETECTION_INTERVAL=50;static VAD_WINDOW_SIZE=30;static VAD_SPIKE_THRESHOLD=4;static VAD_MIN_ABSOLUTE_RMS=10;static VAD_CONSECUTIVE_SPIKES_REQUIRED=2;static VAD_MIN_WARMUP_SAMPLES=12;static VAD_WARMUP_STABILITY_THRESHOLD=6;ttsDumpEnabled=!1;ttsDumpActive=!1;ttsDumpSampleRate=null;ttsDumpChunks=[];ttsDumpTotalBytes=0;ttsDumpSeq=0;ttsDumpFinalizeTimer=null;ttsDumpLastUrl=null;ttsDumpLastFilename=null;constructor(e){if(this.config={url:e.url,token:e.token,audioProfile:e.audioProfile??"asr_priority",iosAudioMode:e.iosAudioMode??"baseline",aecMode:e.aecMode??"off",aecProcess:e.aecProcess??(async()=>null),autoReconnect:!1!==e.autoReconnect,reconnectInterval:e.reconnectInterval||3e3,maxReconnectAttempts:e.maxReconnectAttempts||5,heartbeatInterval:e.heartbeatInterval||3e4,connectTimeout:e.connectTimeout??1e4,iceServers:e.iceServers||[],authMethod:e.authMethod??"url"},"undefined"!=typeof window){const e=new URLSearchParams(window.location.search);this.ttsDumpEnabled="1"===e.get("dumpTTS")||"1"===window.localStorage.getItem("dumpTTS"),this.ttsDumpEnabled}}resolveIOSAudioMode(){if($g.IOS_AUDIO_MODES.includes(this.config.iosAudioMode))return this.config.iosAudioMode;if("undefined"!=typeof window){const e=new URLSearchParams(window.location.search).get("iosAudio");if(e&&$g.IOS_AUDIO_MODES.includes(e))return e;const t=window.__QT_IOS_AUDIO_MODE__;if("string"==typeof t&&$g.IOS_AUDIO_MODES.includes(t))return t}return"baseline"}buildIOSAudioConstraints(e){switch(e){case"aec":return{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!1,channelCount:1,sampleRate:16e3};case"aec_full":return{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,channelCount:1,sampleRate:16e3};default:return{echoCancellation:!1,noiseSuppression:!1,autoGainControl:!1,channelCount:1,sampleRate:16e3}}}async connect(){if(this.isConnected()||this.state===Zg.CONNECTING)return console.warn("[GatewayService] Already connected or connecting"),this.connectInFlight?this.connectInFlight:void 0;this.setState(Zg.CONNECTING);const e=new Promise(((e,t)=>{const A=this.config.connectTimeout??1e4;let n=null,s=!1;const r=e=>{s||(s=!0,n&&(clearTimeout(n),n=null),e())};n=setTimeout((()=>{r((()=>{console.error("[GatewayService] Connection timeout"),this.ws?.close(),this.setState(Zg.DISCONNECTED),t(new Error("WebSocket connection timeout"))}))}),A);try{const A=this.buildWebSocketUrl();this.ws=new WebSocket(A),this.ws.binaryType="arraybuffer",this.ws.onopen=()=>{this.reconnectAttempts=0,this.setState(Zg.SOCKET_OPEN),this.startHeartbeat(),this.sendLogin().then((()=>{this.setState(Zg.AUTHENTICATED),this.authenticationCount++,this.authenticationCount>1&&this.replaySessionDirectives(),Xg.emit(i.GATEWAY_CONNECTED),r((()=>e()))})).catch((e=>{console.error("[GatewayService] login failed:",e),this.stopHeartbeat(),this.ws?.close(),this.setState(Zg.DISCONNECTED),r((()=>t(e)))}))},this.ws.onmessage=e=>{this.handleMessage(e)};const n=this.ws;this.ws.onerror=e=>{this.ws===n?(console.error("[GatewayService] Connection error:",{error:e,readyState:this.ws?.readyState,url:this.ws?.url}),Xg.emit(i.GATEWAY_ERROR,{code:"CONNECTION_ERROR",msg:"WebSocket connection error",details:e}),r((()=>t(e)))):console.warn("[GatewayService] ignoring stale onerror from superseded socket")},this.ws.onclose=e=>{this.ws===n?(console.warn("[GatewayService] Connection closed:",{code:e.code,reason:e.reason,wasClean:e.wasClean,readyState:this.ws?.readyState,url:this.ws?.url}),this.handleClose()):console.warn("[GatewayService] ignoring stale onclose from superseded socket",{code:e.code,reason:e.reason})}}catch(e){console.error("[GatewayService] Failed to create WebSocket:",e),this.setState(Zg.DISCONNECTED),Xg.emit(i.GATEWAY_ERROR,{code:"CREATE_WEBSOCKET_ERROR",msg:"Failed to create WebSocket",details:e}),r((()=>t(e)))}}));return this.connectInFlight=e.finally((()=>{this.connectInFlight===e&&(this.connectInFlight=null)})),this.connectInFlight}disconnect(){this.isDestroyed=!0,this.stopHeartbeat(),this.stopReconnect(),this.ws&&(this.ws.close(),this.ws=null),this.setState(Zg.CLOSED),Xg.emit(i.GATEWAY_DISCONNECTED)}async reconnect(){if(!this.isDestroyed){if(this.reconnectAttempts>=this.config.maxReconnectAttempts)return console.error("[GatewayService] Max reconnect attempts reached"),Xg.emit(i.GATEWAY_ERROR,{code:"MAX_RECONNECT_ATTEMPTS",msg:"Max reconnect attempts reached",details:{attempts:this.reconnectAttempts}}),void this.handleError(new Error("Max reconnect attempts reached"));this.reconnectAttempts++,this.setState(Zg.RECONNECTING),Xg.emit(i.GATEWAY_RECONNECTING),this.reconnectAttempts,this.config.maxReconnectAttempts;try{await this.connect()}catch(e){console.error("[GatewayService] Reconnect failed:",e),this.scheduleReconnect()}}}async sendLLMChat(e,t){if(!this.isConnected())throw new Error("WebSocket is not connected");const i={query:e.query,inputs:{character_id:e.inputs.character_id,chat_id:e.inputs.chat_id||"",tts_enabled:!1!==e.inputs.tts_enabled,a2f_enabled:!1!==e.inputs.a2f_enabled,chunk_type:e.inputs.chunk_type||"stream_sentence",use_webrtc_tts:e.inputs.use_webrtc_tts||!1}};if(this.llmCallback)try{this.llmCallback({type:"end",data:"Request superseded by new request"})}catch(e){}this.llmCallback=t||null;const A="1001"+JSON.stringify(i);this.ws.send(A)}sendToolAction(e,t,i){if(!this.isConnected())return void console.warn("[GatewayService] Cannot send tool action: not connected");const A=JSON.stringify({tool:e,action:t,data:i});this.ws.send("1041"+A)}async sendTTS(e,t){if(!this.isConnected())throw new Error("WebSocket is not connected");const i={...e,a2f_enabled:!1!==e.a2f_enabled};if(this.ttsCallback)try{this.ttsCallback({type:"end",data:"Request superseded by new request"})}catch(e){}this.ttsCallback=t||null;const A="1002"+JSON.stringify(i);this.ws.send(A)}sendTextToAudio(e,t,i){if(!this.isConnected())return void console.warn("[GatewayService] sendTextToAudio: WebSocket not connected");const A={character_id:t,text:e,use_webrtc_tts:i?.useWebRTCTTS??!0,a2f_enabled:i?.a2fEnabled??!0,synthetic:!0},n="1002"+JSON.stringify(A);this.ws.send(n)}setServerPushTTSCallback(e){this.serverPushTTSCallback=e}clearTTSCallback(){this.ttsCallback&&(this.ttsCallback=null)}async sendASRSync(e,t){if(!this.isConnected())throw new Error("WebSocket is not connected");t&&(this.asrCallback=t);const i=(new TextEncoder).encode("1003"),A=new Uint8Array(i.length+e.byteLength);A.set(i,0),A.set(new Uint8Array(e),i.length),this.ws.send(A.buffer),e.byteLength}async sendASRAudio(e,t){if(!this.isConnected())throw new Error("WebSocket is not connected");t&&(this.asrCallback=t);const i=(new TextEncoder).encode("1018"),A=new Uint8Array(i.length+e.byteLength);A.set(i,0),A.set(new Uint8Array(e),i.length),this.ws.send(A.buffer),e.byteLength}async stopASR(){if(!this.isConnected())throw new Error("WebSocket is not connected");this.ws.send("1019")}async sendWebRTCSDP(e,t){if(!this.isConnected())throw new Error("WebSocket is not connected");t&&(this.webrtcSDPCallback=t);const i="1021"+JSON.stringify(e);this.ws.send(i),e.type,e.sdp.length,e.sdp.substring(0,200)}async sendWebRTCICE(e){if(!this.isConnected())throw new Error("WebSocket is not connected");const t={type:"candidate",candidate:e.candidate,sdpMid:e.sdpMid,sdpMLineIndex:e.sdpMLineIndex};e.usernameFragment&&(t.usernameFragment=e.usernameFragment);const i="1023"+JSON.stringify(t);this.ws.send(i),e.candidate.substring(0,80),e.sdpMid,e.sdpMLineIndex}async createWebRTCConnection(e){if(!this.isConnected())throw new Error("WebSocket is not connected");if(this.isCreatingWebRTC){for(console.warn("[GatewayService] WebRTC 连接正在创建中,忽略重复请求");this.isCreatingWebRTC;)await new Promise((e=>setTimeout(e,100)));if(this.peerConnection)return this.peerConnection;throw new Error("WebRTC connection creation failed")}this.isCreatingWebRTC=!0,e&&(this.asrCallback=e,this.webrtcASRCallback=e);let t=[];if(this.config.iceServers&&this.config.iceServers.length>0)t=this.config.iceServers;else{let e="",i="",A="";try{e="",i="",A=""}catch{console.warn("[GatewayService] ROLLUP_TURN_* 未注入,使用 STUN-only ICE 配置")}e&&i&&A&&t.push({urls:e,username:i,credential:A}),t.push({urls:"stun:stun.l.google.com:19302"})}const A={iceServers:t};let n;try{n=new RTCPeerConnection(A)}catch(e){throw this.isCreatingWebRTC=!1,e}this.peerConnection=n,this.peerConnection.onicecandidate=e=>{e.candidate&&(e.candidate.candidate,e.candidate.sdpMid,e.candidate.sdpMLineIndex,this.sendWebRTCICE({candidate:e.candidate.candidate,sdpMid:e.candidate.sdpMid||"",sdpMLineIndex:e.candidate.sdpMLineIndex||0,usernameFragment:e.candidate.usernameFragment||void 0}))},this.peerConnection.onconnectionstatechange=()=>{const e=this.peerConnection?.connectionState;switch(e){case"new":case"connecting":break;case"connected":this.webrtcReconnectAttempts=0,this.isWebRTCReconnecting=!1,this.startWebRTCStatsMonitoring();break;case"disconnected":this.stopWebRTCStatsMonitoring(),this.isWebRTCReconnecting=!1,this.attemptWebRTCReconnect();break;case"failed":console.error("[GatewayService] ❌ WebRTC 连接失败"),this.stopWebRTCStatsMonitoring(),Xg.emit(i.GATEWAY_ERROR,{code:"WEBRTC_CONNECTION_FAILED",msg:"WebRTC connection failed",details:null}),this.isWebRTCReconnecting=!1,this.attemptWebRTCReconnect();break;case"closed":this.stopWebRTCStatsMonitoring()}},this.peerConnection.oniceconnectionstatechange=()=>{const e=this.peerConnection?.iceConnectionState;switch(e){case"new":case"checking":case"connected":case"completed":case"disconnected":case"closed":break;case"failed":console.error("[GatewayService] ❌ ICE 连接失败")}},this.peerConnection.onicegatheringstatechange=()=>{this.peerConnection},this.peerConnection.onsignalingstatechange=()=>{this.peerConnection},this.dataChannel=this.peerConnection.createDataChannel("tts-audio",{ordered:!0,negotiated:!0,id:0}),this.dataChannel.binaryType="arraybuffer",this.dataChannel.onopen=()=>{this.dataChannel},this.dataChannel.onclose=()=>{},this.dataChannel.onerror=e=>{console.error("[GatewayService] ❌ TTS DataChannel 错误:",e)},this.dataChannel.onmessage=e=>{e.data instanceof ArrayBuffer?(e.data.byteLength,this.ttsDumpEnabled&&(this.ttsDumpActive||this.startTtsDump(this.currentTTSSampleRate),this.appendTtsDump(e.data)),this.ttsDataChannelCallback?this.ttsDataChannelCallback(e.data):console.warn("[GatewayService] ⚠️ DataChannel 收到数据但 ttsDataChannelCallback 未设置")):e.data},this.peerConnection.ontrack=e=>{if(e.track.kind,e.track.id,e.track.label,"audio"===e.track.kind&&e.streams.length>0){this.remoteAudioElement||(this.remoteAudioElement=document.createElement("audio"),this.remoteAudioElement.id="webrtc-remote-audio",this.remoteAudioElement.autoplay=!0,this.remoteAudioElement.muted=!0,this.remoteAudioElement.volume=0,this.remoteAudioElement.style.display="none",document.body.appendChild(this.remoteAudioElement)),this.remoteAudioElement.srcObject=e.streams[0];const t=e.streams[0].getAudioTracks()[0];if(t){t.getSettings()}this.remoteAudioElement.onplay=()=>{Xg.emit(i.AUDIO_PLAY,{source:"webrtc"})},this.remoteAudioElement.onpause=()=>{Xg.emit(i.AUDIO_PAUSE,{source:"webrtc"})},this.remoteAudioElement.onended=()=>{},this.remoteAudioElement.onerror=e=>{console.error("[GatewayService] ❌ 远程 TTS 音频播放错误:",e)},this.remoteAudioElement.play().catch((e=>{console.warn("[GatewayService] 自动播放被阻止,需要用户交互:",e)}))}};try{const e=/iPhone|iPad|iPod/.test(navigator.userAgent)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1,t=this.resolveIOSAudioMode(),A=e?this.buildIOSAudioConstraints(t):{echoCancellation:!0,noiseSuppression:!0,autoGainControl:"standard"===this.config.audioProfile,channelCount:1,sampleRate:16e3,googEchoCancellation:!0,googAutoGainControl:"standard"===this.config.audioProfile,googNoiseSuppression:!0,googHighpassFilter:!0,googExperimentalNoiseSuppression:!0,googExperimentalEchoCancellation:!0};e||this.config.audioProfile,"explicit"===this.config.aecMode&&(A.echoCancellation=!1,A.noiseSuppression=!0);const n=await navigator.mediaDevices.getUserMedia({audio:A});n.getAudioTracks().length,this.setupVAD(n);let s=null;if(n.getTracks().forEach((e=>{const t=this.peerConnection.addTrack(e,n);"audio"===e.kind&&(s=t,this.localAudioTrack=e,e.onended=()=>{console.error("[GatewayService] ❌ 麦克风轨道被关闭 (onended)"),console.error("[GatewayService] 轨道状态:",e.readyState,"| enabled:",e.enabled),Xg.emit(i.GATEWAY_ERROR,{code:"MICROPHONE_ENDED",msg:"麦克风被关闭,可能是浏览器音频会话冲突",details:{readyState:e.readyState,enabled:e.enabled}})},e.onmute=()=>{console.warn("[GatewayService] ⚠️ 麦克风轨道被静音 (onmute)"),console.warn("[GatewayService] 轨道状态:",e.readyState,"| enabled:",e.enabled)},e.onunmute=()=>{}),e.label,e.getSettings()})),"explicit"===this.config.aecMode&&this.config.aecProcess&&s)try{const e=await this.config.aecProcess(n);e&&await s.replaceTrack(e)}catch(e){console.warn("[GatewayService] ⚠️ 显式 AEC 接入失败, 保持原始 mic 上行:",e)}}catch(e){throw console.error("[GatewayService] ❌ 获取麦克风失败:",e),this.isCreatingWebRTC=!1,new Error("Failed to access microphone")}try{const e=await this.peerConnection.createOffer();await this.peerConnection.setLocalDescription(e),e.sdp,await this.sendWebRTCSDP({type:"offer",sdp:e.sdp||""},(async e=>{if(e.type,e.sdp.length,"answer"===e.type&&this.peerConnection){const t=new RTCSessionDescription({type:"answer",sdp:e.sdp});await this.peerConnection.setRemoteDescription(t)}}))}finally{this.isCreatingWebRTC=!1}return this.peerConnection}closeWebRTCConnection(){this.isConnected()&&this.sendWebRTCClose(),this.dataChannel&&(this.dataChannel.close(),this.dataChannel=null),this.peerConnection&&(this.peerConnection.close(),this.peerConnection=null),this.remoteAudioElement&&(this.remoteAudioElement.srcObject=null,this.remoteAudioElement.parentNode&&this.remoteAudioElement.parentNode.removeChild(this.remoteAudioElement),this.remoteAudioElement=null),this.cleanupVAD(),this.isWebRTCReady=!1,this.localAudioTrack=null,this.isCreatingWebRTC=!1,this.webrtcReconnectTimer&&(clearTimeout(this.webrtcReconnectTimer),this.webrtcReconnectTimer=null),this.webrtcReconnectAttempts=0,this.isWebRTCReconnecting=!1}async attemptWebRTCReconnect(){if(!this.isWebRTCReconnecting)return this.webrtcReconnectAttempts>=$g.WEBRTC_MAX_RECONNECT_ATTEMPTS?(console.error("[GatewayService] ❌ WebRTC 重连次数已达上限,停止重连"),void Xg.emit(i.GATEWAY_ERROR,{code:"WEBRTC_RECONNECT_FAILED",msg:"WebRTC reconnection failed after max attempts",details:{attempts:this.webrtcReconnectAttempts}})):void(this.webrtcASRCallback&&this.isConnected()&&(this.isWebRTCReconnecting=!0,this.webrtcReconnectAttempts++,this.webrtcReconnectAttempts,$g.WEBRTC_MAX_RECONNECT_ATTEMPTS,this.webrtcReconnectTimer=setTimeout((async()=>{try{this.isConnected()&&await this.sendWebRTCClose(),this.dataChannel&&(this.dataChannel.close(),this.dataChannel=null),this.peerConnection&&(this.peerConnection.close(),this.peerConnection=null),this.remoteAudioElement&&(this.remoteAudioElement.srcObject=null),this.isWebRTCReady=!1,await new Promise((e=>setTimeout(e,200))),await this.createWebRTCConnection(this.webrtcASRCallback),Xg.emit(i.VOICE_INTERACTION_WEBRTC_STATE,{state:"reconnected",attempts:this.webrtcReconnectAttempts})}catch(e){console.error("[GatewayService] ❌ WebRTC 重连失败:",e),this.isWebRTCReconnecting=!1,this.attemptWebRTCReconnect()}}),$g.WEBRTC_RECONNECT_INTERVAL)))}_muteRefCount=0;muteLocalAudio(){this._muteRefCount++,this._muteRefCount,this.localAudioTrack&&1===this._muteRefCount&&(this.localAudioTrack.enabled=!1)}unmuteLocalAudio(){this._muteRefCount=Math.max(0,this._muteRefCount-1),this._muteRefCount,0===this._muteRefCount&&(this.localAudioTrack?(this.localAudioTrack.enabled,this.localAudioTrack.muted,this.localAudioTrack.readyState,Date.now(),this.localAudioTrack.enabled=!0):console.warn("[GatewayService] ⚠️ unmuteLocalAudio: localAudioTrack 不存在!"))}forceUnmuteLocalAudio(){this._muteRefCount=0,this.localAudioTrack&&(this.localAudioTrack.enabled=!0)}isLocalAudioMuted(){return!this.localAudioTrack||!this.localAudioTrack.enabled}setupVAD(e){try{this.vadAudioContext=new AudioContext({sampleRate:16e3}),this.vadAnalyser=this.vadAudioContext.createAnalyser(),this.vadAnalyser.fftSize=256,this.vadAnalyser.smoothingTimeConstant=.3,this.vadSourceNode=this.vadAudioContext.createMediaStreamSource(e),this.vadSourceNode.connect(this.vadAnalyser)}catch(e){console.error("[GatewayService] ❌ VAD 设置失败:",e)}}startVADDetection(e){if(!this.vadAnalyser)return void console.warn("[GatewayService] VAD 分析器未初始化");this.vadCallback=e,this.vadEnabled=!0,this.vadEnergyHistory=[],this.vadConsecutiveSpikes=0,this.vadWarmupComplete=!1;const t=new Uint8Array(this.vadAnalyser.fftSize),i=()=>{if(!this.vadEnabled||!this.vadAnalyser)return;this.vadAnalyser.getByteTimeDomainData(t);let e=0;for(let i=0;i<t.length;i++){const A=t[i]-128;e+=A*A}const A=Math.sqrt(e/t.length);if(this.vadEnergyHistory.push(A),this.vadEnergyHistory.length>$g.VAD_WINDOW_SIZE&&this.vadEnergyHistory.shift(),!this.vadWarmupComplete){if(this.vadEnergyHistory.length<$g.VAD_MIN_WARMUP_SAMPLES)return this.vadEnergyHistory.length,A.toFixed(2),void(this.vadDetectionTimer=window.setTimeout(i,$g.VAD_DETECTION_INTERVAL));const e=this.vadEnergyHistory.slice(-5),t=e.reduce(((e,t)=>e+t),0)/e.length,n=e.reduce(((e,i)=>e+Math.pow(i-t,2)),0)/e.length,s=Math.sqrt(n);if(s>$g.VAD_WARMUP_STABILITY_THRESHOLD)return this.vadEnergyHistory.length,A.toFixed(2),s.toFixed(2),$g.VAD_WARMUP_STABILITY_THRESHOLD,void(this.vadDetectionTimer=window.setTimeout(i,$g.VAD_DETECTION_INTERVAL));this.vadWarmupComplete=!0,this.vadEnergyHistory.length,t.toFixed(2),s.toFixed(2)}const n=this.vadEnergyHistory.slice(0,-1),s=n.reduce(((e,t)=>e+t),0)/n.length,r=n.reduce(((e,t)=>e+Math.pow(t-s,2)),0)/n.length,a=Math.sqrt(r),o=Math.max(s+$g.VAD_SPIKE_THRESHOLD+2*a,$g.VAD_MIN_ABSOLUTE_RMS),c=A-s;if(A>o&&c>0){if(this.vadConsecutiveSpikes++,A.toFixed(2),s.toFixed(2),a.toFixed(2),c.toFixed(2),o.toFixed(2),this.vadConsecutiveSpikes,this.vadConsecutiveSpikes>=$g.VAD_CONSECUTIVE_SPIKES_REQUIRED)return this.vadConsecutiveSpikes,this.vadCallback?.(!0,A),void this.stopVADDetection()}else this.vadConsecutiveSpikes,this.vadConsecutiveSpikes=0;this.vadDetectionTimer=window.setTimeout(i,$g.VAD_DETECTION_INTERVAL)};i()}stopVADDetection(){this.vadDetectionTimer&&(clearTimeout(this.vadDetectionTimer),this.vadDetectionTimer=null),this.vadEnabled=!1,this.vadCallback=null,this.vadEnergyHistory=[],this.vadConsecutiveSpikes=0,this.vadWarmupComplete=!1}startAudioLevelMonitor(e){if(this.stopAudioLevelMonitor(),!this.vadAnalyser)return;this.audioLevelCallback=e;const t=new Uint8Array(this.vadAnalyser.fftSize),i=()=>{if(!this.audioLevelCallback||!this.vadAnalyser)return;this.vadAnalyser.getByteTimeDomainData(t);let e=0;for(let i=0;i<t.length;i++){const A=t[i]-128;e+=A*A}const A=Math.sqrt(e/t.length),n=Math.min(A/50,1);this.audioLevelCallback(n),this.audioLevelTimer=window.setTimeout(i,$g.AUDIO_LEVEL_INTERVAL)};i()}stopAudioLevelMonitor(){this.audioLevelTimer&&(clearTimeout(this.audioLevelTimer),this.audioLevelTimer=null),this.audioLevelCallback=null}cleanupVAD(){this.stopVADDetection(),this.stopAudioLevelMonitor(),this.vadSourceNode&&(this.vadSourceNode.disconnect(),this.vadSourceNode=null),this.vadAudioContext&&(this.vadAudioContext.close().catch((()=>{})),this.vadAudioContext=null),this.vadAnalyser=null}async sendWebRTCClose(){if(!this.isConnected())return;this.ws.send("1025")}async sendInterrupt(){if(!this.isConnected())throw new Error("WebSocket is not connected");this.ws.send("1004"),this.llmCallback=null,this.ttsCallback=null}sendTTSPlaybackState(e,t){if(!this.isConnected())return void console.warn("[GatewayService] WebSocket is not connected, skip sendTTSPlaybackState");const i="1026"+JSON.stringify(t?{event:e,context:t}:{event:e});this.ws.send(i)}sendStateSync(e){if(!this.isConnected())return void console.warn("[GatewayService] WebSocket is not connected, skip sendStateSync");const t="1030"+JSON.stringify({state:e});this.lastStateSyncFrame=t,this.ws.send(t)}sendVoiceInteractionConfig(e){if(!this.isConnected())return void console.warn("[GatewayService] Not connected, skip sendVoiceInteractionConfig");const t="1031"+JSON.stringify({wake_words:e.wakeWords,synthetic_texts:e.syntheticTexts??[],voice_engine:e.voiceEngine||"pipeline",character_id:e.characterId||""});this.lastVoiceInteractionConfigFrame=t,this.ws.send(t),e.wakeWords.length,e.syntheticTexts,e.voiceEngine}replaySessionDirectives(){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return;this.lastVoiceInteractionConfigFrame&&this.ws.send(this.lastVoiceInteractionConfigFrame),this.lastStateSyncFrame&&this.ws.send(this.lastStateSyncFrame)}setLLMCallback(e){this.llmCallback=e}getState(){return this.state}isConnected(){return this.ws?.readyState===WebSocket.OPEN&&(this.state===Zg.AUTHENTICATED||this.state===Zg.CONNECTED)}updateToken(e){this.updateTokenWarnedOnce||(this.updateTokenWarnedOnce=!0,console.warn("[GatewayService] updateToken() is deprecated; use refreshAuthToken() for same-connection reauth.")),this.refreshAuthToken(e).catch((e=>{console.error("[GatewayService] updateToken shim: refreshAuthToken rejected:",e)}))}async refreshAuthToken(e){if(!e)throw new Error("refreshAuthToken: token required");if(this.isDestroyed)throw new Error("refreshAuthToken: service has been destroyed; create a new instance");this.config.token=e;if(this.ws?.readyState===WebSocket.OPEN)try{return await this.sendLogin(e),this.authenticationCount++,void(this.state!==Zg.AUTHENTICATED&&this.state!==Zg.CONNECTED&&this.setState(Zg.AUTHENTICATED))}catch(e){console.warn("[GatewayService] reauth failed, falling back to reconnect:",e)}try{this.ws?.close()}catch{}this.ws=null,this.stopHeartbeat(),this.setState(Zg.DISCONNECTED),await this.connect()}destroy(){this.webrtcReconnectTimer&&(clearTimeout(this.webrtcReconnectTimer),this.webrtcReconnectTimer=null),this.webrtcStatsTimer&&(clearInterval(this.webrtcStatsTimer),this.webrtcStatsTimer=null),this.ttsDumpFinalizeTimer&&(clearTimeout(this.ttsDumpFinalizeTimer),this.ttsDumpFinalizeTimer=null),this.heartbeatPongTimer&&(clearTimeout(this.heartbeatPongTimer),this.heartbeatPongTimer=null),this.closeWebRTCConnection(),this.disconnect(),this.llmCallback=null,this.ttsCallback=null,this.asrCallback=null,this.webrtcSDPCallback=null,this.webrtcICECallback=null,this.webrtcASRCallback=null}buildWebSocketUrl(){const e=this.config.url;if("message"===this.config.authMethod)return e;const t=e.includes("?")?"&":"?";return`${e}${t}t=${this.config.token}`}async sendLogin(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.config.token;return new Promise(((t,i)=>{if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return void i(new Error("WebSocket is not open"));const A=e=>{try{if("string"==typeof e.data){const s=e.data.substring(0,4);if("1007"===s)clearTimeout(n),this.ws?.removeEventListener("message",A),t();else if("5001"===s){clearTimeout(n),this.ws?.removeEventListener("message",A);const t=e.data.substring(4);i(new Error(`Login failed: ${t}`))}}}catch(e){console.error("[GatewayService] Login handler error:",e)}},n=setTimeout((()=>{this.ws?.removeEventListener("message",A),i(new Error("Login timeout"))}),5e3);this.ws.addEventListener("message",A);const s="1000"+e;this.ws.send(s)}))}handleMessage(e){try{const t=e.data;if("string"==typeof t){if(t.length<4)return void console.warn("[GatewayService] Invalid message: too short",t.length);const e=t.substring(0,4),A=t.substring(4);switch(e){case"1005":this.handleWebRTCSDPResponse(A);break;case"1006":this.handleWebRTCICEResponse(A);break;case"1007":this._sessionId=A||"",this._sessionId;break;case"1009":this.handleLLMResponse(A);break;case"1010":this.handleTTSSampleRate(A);break;case"1012":this.handleASRResponse(A);break;case"1014":this.handleA2FResponse(A);break;case"1015":this.handleEndMarker(A);break;case"1016":console.warn("[GatewayService] 收到文本格式的 1016,应该是二进制格式");break;case"1017":this.handleA2FResponseSequence(A);break;case"1020":this.handleCharacterAction(A);break;case"1022":this.handleWebRTCAnswer(A);break;case"1023":this.handleWebRTCICE(A);break;case"1024":this.handleWebRTCReady(A);break;case"1025":this.handleWebRTCClose(A);break;case"1030":try{const e=JSON.parse(A);if(!e?.state){console.warn("[GatewayService] CMD 1030 missing state:",A);break}Xg.emit(i.GATEWAY_STATE_PUSH,e)}catch(e){console.error("[GatewayService] Failed to parse state push (1030):",e,A)}break;case"1040":try{const e=JSON.parse(A);Xg.emit(i.TOOL_RESULT,e)}catch(e){console.error("[GatewayService] Failed to parse tool result:",e)}break;case"2001":this.heartbeatPongTimer&&(clearTimeout(this.heartbeatPongTimer),this.heartbeatPongTimer=null);break;case"5000":this.handleSystemError(A);break;case"5001":this.handleLoginError(A);break;case"5002":this.handleBalanceError(A);break;default:console.warn("[GatewayService] Unknown CMD:",e)}}else if(t instanceof ArrayBuffer)try{const e=new Uint8Array(t.slice(0,4)),i=(new TextDecoder).decode(e);"1011"===i?this.handleTTSAudio(t):"1016"===i?this.handleTTSAudioSequence(t):console.warn("[GatewayService] Unknown binary CMD:",i)}catch(e){return void console.error("[GatewayService] Failed to parse binary message:",e)}}catch(e){console.error("[GatewayService] Failed to handle message:",e),this.handleError(e)}}handleLLMResponse(e){this.llmCallback&&this.llmCallback({type:"llm",text:e}),Xg.emit(i.GATEWAY_MESSAGE,{type:"llm",data:{text:e}})}handleTTSSampleRate(e){const t=parseInt(e,10);this.currentTTSSampleRate=t,this.ttsDumpEnabled&&this.startTtsDump(t),Xg.emit(i.WEBRTC_TTS_PLAY_START),this.ttsCallback?this.ttsCallback({type:"rate",sampleRate:t}):this.llmCallback?this.llmCallback({type:"tts",sampleRate:t}):this.serverPushTTSCallback&&this.serverPushTTSCallback({type:"rate",sampleRate:t})}handleTTSAudio(e){const t=e.slice(4);this.ttsCallback?this.ttsCallback({type:"audio",audio:t}):this.llmCallback?this.llmCallback({type:"tts",audio:t}):this.serverPushTTSCallback&&this.serverPushTTSCallback({type:"audio",audio:t})}handleTTSAudioSequence(e){const t=new DataView(e.slice(4,12)).getBigUint64(0,!1),i=e.slice(12);t.toString(),i.byteLength,this.ttsCallback?this.ttsCallback({type:"audio",audio:i,sequence:Number(t)}):this.llmCallback&&this.llmCallback({type:"tts",audio:i,sequence:Number(t)})}handleASRResponse(e){let t=e,A=!1;try{const i=JSON.parse(e);"object"==typeof i&&null!==i&&(t=i.text||"",A=!0===i.isFinal)}catch{}this.asrCallback&&this.asrCallback({text:t,isFinal:A}),Xg.emit(i.GATEWAY_MESSAGE,{type:"asr",data:{text:t,isFinal:A}})}handleA2FResponse(e){try{const{audio_offset:t,blend_shape:i,stream_id:A}=JSON.parse(e);this.ttsCallback?this.ttsCallback({type:"a2f",blendShapes:[i],audioOffset:t,streamId:A}):this.llmCallback&&this.llmCallback({type:"a2f",blendShapes:[i],audioOffset:t,streamId:A})}catch(e){console.error("[GatewayService] Failed to parse A2F data:",e)}}handleA2FResponseSequence(e){try{const t=e.indexOf("{");if(-1===t)return void console.error("[GatewayService] Invalid A2F sequence data format");const i=e.substring(0,t),A=e.substring(t),n=parseInt(i,10),{audio_offset:s,blend_shape:r,stream_id:a}=JSON.parse(A);this.ttsCallback?this.ttsCallback({type:"a2f",blendShapes:[r],sequence:n,audioOffset:s,streamId:a}):this.llmCallback&&this.llmCallback({type:"a2f",blendShapes:[r],sequence:n,audioOffset:s,streamId:a})}catch(e){console.error("[GatewayService] Failed to parse A2F sequence data:",e)}}handleEndMarker(e){"llm"===e?this.llmCallback&&this.llmCallback({type:"end",endType:"llm"}):"tts"===e?(this.ttsDumpEnabled&&this.scheduleFinalizeTtsDump(),this.ttsCallback?this.ttsCallback({type:"end",endType:"tts"}):this.llmCallback?this.llmCallback({type:"end",endType:"tts"}):this.serverPushTTSCallback&&this.serverPushTTSCallback({type:"end",endType:"tts"})):"a2f"===e?this.ttsCallback?this.ttsCallback({type:"end",endType:"a2f"}):this.llmCallback&&this.llmCallback({type:"end",endType:"a2f"}):"asr"===e&&(this.asrCallback,this.asrCallback&&this.asrCallback({text:"",isFinal:!0})),Xg.emit(i.GATEWAY_MESSAGE,{type:"end",data:{endType:e}})}startTtsDump(e){this.ttsDumpEnabled&&(null!==this.ttsDumpFinalizeTimer&&(window.clearTimeout(this.ttsDumpFinalizeTimer),this.ttsDumpFinalizeTimer=null),this.ttsDumpActive=!0,this.ttsDumpSampleRate=e||this.currentTTSSampleRate||24e3,this.ttsDumpChunks=[],this.ttsDumpTotalBytes=0,this.ttsDumpSeq+=1,this.ttsDumpSeq,this.ttsDumpSampleRate)}appendTtsDump(e){if(!this.ttsDumpEnabled||!this.ttsDumpActive)return;const t=new Uint8Array(e);this.ttsDumpChunks.push(t),this.ttsDumpTotalBytes+=t.byteLength}scheduleFinalizeTtsDump(){this.ttsDumpEnabled&&this.ttsDumpActive&&null===this.ttsDumpFinalizeTimer&&(this.ttsDumpFinalizeTimer=window.setTimeout((()=>{this.ttsDumpFinalizeTimer=null,this.finalizeTtsDump()}),200))}finalizeTtsDump(){if(!this.ttsDumpEnabled||!this.ttsDumpActive)return;const e=this.ttsDumpSampleRate||this.currentTTSSampleRate||24e3,t=this.ttsDumpTotalBytes;if(0===t)return console.warn("[GatewayService] ⚠️ TTS dump skipped (no data)"),void(this.ttsDumpActive=!1);const i=new Uint8Array(t);let A=0;for(const e of this.ttsDumpChunks)i.set(e,A),A+=e.byteLength;const n=this.encodeWavPcm16(i,e,1),s=new Blob([n],{type:"audio/wav"}),r=`tts_dump_${this.ttsDumpSeq}_${e}Hz_${Date.now()}.wav`,a=URL.createObjectURL(s);this.ttsDumpLastUrl=a,this.ttsDumpLastFilename=r,window.__ttsDump={url:a,filename:r,download:()=>{const e=document.createElement("a");e.href=a,e.download=r,document.body.appendChild(e),e.click(),e.remove()}};try{const e=document.createElement("a");e.href=a,e.download=r,document.body.appendChild(e),e.click(),e.remove()}catch(e){console.warn("[GatewayService] ⚠️ Auto-download failed, use window.__ttsDump.download()",e)}this.ttsDumpActive=!1}encodeWavPcm16(e,t,i){const A=2*i,n=t*A,s=e.byteLength,r=new ArrayBuffer(44+s),a=new DataView(r),o=(e,t)=>{for(let i=0;i<t.length;i+=1)a.setUint8(e+i,t.charCodeAt(i))};return o(0,"RIFF"),a.setUint32(4,36+s,!0),o(8,"WAVE"),o(12,"fmt "),a.setUint32(16,16,!0),a.setUint16(20,1,!0),a.setUint16(22,i,!0),a.setUint32(24,t,!0),a.setUint32(28,n,!0),a.setUint16(32,A,!0),a.setUint16(34,16,!0),o(36,"data"),a.setUint32(40,s,!0),new Uint8Array(r,44).set(e),r}handleCharacterAction(e){try{const t=JSON.parse(e);Xg.emit(i.GATEWAY_MESSAGE,{type:"character_action",data:t})}catch(t){console.error("[GatewayService] ❌ 解析角色动作失败:",t),console.error("[GatewayService] 原始数据:",e)}}handleWebRTCSDPResponse(e){try{const t=JSON.parse(e);t.type,t.sdp,t.sdp?.substring(0,200),this.webrtcSDPCallback&&this.webrtcSDPCallback({type:t.type,sdp:t.sdp}),Xg.emit(i.GATEWAY_MESSAGE,{type:"webrtc_sdp",data:t})}catch(t){console.error("[GatewayService] ❌ 解析 WebRTC SDP 响应失败:",t),console.error("[GatewayService] 原始数据:",e)}}async handleWebRTCICEResponse(e){try{const t=JSON.parse(e);if(t.candidate,t.sdpMid,t.sdpMLineIndex,this.webrtcICECallback&&this.webrtcICECallback({candidate:t.candidate,sdpMid:t.sdpMid,sdpMLineIndex:t.sdpMLineIndex,usernameFragment:t.usernameFragment}),this.peerConnection&&t.candidate){const e=new RTCIceCandidate({candidate:t.candidate,sdpMid:t.sdpMid,sdpMLineIndex:t.sdpMLineIndex});await this.peerConnection.addIceCandidate(e)}Xg.emit(i.GATEWAY_MESSAGE,{type:"webrtc_ice",data:t})}catch(t){console.error("[GatewayService] ❌ 处理 WebRTC ICE 响应失败:",t),console.error("[GatewayService] 原始数据:",e)}}async handleWebRTCAnswer(e){try{const t=JSON.parse(e);if(t.sdp,this.peerConnection&&t.sdp){const e=new RTCSessionDescription({type:"answer",sdp:t.sdp});await this.peerConnection.setRemoteDescription(e)}Xg.emit(i.GATEWAY_MESSAGE,{type:"webrtc_answer",data:t})}catch(e){console.error("[GatewayService] ❌ 处理 WebRTC Answer 失败:",e)}}async handleWebRTCICE(e){try{const t=JSON.parse(e);if(t.candidate,this.peerConnection&&t.candidate){const e=new RTCIceCandidate({candidate:t.candidate,sdpMid:t.sdpMid,sdpMLineIndex:t.sdpMLineIndex});await this.peerConnection.addIceCandidate(e)}Xg.emit(i.GATEWAY_MESSAGE,{type:"webrtc_ice",data:t})}catch(e){console.error("[GatewayService] ❌ 处理 WebRTC ICE 失败:",e)}}handleWebRTCReady(e){try{const t=JSON.parse(e);t.session_id,t.ready,this.isWebRTCReady=!0,Xg.emit(i.VOICE_INTERACTION_WEBRTC_STATE,{state:"ready",sessionId:t.session_id})}catch(e){console.error("[GatewayService] ❌ 处理 WebRTC Ready 失败:",e)}}handleWebRTCClose(e){this.isWebRTCReady=!1,this.remoteAudioElement&&(this.remoteAudioElement.pause(),this.remoteAudioElement.srcObject=null),Xg.emit(i.VOICE_INTERACTION_WEBRTC_STATE,{state:"closed",reason:e})}isWebRTCConnected(){return this.isWebRTCReady&&"connected"===this.peerConnection?.connectionState}getRemoteAudioElement(){return this.remoteAudioElement}resumeRemoteAudio(){}setTTSDataChannelCallback(e){this.ttsDataChannelCallback=e}setRemoteAudioMuted(e){this.remoteAudioElement&&(this.remoteAudioElement.muted=e,this.remoteAudioElement.volume=e?0:1)}isTTSDataChannelReady(){return null!==this.dataChannel&&"open"===this.dataChannel.readyState}startWebRTCStatsMonitoring(){if(this.webrtcStatsTimer)return;this.lastInboundStats=null;const e=async()=>{if(this.peerConnection)try{(await this.peerConnection.getStats()).forEach((e=>{if("inbound-rtp"===e.type&&"audio"===e.kind){const t=e.packetsReceived||0,i=e.bytesReceived||0,A=(e.packetsLost,e.jitter||0),n=e.timestamp;if(this.lastInboundStats){const e=t-this.lastInboundStats.packetsReceived,s=i-this.lastInboundStats.bytesReceived,r=(n-this.lastInboundStats.timestamp)/1e3;(e>0||s>0)&&(A.toFixed(4),Math.round(8*s/r/1e3))}this.lastInboundStats={packetsReceived:t,bytesReceived:i,timestamp:n}}}))}catch(e){console.error("[GatewayService] Failed to get WebRTC stats:",e)}};this.webrtcStatsTimer=window.setInterval(e,1e3),e()}stopWebRTCStatsMonitoring(){this.webrtcStatsTimer&&(clearInterval(this.webrtcStatsTimer),this.webrtcStatsTimer=null,this.lastInboundStats=null)}async getWebRTCStats(){if(!this.peerConnection)return null;try{const e=await this.peerConnection.getStats();let t=null;return e.forEach((e=>{"inbound-rtp"===e.type&&"audio"===e.kind&&(t={packetsReceived:e.packetsReceived||0,bytesReceived:e.bytesReceived||0,packetsLost:e.packetsLost||0,jitter:e.jitter||0,roundTripTime:e.roundTripTime||0})})),t}catch(e){return console.error("[GatewayService] Failed to get WebRTC stats:",e),null}}static GRPC_CANCEL_PATTERNS=["context canceled","Cancelled","Canceled"];handleSystemError(e){$g.GRPC_CANCEL_PATTERNS.some((t=>e?.includes(t)))||(console.error("[GatewayService] System error:",e),Xg.emit(i.GATEWAY_ERROR,{code:"5000",msg:e||"系统异常,请联系管理员",details:null}))}handleLoginError(e){console.error("[GatewayService] Login error:",e),Xg.emit(i.GATEWAY_ERROR,{code:"5001",msg:e||"登录失败",details:null})}handleBalanceError(e){console.error("[GatewayService] Balance error:",e),Xg.emit(i.GATEWAY_ERROR,{code:"5002",msg:e||"余额不足请升级订阅",details:null})}handleError(e){console.error("[GatewayService] Error:",e),Xg.emit(i.GATEWAY_ERROR,{code:"GATEWAY_ERROR",msg:e.message,details:e})}handleClose(){this.stopHeartbeat(),this.setState(Zg.DISCONNECTED),Xg.emit(i.GATEWAY_DISCONNECTED),this.config.autoReconnect&&!this.isDestroyed&&this.scheduleReconnect()}scheduleReconnect(){this.reconnectTimer||(this.reconnectTimer=window.setTimeout((()=>{this.reconnectTimer=null,this.reconnect()}),this.config.reconnectInterval))}stopReconnect(){this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.reconnectAttempts=0}startHeartbeat(){this.stopHeartbeat(),this.heartbeatTimer=window.setInterval((()=>{this.isConnected()&&(this.sendHeartbeat(),this.heartbeatPongTimer&&clearTimeout(this.heartbeatPongTimer),this.heartbeatPongTimer=window.setTimeout((()=>{console.warn("[GatewayService] Heartbeat PONG timeout, connection may be dead"),this.heartbeatPongTimer=null,!1!==this.config.autoReconnect&&this.handleClose()}),5e3))}),this.config.heartbeatInterval)}stopHeartbeat(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null),this.heartbeatPongTimer&&(clearTimeout(this.heartbeatPongTimer),this.heartbeatPongTimer=null)}sendHeartbeat(){if(this.isConnected())try{const e="2000";this.ws.send(e)}catch(e){console.error("[GatewayService] Failed to send heartbeat:",e)}}setState(e){this.state=e}}class ed{deps;debugAudioChunks=[];debugAudioSampleRate=24e3;debugAudioEnabled=!1;debugBlendShapes=[];constructor(e){this.deps=e}get isEnabled(){return this.debugAudioEnabled}reset(){this.debugAudioChunks=[],this.debugBlendShapes=[],this.debugAudioSampleRate=24e3}setSampleRate(e){this.debugAudioSampleRate=e}addAudioChunk(e){this.debugAudioChunks.push(e)}addBlendShapes(e){for(const t of e)this.debugBlendShapes.push([...t])}getChunkCount(){return this.debugAudioChunks.length}getTotalSize(){return this.debugAudioChunks.reduce(((e,t)=>e+t.byteLength),0)}getSampleRate(){return this.debugAudioSampleRate}getBlendShapeCount(){return this.debugBlendShapes.length}enableAudioDebug(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.debugAudioEnabled=e,e||(this.debugAudioChunks=[],this.debugBlendShapes=[])}getDebugAudioInfo(){const e=this.debugAudioChunks.reduce(((e,t)=>e+t.byteLength),0);return{sampleRate:this.debugAudioSampleRate,totalSize:e,chunks:this.debugAudioChunks.length}}downloadDebugAudio(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"debug_audio";if(0===this.debugAudioChunks.length)return void console.warn("[AudioDebugger] No debug audio data to download. Make sure to call enableAudioDebug(true) before askStream.");const t=this.mergeAudioChunks(),i=(t.byteLength,this.createWavFile(t,this.debugAudioSampleRate)),A=new Blob([i],{type:"audio/wav"}),n=URL.createObjectURL(A),s=document.createElement("a");s.href=n,s.download=`${e}_${this.debugAudioSampleRate}Hz.wav`,document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(n),this.debugAudioSampleRate}async playDebugAudio(e){if(0===this.debugAudioChunks.length)return void console.warn("[AudioDebugger] No debug audio data to play.");const t=e||this.debugAudioSampleRate,i=this.mergeAudioChunks();i.byteLength;this.debugAudioSampleRate;const A=new AudioContext({sampleRate:t}),n=new Int16Array(i),s=new Float32Array(n.length);for(let e=0;e<n.length;e++)s[e]=n[e]/32768;const r=A.createBuffer(1,s.length,t);r.getChannelData(0).set(s);const a=A.createBufferSource();return a.buffer=r,a.connect(A.destination),new Promise((e=>{a.onended=()=>{A.close(),e()},a.start(),r.duration.toFixed(2)}))}async playDebugAudio2(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(0===this.debugAudioChunks.length)return void console.warn("[AudioDebugger] No debug audio data to play.");const i=this.deps.getFramePlayer();if(!i)return void console.error("[AudioDebugger] framePlayer is not initialized");const A=e||this.debugAudioSampleRate;return this.debugAudioChunks.length,this.debugBlendShapes.length,await i.clear(),await i.setAudioRate(A),i.once("playstart").then((()=>{this.deps.getCore()?.playAction("talk")})),new Promise((e=>{if(i.once("playend").then((()=>{this.deps.getCore()?.stopServerShapes(),this.deps.playIdleAnimation(),e()})),t){let e=0,t=0;const A=()=>{if(e<this.debugAudioChunks.length){const t=this.debugAudioChunks[e];this.debugAudioChunks.length,t.byteLength,i.addBinaryAudio(t),e++}if(t<this.debugBlendShapes.length){const e=Math.min(20,this.debugBlendShapes.length-t),A=this.debugBlendShapes.slice(t,t+e);this.debugBlendShapes.length,i.addShapes(A),t+=e}(e<this.debugAudioChunks.length||t<this.debugBlendShapes.length)&&setTimeout(A,50)};A()}else this.debugAudioChunks.forEach((e=>{i.addBinaryAudio(e)})),this.debugBlendShapes.length,i.addShapes(this.debugBlendShapes)}))}mergeAudioChunks(){const e=this.debugAudioChunks.reduce(((e,t)=>e+t.byteLength),0),t=new ArrayBuffer(e),i=new Uint8Array(t);let A=0;for(const e of this.debugAudioChunks)i.set(new Uint8Array(e),A),A+=e.byteLength;return t}createWavFile(e,t){const i=1*t*16/8,A=e.byteLength,n=44+A,s=new ArrayBuffer(n),r=new DataView(s);return this.writeString(r,0,"RIFF"),r.setUint32(4,n-8,!0),this.writeString(r,8,"WAVE"),this.writeString(r,12,"fmt "),r.setUint32(16,16,!0),r.setUint16(20,1,!0),r.setUint16(22,1,!0),r.setUint32(24,t,!0),r.setUint32(28,i,!0),r.setUint16(32,2,!0),r.setUint16(34,16,!0),this.writeString(r,36,"data"),r.setUint32(40,A,!0),new Uint8Array(s,44).set(new Uint8Array(e)),s}writeString(e,t,i){for(let A=0;A<i.length;A++)e.setUint8(t+A,i.charCodeAt(A))}destroy(){this.debugAudioChunks=[],this.debugBlendShapes=[],this.debugAudioEnabled=!1}}class td{deps;webrtcLipSyncFrames=[];webrtcLipSyncAnimationId=null;webrtcTTSStartTime=0;webrtcA2FStreamId=null;lastLipSyncFrameIndex=-1;lipSyncStartTime=0;firstAudioOffset=0;isWebRTCTTSMode=!1;constructor(e){this.deps=e}start(){if(null!==this.webrtcLipSyncAnimationId)return;const e=this.deps.getGatewayService()?.getRemoteAudioElement();if(!e)return void console.warn("[WebRTCLipSync] No remote audio element");this.webrtcTTSStartTime=Date.now(),this.lastLipSyncFrameIndex=-1,this.deps.startTTSPlaying();const t=()=>{if(!this.isWebRTCTTSMode)return void this.stop();const i=1e3*e.currentTime,A=this.firstAudioOffset+i,n=this.findClosestFrame(A);if(-1!==n&&n!==this.lastLipSyncFrameIndex){const e=this.webrtcLipSyncFrames[n],t=this.deps.getCore();e&&t&&(t.playByShapes(e.blendShape,n),this.lastLipSyncFrameIndex=n,n%30==0&&(e.audioOffset,A.toFixed(0),i.toFixed(0),this.webrtcLipSyncFrames.length))}this.webrtcLipSyncAnimationId=requestAnimationFrame(t)};this.webrtcLipSyncAnimationId=requestAnimationFrame(t)}stop(){null!==this.webrtcLipSyncAnimationId&&(cancelAnimationFrame(this.webrtcLipSyncAnimationId),this.webrtcLipSyncAnimationId=null);const e=this.deps.getCurrentTTSText();e&&this.deps.addTTSTextToHistory(e),this.isWebRTCTTSMode=!1,this.deps.onTTSPlaybackFinalized()}addFrame(e,t,i){i&&i!==this.webrtcA2FStreamId?(this.webrtcA2FStreamId=i,this.webrtcLipSyncFrames.length>0&&(this.stop(),this.clearFrames())):!i&&0===e&&this.webrtcLipSyncFrames.length>0&&(this.stop(),this.clearFrames());const A=0===this.webrtcLipSyncFrames.length;A&&(this.lipSyncStartTime=Date.now(),this.firstAudioOffset=e,this.lipSyncStartTime,this.firstAudioOffset),this.webrtcLipSyncFrames.push({audioOffset:e,blendShape:t}),this.webrtcLipSyncFrames.sort(((e,t)=>e.audioOffset-t.audioOffset)),A&&this.isWebRTCTTSMode&&(this.start(),this.deps.getCore()?.playAction("talk"))}clearFrames(){this.webrtcLipSyncFrames=[],this.lastLipSyncFrameIndex=-1,this.lipSyncStartTime=0,this.firstAudioOffset=0,this.webrtcA2FStreamId=null}findClosestFrame(e){if(0===this.webrtcLipSyncFrames.length)return-1;let t=0,i=this.webrtcLipSyncFrames.length-1;for(;t<i;){const A=Math.floor((t+i)/2);this.webrtcLipSyncFrames[A].audioOffset<e?t=A+1:i=A}return this.webrtcLipSyncFrames[t].audioOffset>e&&t>0?t-1:t}destroy(){null!==this.webrtcLipSyncAnimationId&&(cancelAnimationFrame(this.webrtcLipSyncAnimationId),this.webrtcLipSyncAnimationId=null),this.webrtcLipSyncFrames=[],this.isWebRTCTTSMode=!1}}class id{isTTSPlaying=!1;currentTTSText="";lastTTSEndTime=0;ttsPlayStartTime=0;ttsTextHistory=[];playId=0;startPlaying(){return this.isTTSPlaying=!0,this.ttsPlayStartTime=Date.now(),++this.playId}reset(){this.isTTSPlaying=!1,this.lastTTSEndTime=Date.now()}resetIfMatch(e){return this.playId===e&&(this.reset(),!0)}clearCurrentText(){this.currentTTSText=""}appendText(e){this.currentTTSText+=e}isInCooldown(){return Date.now()-this.lastTTSEndTime<2e3}get cooldownMs(){return 2e3}addTextToHistory(e){if(e&&e.trim())for(this.ttsTextHistory.push(e.trim());this.ttsTextHistory.length>5;)this.ttsTextHistory.shift()}destroy(){this.isTTSPlaying=!1,this.currentTTSText="",this.lastTTSEndTime=0,this.ttsPlayStartTime=0,this.ttsTextHistory=[],this.playId=0}}class Ad{deps;voiceCallback=null;asrStream=null;asrAudioContext=null;asrProcessor=null;constructor(e){this.deps=e}async startVoice2Text(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>{};try{const t=this.deps.getGatewayService();if(!t||!t.isConnected())return{code:1,msg:"Gateway service is not connected",data:{code:"error",msg:"Gateway service is not connected"}};await this.deps.stop(),this.voiceCallback=e,this.deps.setStatus("prepare2play");try{const e=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,sampleRate:16e3}}),i=new AudioContext({sampleRate:16e3}),A=i.createMediaStreamSource(e),n=i.createScriptProcessor(4096,1,1);return n.onaudioprocess=e=>{const i=e.inputBuffer.getChannelData(0),A=new Int16Array(i.length);for(let e=0;e<i.length;e++){const t=Math.max(-1,Math.min(1,i[e]));A[e]=t<0?32768*t:32767*t}t.sendASRAudio(A.buffer,(e=>{this.voiceCallback&&(this.voiceCallback({text:e.text,is_final:e.isFinal}),e.isFinal&&(this.voiceCallback=null))})).catch((e=>{console.error("[VoiceToTextManager] Failed to send ASR audio:",e)}))},A.connect(n),n.connect(i.destination),this.asrStream=e,this.asrAudioContext=i,this.asrProcessor=n,{code:0,msg:"success",data:{code:"success",msg:"Voice to text started"}}}catch(e){return console.error("[VoiceToTextManager] Failed to get microphone permission:",e),this.voiceCallback=null,this.deps.setStatus("ready"),{code:1,msg:"Failed to get microphone permission",data:{code:"error",msg:e.message,isUserNotAllow:!0}}}}catch(e){throw console.error("[VoiceToTextManager] startVoice2Text error:",e),this.deps.emit(i.HUMAN_ERROR,{code:"START_VOICE2TEXT_ERROR",msg:"Failed to start voice to text",details:uo(e)}),e}}async stopVoice2Text(e){try{e&&(this.voiceCallback=e);const t=this.deps.getGatewayService();return t&&t.stopASR(),this.asrStream&&(this.asrStream.getTracks().forEach((e=>e.stop())),this.asrStream=null),this.asrAudioContext&&(await this.asrAudioContext.close(),this.asrAudioContext=null),this.asrProcessor&&(this.asrProcessor.disconnect(),this.asrProcessor=null),{code:0,msg:"success",data:null}}catch(e){throw console.error("[VoiceToTextManager] stopVoice2Text error:",e),this.deps.emit(i.HUMAN_ERROR,{code:"STOP_VOICE2TEXT_ERROR",msg:"Failed to stop voice to text",details:uo(e)}),e}}dealVoice2Text(e){let t=e;e.is_final&&(t.text=t.text.replace(/([\.|。])$/,"")),this.voiceCallback&&this.voiceCallback(t)}getVoiceCallback(){return this.voiceCallback}setVoiceCallback(e){this.voiceCallback=e}destroy(){this.asrStream&&(this.asrStream.getTracks().forEach((e=>e.stop())),this.asrStream=null),this.asrAudioContext&&(this.asrAudioContext.close().catch((()=>{})),this.asrAudioContext=null),this.asrProcessor&&(this.asrProcessor.disconnect(),this.asrProcessor=null),this.voiceCallback=null}}const nd=class{list=[];isExecute=!1;runList=[];constructor(){}add(e){if("[object AsyncFunction]"!==Object.prototype.toString.call(e))throw new Error("Task mast be AsyncFunction.");this.list.push(e),this.isExecute||this.execute()}execute(){if(this.isExecute=!0,this.list.length>0){const e=this.list.shift();this.runList.push({task:e}),e().then((()=>{this.runList.findIndex((t=>t.task===e))>=0&&this.execute()}))}else this.isExecute=!1}clear(){this.runList=[],this.list=[],this.isExecute=!1}hasRuning(){return this.list.length>0||this.isExecute}},sd=e=>{const t=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9"];let i=[];const A=t.length;for(let n=0;n<e;n++){const e=Math.floor(Math.random()*A);i.push(t[e])}return i.join("")};var rd=new class{fps;run_count;time_begin_ms;process_begin_time;target_wait_ms;log_timestamp;trace_name;constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";this.fps=e,this.run_count=0,this.time_begin_ms=0,this.process_begin_time=0,this.target_wait_ms=1e3/e,this.log_timestamp=0,this.trace_name=t}init(e,t){this.fps=e,this.run_count=0,this.time_begin_ms=Date.now(),this.process_begin_time=0,this.target_wait_ms=1e3/e,this.trace_name=t}terminate(){}begin(){return this.process_begin_time=Date.now(),this.process_begin_time}end(){let e=Date.now(),t=e>this.process_begin_time?e-this.process_begin_time:0,i=this.target_wait_ms>t?this.target_wait_ms-t:2,A=e>this.time_begin_ms?Math.floor((e-this.time_begin_ms+this.target_wait_ms/2)/this.target_wait_ms):0;A>this.run_count?i=0:A<this.run_count&&(i+=this.target_wait_ms/2),i>2*this.target_wait_ms&&(i=2*this.target_wait_ms);if(Math.abs(A-this.run_count)>5){let e=Date.now();e-this.log_timestamp>1e4&&(this.log_timestamp=e,console.warn(`[${this.trace_name}] ideal_count - run_count = ${A-this.run_count}`)),A>this.run_count?this.run_count++:i=this.target_wait_ms/2}else this.run_count++;return i}}(30,"");class ad{callback;pushCallback;buffer="";triggerCharacters=[".","!","?","。","!","?","\n"];minLength=6;messages=[];startPushed=!1;constructor(e,t){this.buffer="",this.startPushed=!1,this.callback=e,this.pushCallback=t}processMessage(e){if(this.messages.push(e),"message_end"===e.event)return this.buffer+=e.answer||"",void this.pushMessage(this.buffer,{isEnd:!0,type:"message",conversation_id:e.conversation_id});if(!e||!e.answer)return;if(this.buffer+=e.answer,this.checkAndDoAction(e.conversation_id))return;if(this.buffer.length<this.minLength)return;const t=this.includeIndex(e.answer);if(t>=0){let i=this.buffer;const A=e.answer.length,n=this.buffer;A>1&&(i=this.buffer.substring(0,this.buffer.length-A+t+1)),this.pushMessage(i,{isEnd:!1,type:"message",conversation_id:e.conversation_id}),A>1&&(this.buffer+=n.substring(n.length-A+t+1))}}includeIndex(e){return e.split("").findIndex((e=>this.triggerCharacters.includes(e)))}pushMessage(e,t){this.callback(e,t),this.buffer="",this.startPushed&&this.executePushCallback()}checkAndDoAction(e){return/^\[#?"?”?.*#?"?“?\]\n?/.test(this.buffer)?(this.pushMessage(this.buffer.replace(/^\[#?"?”?(.*?)"?“?#?\]\n?/,"$1"),{isEnd:!1,type:"action",conversation_id:e}),this.messages=[],!0):!(!this.buffer.startsWith("[#")&&!this.buffer.startsWith('["'))}executePushCallback(){this.startPushed=!0;const e=[...this.messages];0!==e.length&&(this.messages=[],this.pushCallback({code:0,msg:"success",data:e}))}}class od{deps;exeSequence=new nd;fetchSequence=new nd;probeTimeout=null;callbackTimeout=null;mutilAudios=[];openRecorderTimeout=null;webrtcTTSStartTime=0;constructor(e){this.deps=e}async speak(e,t){if("render-only"===this.deps.getConfig().mode)return Promise.reject(new Error("[Human] render-only 模式下 speak() 不可用:请用第三方 TTS 生成音频+口型后调用 speakByAudioShapes()"));const A=this.deps.getGatewayService();if(!A||!A.isConnected())return Promise.reject(new Error("Gateway service is not connected"));const n=this.deps.getCharacterData();if(!n)return Promise.reject(new Error("Character data is not loaded"));await this.deps.stop();const s=sd(16),r=this.deps.getFramePlayer();await(r?.clear()),r?.once("playstart").then((()=>{this.deps.ttsState.startPlaying();const A=this.deps.getCore();A?.playAction("talk"),this.deps.emit(i.CHAT_MESSAGE_BS_PLAY_START,{reqId:s,content:e,conversationId:"",isEnd:!1}),t&&t({event:"bs-playstart",text:e})}));return new Promise(((a,o)=>{let c=!1,l=!1;const h=!1!==this.deps.getConfig().a2fEnabled;let g=!h;const d=setTimeout((()=>{l||(l=!0,console.warn("[Human] speak timeout (60s), force resolve"),this.deps.ttsState.reset(),this.deps.finalizeTTSPlayback(),this.deps.emit(i.CHAT_MESSAGE_BS_PLAY_END,{reqId:s,conversationId:"",isEnd:!0}),o(new Error("speak timeout")))}),6e4);A.sendTTS({character_id:n.id,text:e,a2f_enabled:h,dialect:n.language},(A=>{l||("rate"===A.type&&A.sampleRate?r?.setAudioRate(A.sampleRate):"audio"===A.type&&A.audio?r?.addBinaryAudio(A.audio):"a2f"===A.type&&A.blendShapes&&h?r?.addShapes(A.blendShapes):"end"===A.type&&("tts"===A.endType?c=!0:"a2f"===A.endType&&(g=!0),c&&g&&(setTimeout((()=>{r?.markAudioStreamEnded()}),100),r?.once("playend").then((()=>{if(l)return;l=!0,clearTimeout(d);const A=r.getPlayInfo();this.deps.finalizeTTSPlayback(),this.deps.emit(i.CHAT_MESSAGE_BS_PLAY_END,{reqId:s,conversationId:"",isEnd:!0}),t&&t({event:"bs-playend",text:e}),a(A)})))))})).catch((e=>{l||(l=!0,clearTimeout(d),console.error("[Human] speak error:",e),this.deps.ttsState.reset(),this.deps.playIdleAnimation(),this.deps.emit(i.HUMAN_ERROR,{code:"SPEAK_ERROR",msg:"Failed to speak text",details:e}),o(e))}))}))}async askCommand(e,t){const A=this.deps.getCharacterData();if(!A)return void t({code:99,msg:"接口数据异常",data:[]});const n=new ad((async(A,n)=>{if("action"===n.type&&e.commandType){const n=A.split(",").filter((t=>t.startsWith(e.commandType)));n.length>0&&(t({code:0,msg:"success",data:n}),this.deps.emit(i.HUMAN_ACTION_PENDING,n))}else;}),(()=>{}));co(A.id,{...e,language:A?.language},(e=>{if(0===e.code){if("error"===e.data.event)return t({code:98,msg:e.data.message??"接口数据异常",data:[]});n.processMessage(e.data)}else t({code:e.code,msg:e.msg??"接口数据异常",data:[]})})).catch((e=>{console.error("askStream.......err..",e)}))}async askStream(e,t,i){if("render-only"===this.deps.getConfig().mode)return Promise.reject(new Error("[Human] render-only 模式下 askStream() 不可用:LLM 请由接入方用第三方算力实现,再用 speakByAudioShapes() 驱动数字人"));const A=this.deps.getGatewayService();if(!A||!A.isConnected())return Promise.reject(new Error("Gateway service is not connected"));if(!this.deps.getCharacterData())return Promise.reject(new Error("Character data is not loaded"));const n="closed"!==this.deps.getVoiceInteractionState();i?.skipStop||n||await this.deps.stop();const s=e.reqId||sd(16),r=[];let a=e.conversation_id||sd(16);const o=this.deps.getFramePlayer();o?.once("playstart").then((()=>{const e=this.deps.getCore();e?.playAction("talk")}));return"stream_sentence"===e.inputs?.chunk_type?this.askStreamWithSeparateTTS(e,t,s,a,r):this.askStreamWithIntegratedTTS(e,t,s,a,r)}async askStreamWithSeparateTTS(e,t,A,n,s){return this.deps.ttsState.currentTTSText="",new Promise(((r,a)=>{let o=!1,c=0,l=0;const h=this.deps.getGatewayService(),g=this.deps.getCharacterData(),d=this.deps.getFramePlayer();h.sendLLMChat({query:e.message[e.message.length-1].content,inputs:{character_id:g.id,chat_id:e.conversation_id||n,tts_enabled:!1,a2f_enabled:!1,chunk_type:"stream_sentence"}},(e=>{if("llm"===e.type&&e.text){const a=e.text.trim();if(this.deps.ttsState.currentTTSText+=a,t(this.buildMessageCallback("message",n,A,a)),a){c++;const e=c;this.fetchSequence.add((async()=>new Promise(((t,u)=>{let I=!1,C=!1,f=!1;const E=`startplay-${A}-${e}`;d?.registerCallback(E,(()=>{f||(f=!0,this.deps.ttsState.startPlaying(),this.deps.emit(i.CHAT_MESSAGE_BS_PLAY_START,{reqId:A,content:a,conversationId:n,isEnd:!1}),a.substring(0,20))})),h.sendTTS({character_id:g.id,text:a,a2f_enabled:!0,xf:3280,dialect:g.language},(h=>{if("rate"===h.type&&h.sampleRate)d?.setAudioRate(h.sampleRate);else if("audio"===h.type&&h.audio)d?.addBinaryAudio(h.audio);else if("a2f"===h.type&&h.blendShapes)d?.addShapes(h.blendShapes);else if("end"===h.type&&("tts"===h.endType?I=!0:"a2f"===h.endType&&(C=!0),I&&C)){setTimeout((()=>{d?.markAudioStreamEnded()}),100);const h=`endplay-${A}-${e}`;d?.registerCallback(h,(()=>{this.deps.emit(i.CHAT_MESSAGE_BS_PLAY_END,{reqId:A,content:a,conversationId:n,isEnd:!1}),a.substring(0,20)})),l++,t(),this.checkAllTasksCompleted(o,c,l,A,n,s,r)}})).catch((e=>{console.error("[Human] TTS error:",e),s.push({errorMessage:e.message,content:a}),l++,u(e),this.checkAllTasksCompleted(o,c,l,A,n,s,r)}))}))))}}else"end"===e.type&&"llm"===e.endType&&(o=!0,t(this.buildMessageCallback("message_end",n,A,"")),this.checkAllTasksCompleted(o,c,l,A,n,s,r))})).catch((e=>{console.error("[Human] askStream LLM error:",e),this.deps.playIdleAnimation(),a(e)}))})).catch((e=>{throw this.deps.playIdleAnimation(),e}))}async askStreamWithIntegratedTTS(e,t,A,n,s){this.deps.audioDebugger.reset();const r=this.deps.getFramePlayer();await(r?.clear()),this.deps.ttsState.currentTTSText="";const a=e.inputs?.use_webrtc_tts||!1,o=!1!==e.inputs?.a2f_enabled;return new Promise(((c,l)=>{let h=!1,g=!1,d=!o,u=!1,I=!1,C=0,f=0,E=!1,p=null,B=null,Q=0;let m=0,y=0;const w=this.deps.getGatewayService(),S=this.deps.getCharacterData(),_=this.deps.getConfig(),T=this.deps.getCore(),D=e=>{if(E)return;if(a&&!g)return;const t=Date.now();if(Q>0&&t<Q){const i=Math.max(Q-t+200,200);return p&&clearTimeout(p),void(p=setTimeout((()=>{D(`min-duration-delay:${e}`)}),i))}E=!0,p&&(clearTimeout(p),p=null),B&&(clearTimeout(B),B=null),w?.getWebRTCStats().then((e=>{e&&(e.packetsReceived,e.bytesReceived,e.packetsLost,e.jitter.toFixed(4),e.packetsReceived>0&&(e.packetsLost/(e.packetsReceived+e.packetsLost)*100).toFixed(2))})),this.deps.webrtcLipSync.isWebRTCTTSMode?this.deps.webrtcLipSync.stop():this.deps.ttsState.reset(),w?.sendTTSPlaybackState("playback_ended"),this.deps.flushPendingASRIfReady("webrtc-playback-ended")},b=e=>{if(!a||E||B)return;if(!g||o&&!d)return;const t=w?.getRemoteAudioElement();if(!t)return void D("no-audio-element");y=t.currentTime,m=0;const i=Date.now();y.toFixed(3);const A=()=>{if(E)return void(B=null);if(!g||o&&!d)return void(B=setTimeout(A,500));const n=t.currentTime,s=n-y;if(m%5==0&&(n.toFixed(3),y.toFixed(3),s.toFixed(3),((Date.now()-i)/1e3).toFixed(1),t.paused,t.ended),s>.01?(y=n,m=0):m+=1,m>=20)return n.toFixed(3),((Date.now()-i)/1e3).toFixed(1),t.paused,D(`audio-idle:${e}`),void(B=null);B=setTimeout(A,200)};B=setTimeout(A,200),p=setTimeout((()=>{D(`end-marker-timeout:${e}`)}),12e4)};a&&(this.deps.webrtcLipSync.isWebRTCTTSMode=!0,this.deps.webrtcLipSync.clearFrames(),this.webrtcTTSStartTime=0,r?.prepareForNewTTS(!0)),w.sendLLMChat({query:e.message[e.message.length-1].content,inputs:{character_id:S.id,chat_id:e.conversation_id||n,tts_enabled:!0,a2f_enabled:o,chunk_type:"stream",use_webrtc_tts:a}},(e=>{if("llm"===e.type&&e.text){const s=e.text.trim();this.deps.ttsState.currentTTSText+=s,t(this.buildMessageCallback("message",n,A,s)),u&&this.deps.emit(i.CHAT_MESSAGE_BS_PLAY_START,{reqId:A,content:this.deps.ttsState.currentTTSText,conversationId:n,isEnd:!1})}else if("tts"===e.type)e.sampleRate&&!I&&(e.sampleRate,r?.setAudioRate(e.sampleRate),I=!0,this.deps.audioDebugger.isEnabled&&this.deps.audioDebugger.setSampleRate(e.sampleRate)),e.audio&&(u||(u=!0,this.deps.ttsState.startPlaying(),this.deps.emit(i.CHAT_MESSAGE_BS_PLAY_START,{reqId:A,content:this.deps.ttsState.currentTTSText,conversationId:n,isEnd:!1}),a&&(0===this.webrtcTTSStartTime&&(this.webrtcTTSStartTime=Date.now()),Q=Math.max(Q,this.webrtcTTSStartTime+2e3),T?.playAction("talk"))),this.deps.audioDebugger.isEnabled&&this.deps.audioDebugger.addAudioChunk(e.audio.slice(0)),I||(console.warn("[Human] Audio data received before sample rate, using default 24000"),r?.setAudioRate(24e3),I=!0),r?.addBinaryAudio(e.audio));else if("a2f"===e.type&&e.blendShapes&&o)C++,f+=e.blendShapes.length,this.deps.audioDebugger.isEnabled&&this.deps.audioDebugger.addBlendShapes(e.blendShapes),a&&void 0!==e.audioOffset?(u||(u=!0,this.deps.ttsState.startPlaying(),this.deps.emit(i.CHAT_MESSAGE_BS_PLAY_START,{reqId:A,content:"",conversationId:n,isEnd:!1}),0===this.webrtcTTSStartTime&&(this.webrtcTTSStartTime=Date.now()),Q=Math.max(Q,this.webrtcTTSStartTime+2e3),T?.playAction("talk")),C<=3&&(e.audioOffset,e.blendShapes.length),e.blendShapes.forEach((t=>{this.deps.webrtcLipSync.addFrame(e.audioOffset,t,e.streamId)}))):a&&void 0===e.audioOffset?console.warn("[Human] ⚠️ WebRTC 模式收到 A2F 数据但缺少 audioOffset"):r?.addShapes(e.blendShapes);else if("end"===e.type){if("llm"===e.endType)h=!0,t(this.buildMessageCallback("message_end",n,A,""));else if("tts"===e.endType){g=!0;const e=Date.now();this.webrtcTTSStartTime>0&&this.webrtcTTSStartTime;if(this.deps.ttsState.currentTTSText.length,this.deps.ttsState.currentTTSText.substring(0,50),this.deps.ttsState.currentTTSText.length,this.deps.audioDebugger.isEnabled&&this.deps.audioDebugger.getChunkCount(),this.deps.audioDebugger.isEnabled){const e=this.deps.audioDebugger.getTotalSize();this.deps.audioDebugger.getChunkCount(),this.deps.audioDebugger.getSampleRate(),(e/2/this.deps.audioDebugger.getSampleRate()).toFixed(2)}a&&b("tts-end")}else if("a2f"===e.endType&&(d=!0,a)){const e=_.options?.fps??30,t=Math.ceil(f/e*1e3);0===this.webrtcTTSStartTime&&(this.webrtcTTSStartTime=Date.now()),Q=this.webrtcTTSStartTime+Math.max(t,1e3),b("a2f-end")}h&&g&&d&&(setTimeout((()=>{r?.markAudioStreamEnded()}),100),r?.once("playend").then((()=>{const e=r.getPlayInfo();a&&D("frameplayer-playend"),this.deps.ttsState.currentTTSText&&this.deps.ttsState.addTextToHistory(this.deps.ttsState.currentTTSText),this.deps.finalizeTTSPlayback(),a||(w?.sendTTSPlaybackState("playback_ended"),this.deps.flushPendingASRIfReady("frameplayer-playend")),this.deps.emit(i.CHAT_MESSAGE_BS_PLAY_END,{reqId:A,content:"",conversationId:n,isEnd:!0}),c({code:0,msg:"success",data:{reqId:A,playInfos:[e],errorInfos:s}})})))}})).catch((e=>{console.error("[Human] askStream integrated mode error:",e),this.deps.ttsState.reset(),this.deps.playIdleAnimation(),l(e)}))})).catch((e=>{throw this.deps.ttsState.reset(),this.deps.playIdleAnimation(),e}))}checkAllTasksCompleted(e,t,A,n,s,r,a){if(e&&t===A){const e=this.deps.getFramePlayer(),t=this.deps.getGatewayService();e?.once("playend").then((()=>{const A=e.getPlayInfo();this.deps.finalizeTTSPlayback(),t?.sendTTSPlaybackState("playback_ended"),this.deps.emit(i.CHAT_MESSAGE_BS_PLAY_END,{reqId:n,content:"",conversationId:s,isEnd:!0}),a({code:0,msg:"success",data:{reqId:n,playInfos:[A],errorInfos:r}})}))}}async ask(e,t){if("render-only"===this.deps.getConfig().mode)return Promise.reject(new Error("[Human] render-only 模式下 ask() 不可用:LLM 请由接入方用第三方算力实现,再用 speakByAudioShapes() 驱动数字人"));const i=this.deps.getGatewayService();if(!i||!i.isConnected())return Promise.reject(new Error("Gateway service is not connected"));const A=this.deps.getCharacterData();if(!A)return Promise.reject(new Error("Character data is not loaded"));await this.deps.stop();const n=e.reqId||sd(16),s=e.conversation_id||sd(16);let r="";return new Promise(((a,o)=>{i.sendLLMChat({query:e.message[e.message.length-1].content,inputs:{character_id:A.id,chat_id:s,tts_enabled:!1,a2f_enabled:!1,chunk_type:"block"}},(e=>{"llm"===e.type&&e.text?(r+=e.text,t({code:0,msg:"success",data:{event:"message",conversation_id:s,message_id:n,created_at:Date.now(),task_id:n,id:n,answer:e.text}})):"end"===e.type&&"llm"===e.endType&&a({code:0,msg:"success",data:{reqId:n,playInfos:[],errorInfos:[]}})})).catch((e=>{console.error("[Human] ask error:",e),o(e)}))}))}async speakByAudioShapes(e,t){return await this.deps.stop(),this.deps.setStatus("prepare2play"),new Promise((i=>{let A=0;const n=t=>{A++,A===e.length&&i(t)};e.forEach(((e,i)=>{this.exeSequence.add((async()=>{const A=this.createAudio();return await A.setUrl(e),this.mutilAudios.push(A),this.play({shapes:t[i],audio:A}).then(n)}))}))}))}async speakByAudioStreamShapes(e,t,i){await this.deps.stop(),this.deps.setStatus("prepare2play");const A=this.deps.getFramePlayer();return A?(i&&await A.setAudioRate(i),new Promise((i=>{A.once("playend").then((()=>{const e=this.deps.getCore();e?.stopServerShapes(),i(!0)})),e.forEach((e=>{A.addBinaryAudio(e)})),A.addShapes(t)}))):Promise.reject("player is null!")}async speakByAudio(e,t){if(await this.deps.stop(),!t)throw new Error("shapes is null");this.deps.setStatus("prepare2play");const i=this.deps.getAudio();return await i.setUrl(e),this.play({shapes:t,audio:i}).then((()=>!0))}probeTimePlay(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2?arguments[2]:void 0;if(this.callbackTimeout&&clearTimeout(this.callbackTimeout),t.length>e){rd.begin();const A=this.deps.getCore();A&&A.playByShapes(t[e],e);const n=rd.end();this.probeTimeout=setTimeout((()=>{this.probeTimePlay(e+1,t,i)}),n),this.callbackTimeout=setTimeout((()=>{i&&i({break:!0})}),n+100)}else i&&i()}createAudio(){const e=new Eo,t=()=>{this.deps.emit(i.AUDIO_PLAY)},A=()=>{this.deps.emit(i.AUDIO_PAUSE),e.off("onplay",t),e.off("onend",n),e.off("onstop",A)},n=()=>{this.deps.emit(i.AUDIO_PAUSE),e.off("onplay",t),e.off("onstop",A),e.off("onend",n)};return e.on("onplay",t),e.on("onstop",A),e.on("onend",n),e}async setRecorderStatus(e){if("normal"===this.deps.getConfig().mode){this.openRecorderTimeout&&clearTimeout(this.openRecorderTimeout);const t=this.deps.getRecorder();if(!t)return void console.warn("[Human] Recorder is not available, skip setRecorderStatus");const i=this.deps.getStatus();"open"!==e||["prepare2play","playing"].includes(i)?t.closeRecording():this.openRecorderTimeout=setTimeout((()=>{t.requestRecorderPermission()}),500)}}play=async e=>{let{shapes:t,audio:A}=e;return await this.setRecorderStatus("close"),this.deps.setStatus("playing"),A.isLoaded()?A.play():this.deps.emit(i.HUMAN_ERROR,{code:"playaudio",uri:A.getUrl(),msg:"audio 未加载"}),new Promise((e=>{const i=this.deps.getConfig();rd.init(i.options?.fps??30,"socket"),this.probeTimePlay(0,t,(t=>{this.deps.setStatus("ready"),this.setRecorderStatus("open"),t&&t.break?e(!1):e(!0)}))}))};buildMessageCallback(e,t,i,A){return{code:0,msg:"success",data:[{event:e,conversation_id:t,message_id:i,created_at:Date.now(),task_id:i,id:i,answer:A}]}}muteAllAudio(e){this.mutilAudios.forEach((t=>{t.mute(e)}))}stopPlayback(){this.probeTimeout&&(clearTimeout(this.probeTimeout),this.probeTimeout=null),this.callbackTimeout&&(clearTimeout(this.callbackTimeout),this.callbackTimeout=null),this.exeSequence.clear(),this.fetchSequence.clear(),this.mutilAudios.forEach((e=>{e.pause()})),this.mutilAudios=[]}destroy(){this.exeSequence.clear(),this.fetchSequence.clear(),this.probeTimeout&&(clearTimeout(this.probeTimeout),this.probeTimeout=null),this.callbackTimeout&&(clearTimeout(this.callbackTimeout),this.callbackTimeout=null),this.openRecorderTimeout&&(clearTimeout(this.openRecorderTimeout),this.openRecorderTimeout=null),this.mutilAudios=[],this.webrtcTTSStartTime=0}}class cd{static resolveCharacter(e,t){const i=this.getRuntimeModelConfig(t,e.configuration);return{render:this.resolveRenderConfig(i),assets:{aposes:this.filterFilesByType(e.aposes,"apose"),animations:this.filterAnimationFiles(e.animations),scene:this.resolveSceneAsset(e.scene)},behavior:{animationEnabled:this.resolveAnimationEnabled(e.animationEnabled),debug:t.debug??!1,isNotRender:t.isNotRender??!1}}}static resolveOffline(e,t,i){const A=this.getRuntimeModelConfig(i,e);return{render:this.resolveRenderConfig(A),assets:{aposes:this.filterFilesByType(t,"apose"),animations:this.filterAnimationFiles(t),scene:null},behavior:{animationEnabled:!0,debug:i.debug??!1,isNotRender:i.isNotRender??!1}}}static toModelDescription(e){return{name:e.render.name||"",scene:e.render.scene,camera:e.render.camera||{fov:50},orbitControls:e.render.orbitControls||{},lights:e.render.lights||[],model:e.render.model,gridHelper:e.render.gridHelper,dracoPath:e.render.dracoPath,debug:e.behavior.debug}}static getRuntimeModelConfig(e,t){return e.modelConfig||t||{}}static resolveRenderConfig(e){return{name:e.name,scene:e.scene,camera:e.camera,orbitControls:e.orbitControls,lights:Array.isArray(e.lights)?e.lights:[],model:e.model,gridHelper:e.gridHelper,dracoPath:e.dracoPath}}static resolveSceneAsset(e){return e&&"object"==typeof e?{...e,id:e.id,name:e.name,type:e.type,path:e.path,pictures:Array.isArray(e.pictures)?e.pictures:void 0,background:e.background}:null}static filterFilesByType(e,t){return Array.isArray(e)?e.filter((e=>e?.type===t)):[]}static filterAnimationFiles(e){return Array.isArray(e)?e.filter((e=>"animation"===e?.type||"animation_system"===e?.type)):[]}static resolveAnimationEnabled(e){return!1!==e&&"F"!==e&&"false"!==e}}class ld{player;manifest;baseState="idle";activeGesture=null;constructor(e,t){this.player=e,this.manifest=t}setBaseState(e){this.baseState=e;const t=this.activeGesture?this.specFor(this.activeGesture):null;t?t.loop&&(this.activeGesture=null,this.playBase()):this.playBase()}playGesture(e){this.player.play(this.specFor(e)),this.activeGesture=e}specFor(e){return this.manifest[e]??{code:e,kind:"gesture",loop:!1,reps:1}}notifyGestureFinished(e){e===this.activeGesture&&(this.activeGesture=null,this.playBase())}interrupt(){this.activeGesture=null,this.setBaseState("idle")}playBase(){const e=this.manifest[this.baseState];e&&this.player.play(e)}}class hd{renderer;constructor(e){this.renderer=e}play(e){const t=e.loop?{loop:s.LoopRepeat,repetitions:Number.MAX_SAFE_INTEGER}:{loop:s.LoopOnce,repetitions:e.reps??1};this.renderer.playAction(e.code,t)}}const gd=["你好","嗨","hello","hi"],dd={"小":["晓","肖"],"浪":["兰","朗","郎"]};function ud(e){const t=[e],i=[...e];for(let e=0;e<i.length;e++){const A=dd[i[e]];if(A)for(const n of A)t.push(i.slice(0,e).join("")+n+i.slice(e+1).join(""))}return t}function Id(e){return e.replace(/[\s\u3000]+/g,"").replace(/[,。!?、;:\u201c\u201d\u2018\u2019()《》【】\.\,\!\?\;\:\"\'\(\)\[\]\/\\—\-\~\`\@\#\$\%\^\&\*\+\=\|]/g,"").replace(/[A-Za-z]/g,(e=>String.fromCharCode(e.charCodeAt(0)-65248))).toLowerCase()}function Cd(e,t){const i=Id(e),A=t.filter((e=>!gd.includes(e.toLowerCase())));for(const e of A){const t=ud(e);for(const e of t)for(const A of t){const t=Id(e+A);if(i.includes(t))return!0}}return!1}const fd=/^[\s ,。!?、;:“”‘’()《》【】,.\!?;:""''()—\-]+/;function Ed(e,t){if(!e||!t||0===t.length)return e;const i=t.filter((e=>!gd.includes(e.toLowerCase()))).flatMap((e=>ud(e)));if(0===i.length)return e;const A=[...i].sort(((e,t)=>t.length-e.length));let n=e;for(;;){const e=n.toLowerCase();let t=!1;for(const i of A)if(e.startsWith(i.toLowerCase())){n=n.slice(i.length).replace(fd,""),t=!0;break}if(!t)break}return n.trim()}function pd(e,t,i){if(!e)return{matched:!1,query:""};if(i)return Cd(e,t)?{matched:!0,query:Ed(e,t)}:{matched:!1,query:""};const A=e.trim(),n=Ed(A,t);return n===A?{matched:!1,query:""}:{matched:!0,query:n}}function Bd(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=[];for(const A of e){if(gd.includes(A.toLowerCase())){i.push(A);continue}const e=ud(A);if(i.push(...e),t.doubleWakeWord)for(const t of e)for(const A of e)i.push(t+A)}return t.interruptWords&&i.push(...t.interruptWords),[...new Set(i)]}class Qd extends t{name;core=null;config;loading;audio;container="";recorder=null;recorderMessageHandler=null;voiceToTextManager;status;chatOrchestrator;onAnyEvent=null;animationDirector=null;characterData=null;isNotRender=!1;mode="normal";gatewayService=null;framePlayer=null;camera=null;get sessionId(){return this.gatewayService?.sessionId||""}enableProactiveTTSPlayback(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];if(!this.gatewayService)return void console.warn("[Human] enableProactiveTTSPlayback: gatewayService not ready");if(!e)return this.gatewayService.setServerPushTTSCallback(null),this._proactiveAudioCtx?.close().catch((()=>{})),void(this._proactiveAudioCtx=null);let t=24e3,i=[];this.gatewayService.setServerPushTTSCallback((e=>{if("rate"===e.type&&e.sampleRate)e.sampleRate,t=e.sampleRate,i=[];else if("audio"===e.type&&e.audio)i.push(e.audio);else if("end"===e.type&&"tts"===e.endType){if(0===i.length)return void console.warn("[Human] proactive TTS end but no audio chunks, skip");const e=i.reduce(((e,t)=>e+t.byteLength),0),A=new Uint8Array(e);let n=0;for(const e of i)A.set(new Uint8Array(e),n),n+=e.byteLength;i=[];const s=A.byteLength>>1,r=new Int16Array(A.buffer,A.byteOffset,s),a=new Float32Array(r.length);for(let e=0;e<r.length;e++)a[e]=r[e]/32768;try{if(!this._proactiveAudioCtx){const e=window.AudioContext||window.webkitAudioContext;this._proactiveAudioCtx=new e}const e=this._proactiveAudioCtx;"suspended"===e.state&&e.resume();const i=e.createBuffer(1,a.length,t);i.getChannelData(0).set(a);const A=e.createBufferSource();A.buffer=i,A.connect(e.destination),A.start(0);const n=a.length/t;a.length,n.toFixed(2)}catch(e){console.warn("[Human] proactive TTS audio playback failed:",e)}}}))}_proactiveAudioCtx=null;voiceInteractionConfig=null;voiceInteractionState="closed";voiceInteractionExitTimer=null;exitPromptFired=!1;secondExitTimer=null;exitTimerTurnId=0;voiceInteractionConversationId="";voiceInteractionProcessing=!1;voiceInteractionLastText="";voiceInteractionLastTextTime=0;voiceInteractionTTSMode=null;voiceInteractionWebRTCDisabled=!1;ttsState;eventBusHandlers=[];eventBusModule=null;_destroyed=!1;updateTokenWarnedOnce=!1;degradedNotice;static IDLE_LOOP_MODE=2201;static BARGE_IN_MIN_TEXT_LENGTH=8;static BARGE_IN_COOLDOWN_MS=500;static INTERRUPT_INTENT_WORDS=["停止","停一下","暂停","打住","够了","算了","等一下","等等","不要了","不用了","不说了","别说了","不想听","闭嘴","安静","听我说","让我说","跳过","换个话题","打断","退出","结束"];static GREETING_ONLY_WORDS=gd;static CHAR_HOMOPHONES=dd;static generateNameVariants=ud;static normalizeASRText=Id;isDoubleWakeWord(e,t){return Cd(e,t)}speakDirect(e){return new Promise((t=>{if(!this.gatewayService||!this.gatewayService.isConnected())return console.warn("[Human] speakDirect: Gateway not connected"),void t();let A=!1;const n=this.characterData?.id||this.config?.characterId||"",s=this.voiceInteractionConfig?.a2fEnabled??!0,r=this.ttsState.startPlaying(),a=e=>{A||(A=!0,clearTimeout(o),this.framePlayer?.off("playend",c),this.gatewayService?.clearTTSCallback(),this.ttsState.resetIfMatch(r),this.gatewayService?.sendTTSPlaybackState("playback_ended"),this.emit(i.VOICE_INTERACTION_PLAY_END),t())},o=setTimeout((()=>a()),1e4);this.framePlayer&&this.framePlayer.prepareForNewTTS();const c=()=>a();this.framePlayer?.on("playend",c),this.gatewayService.sendTTS({character_id:n,text:e,a2f_enabled:s,synthetic:!0},(e=>{A||("rate"===e.type&&e.sampleRate?this.framePlayer?.setAudioRate(e.sampleRate):"audio"===e.type&&e.audio?this.framePlayer?.addBinaryAudio(e.audio):"a2f"===e.type&&e.blendShapes?this.framePlayer?.addShapes(e.blendShapes):"end"===e.type&&"tts"===e.endType&&setTimeout((()=>{this.framePlayer?.markAudioStreamEnded()}),100))})).catch((e=>{console.warn("[Human] speakDirect sendTTS failed:",e),a()}))}))}lastBargeInTime=0;bargeInInProgress=!1;voiceInteractionAskId=0;isAudioDataDiscarding=!1;audioDiscardingTimer=null;static AUDIO_DISCARDING_TIMEOUT_MS=1e4;isFirstUserInput=!0;static CONTINUATION_WINDOW_MS=3e3;static MIN_VALID_TEXT_LENGTH=2;static NOISE_WORDS=["嗯","啊","哦","噢","呃","额","嗯嗯","啊啊","哎","唉","呀","好","好的","嗯好","好嗯","是","是的","对","对的","行","行的","可以","好吧","那","那个","这","这个","玩具","完剧","好奇","豪气","是我的","是我","我的","喂","诶","哈","哈哈","呵","呵呵","嘿","嘿嘿"];asrTextBuffer=[];asrSilenceTimer=null;pendingASRFinal=!1;static ASR_SILENCE_TIMEOUT_MS=2e3;static DUPLICATE_TEXT_WINDOW_MS=5e3;pendingMergeText=null;textMergeTimer=null;textMergeStartTime=0;static TEXT_MERGE_DELAY_MS=1500;static TEXT_MERGE_MAX_DELAY_MS=5e3;ttsPlaySafetyTimer=null;static DEFAULT_TTS_PLAY_SAFETY_TIMEOUT_MS=3e4;framePlayerPlayEndHandler=null;audioDebugger;webrtcLipSync;constructor(e){if(super(),!e.token)throw new Error("Token is required in configuration");var t;this.status="init",this.name="QuanTeHuman",this.audio=po,this.config=this.mergeConfig(e),e.crypto&&((t=e.crypto).salt&&Ye.enc.Utf8.parse(t.salt),t.iv&&Ye.enc.Utf8.parse(t.iv)),this.setupContainer(e.container),this.degradedNotice=new fs(this.isNotRender?void 0:e.container),this.degradedNotice.syncWithToken(e.token),this.mode=this.config.mode,this.initStorage(),Eo.VOLUMN=this.config.audio.volume||1,this.initFramePlayer(),this.ttsState=new id,this.voiceToTextManager=new Ad({getGatewayService:()=>this.gatewayService,stop:()=>this.stop(),setStatus:e=>{this.status=e},emit:(e,t)=>this.emit(e,t)}),this.audioDebugger=new ed({getFramePlayer:()=>this.framePlayer,getCore:()=>this.core,playIdleAnimation:()=>this.playIdleAnimation()}),this.webrtcLipSync=new td({getGatewayService:()=>this.gatewayService,getCore:()=>this.core,onTTSPlaybackFinalized:()=>this.finalizeTTSPlayback(),addTTSTextToHistory:e=>this.ttsState.addTextToHistory(e),getCurrentTTSText:()=>this.ttsState.currentTTSText,startTTSPlaying:()=>{this.ttsState.startPlaying()}}),this.chatOrchestrator=new od({getGatewayService:()=>this.gatewayService,getFramePlayer:()=>this.framePlayer,getCore:()=>this.core,getCharacterData:()=>this.characterData,getConfig:()=>this.config,getRecorder:()=>this.recorder,getStatus:()=>this.status,setStatus:e=>{this.status=e},getAudio:()=>this.audio,emit:(e,t)=>this.emit(e,t),ttsState:this.ttsState,audioDebugger:this.audioDebugger,webrtcLipSync:this.webrtcLipSync,stop:()=>this.stop(),finalizeTTSPlayback:()=>this.finalizeTTSPlayback(),playIdleAnimation:()=>this.playIdleAnimation(),flushPendingASRIfReady:e=>this.flushPendingASRIfReady(e),getVoiceInteractionState:()=>this.voiceInteractionState}),"render-only"===this.mode||this.initGatewayService().catch((e=>{console.error("[Human] Failed to initialize Gateway service:",e),this.emit(i.HUMAN_ERROR,{code:"GATEWAY_INIT_ERROR",msg:"Failed to initialize Gateway service",details:uo(e)})}))}mergeConfig(e){const t={token:e.token,container:"",characterId:"",audio:{volume:1},render:{fps:30,quality:"medium"},iosAudioMode:"baseline",server:{api:"",wss:"",gateway:""},questionApiParams:{model:"quan",stream:!1,sentence:!0,max_tokens:256,temperature:.95,sse:!0},text2SpeachApiParams:{role:"xiaoxiao",speed:1,sn:10,model:"paddle2",viseme:"a2f",smooth_method:1,smooth_interations:5},modelConfig:{name:"quante",camera:{fov:50},orbitControls:{minPolarAngle:0,maxPolarAngle:Math.PI}},loading:"",loadingDestroy:!0,options:{fps:30},mode:"normal",voiceModeConfig:{keepActive:!1},isNotRender:!0,debug:!1,crypto:void 0};return Gg(t,e)}setupContainer(e){e?(this.container=e,this.isNotRender=!1):this.isNotRender=!0}initFramePlayer(){this.framePlayer=new Vg({fps:this.config.options.fps},((e,t)=>{this.core&&this.core.playByShapes(e,t)}))}clearTTSPlaySafetyTimer(){this.ttsPlaySafetyTimer&&(clearTimeout(this.ttsPlaySafetyTimer),this.ttsPlaySafetyTimer=null)}replaceFramePlayerPlayEndHandler(e){this.framePlayerPlayEndHandler&&(this.framePlayer?.off("playend",this.framePlayerPlayEndHandler),this.framePlayerPlayEndHandler=null),e&&(this.framePlayerPlayEndHandler=e,this.framePlayer?.on("playend",e))}async initGatewayService(){try{const e=this.config.token,t=this.config.server.gateway||"",i=this.config.aecMode??("undefined"!=typeof location?new URLSearchParams(location.search).get("aec"):null)??"off";this.gatewayService=new $g({url:t,token:e,iosAudioMode:this.config.iosAudioMode,aecMode:i,aecProcess:e=>this.framePlayer?this.framePlayer.attachMicAEC(e):Promise.resolve(null),autoReconnect:!0,reconnectInterval:3e3,maxReconnectAttempts:5}),this.gatewayService.setTTSDataChannelCallback((()=>{})),this.setupGatewayEventForwarding(),await this.gatewayService.connect()}catch(e){throw console.error("[Human] Failed to initialize Gateway service:",e),e}}setupGatewayEventForwarding(){this.eventBusModule=Xg;const e=[{event:i.GATEWAY_CONNECTED,handler:()=>{this.emit(i.GATEWAY_CONNECTED)}},{event:i.GATEWAY_DISCONNECTED,handler:()=>{this.emit(i.GATEWAY_DISCONNECTED)}},{event:i.GATEWAY_RECONNECTING,handler:()=>{this.emit(i.GATEWAY_RECONNECTING)}},{event:i.GATEWAY_MESSAGE,handler:e=>{if(this.emit(i.GATEWAY_MESSAGE,e),"character_action"===e.type&&e.data){const t=e.data,A=[(t.name||"").replace(/\[#(.+)#\]/,"$1")];A[0]&&this.animationDirector?.playGesture(A[0]),this.emit(i.HUMAN_ACTION_PENDING,{actions:A,name:t.name,inputs:t.inputs||{}})}}},{event:i.GATEWAY_ERROR,handler:e=>{this.emit(i.HUMAN_ERROR,e)}},{event:i.VOICE_INTERACTION_WEBRTC_STATE,handler:e=>{"ready"!==e.state?"closed"===e.state&&(this.voiceInteractionWebRTCDisabled=!0,"websocket"!==this.voiceInteractionTTSMode&&(this.voiceInteractionTTSMode="websocket")):this.voiceInteractionWebRTCDisabled||null!==this.voiceInteractionTTSMode||(this.voiceInteractionTTSMode="webrtc")}},{event:i.WEBRTC_TTS_PLAY_START,handler:()=>{const e=this.ttsState.startPlaying();this.ttsPlaySafetyTimer&&clearTimeout(this.ttsPlaySafetyTimer),this.ttsPlaySafetyTimer=setTimeout((()=>{this.ttsState.resetIfMatch(e)&&(this.replaceFramePlayerPlayEndHandler(null),console.warn("[Human] TTS 播放安全超时,强制重置 isTTSPlaying (playId:",e,")"),this.flushPendingASRIfReady("tts-safety-timeout"),this.emit(i.VOICE_INTERACTION_PLAY_END))}),this.voiceInteractionConfig?.ttsSafetyTimeoutMs??Qd.DEFAULT_TTS_PLAY_SAFETY_TIMEOUT_MS),this.replaceFramePlayerPlayEndHandler((()=>{this.ttsState.resetIfMatch(e)&&(this.clearTTSPlaySafetyTimer(),this.ttsState.currentTTSText&&this.ttsState.addTextToHistory(this.ttsState.currentTTSText),this.flushPendingASRIfReady("frameplayer-playend")),this.replaceFramePlayerPlayEndHandler(null)})),this.isAudioDataDiscarding&&(this.isAudioDataDiscarding=!1,this.audioDiscardingTimer&&(clearTimeout(this.audioDiscardingTimer),this.audioDiscardingTimer=null)),this.isFirstUserInput=!1,this.textMergeTimer&&(clearTimeout(this.textMergeTimer),this.textMergeTimer=null,this.pendingMergeText&&(this.asrTextBuffer=[this.pendingMergeText],this.pendingASRFinal=!0,this.pendingMergeText,this.pendingMergeText=null,this.textMergeStartTime=0))}},{event:i.WEBRTC_TTS_PLAY_END,handler:()=>{this.clearTTSPlaySafetyTimer(),this.replaceFramePlayerPlayEndHandler(null),this.ttsState.currentTTSText&&this.ttsState.addTextToHistory(this.ttsState.currentTTSText),this.ttsState.reset(),this.flushPendingASRIfReady("webrtc-tts-end")}},{event:i.TOOL_RESULT,handler:e=>{this.emit(i.TOOL_RESULT,e)}}];e.forEach((e=>{let{event:t,handler:i}=e;return Xg.on(t,i)})),this.eventBusHandlers=e}async refreshGatewayToken(){try{const e=await(async()=>ro.get("/human-auth/gateway/token",{}))();return 0===e.code&&e.data?(Es.setItem("apigateway-token",e.data),e.data):null}catch(e){return console.error("[Human] Failed to refresh Gateway token:",e),null}}async setCharacterData(e){const t=await(i=e,ro.get(`/human-auth/characters/${i}`,{}));var i;if(0!==t.code)throw new Error(t.msg);return this.characterData=t.data,!0}async setCharacter(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e)return!1;const s=t.loading||this.config.loading;if(s&&(this.loading&&this.loading.destroy(),this.loading=new A(s,this)),await this.setCharacterData(e),!this.characterData)return!1;this.config.modelConfig=this.characterData.configuration,this.config=Gg(this.config,{modelConfig:this.characterData.configuration},t);const r=cd.resolveCharacter(this.characterData,this.config),a=cd.toModelDescription(r);if(this.config.modelConfig.name&&"undefined"!=typeof window){const e=`__qt_human_${this.config.modelConfig.name}`;window[e]=this}this.core&&(this.core.destroy(),this.core.offAny(this.onAnyEvent),this.core=null,this.onAnyEvent=null),this.core=new n(this.container,a,this),this.onAnyEvent=(e,t)=>{if("action.finished"===e){const e=Array.isArray(t)?t[0]:t;this.animationDirector?.notifyGestureFinished(String(e??""))}this.emit(String(e),t)},this.core.onAny(this.onAnyEvent),this.setupAnimationDirector();this.characterData,this.config;const o=[...r.assets.aposes,...r.assets.animations];if(!this.isNotRender){const e=r.assets.scene;if(e?.path){const t=e.path;"glb"===e.type?gs([{bundle:t,name:e.name||"",type:"apose",enabled:!0,code:e.id||"",id:e.id||""}]).then((e=>{this.core?.changeBundle(e[0])})):"video"===e.type?this.core?.setVideoBackground(t):"picture"===e.type?this.core?.loadCubeBackground(e.pictures||[]):"background"===e.type&&"string"==typeof e.background?this.core?.setBackgroundColorOrGradient(e.background):this.core.setBackground(t)}r.behavior.animationEnabled||this.core.muteAction(!0)}return gs(o,(e=>{this.emit(i.HUMAN_LOAD_PROGRESS,{code:"download",progress:e,total:Math.floor(.99*e)})})).then((e=>this.core.loadBundles(e,(e=>{this.emit(i.HUMAN_LOAD_PROGRESS,{code:"loaded",progress:e,total:Math.floor(99+.01*e)})})))).then((()=>(this.status="ready",this.emit(i.HUMAN_READY),this.loading&&this.config.loadingDestroy&&setTimeout((()=>{this.loading.destroy()}),500),this.isNotRender||t.isNotRender||this.startRender(),!0))).catch((e=>(console.error("load model error...",e),!1)))}async speak(e,t){return this.chatOrchestrator.speak(e,t)}async askCommand(e,t){return this.chatOrchestrator.askCommand(e,t)}async askStream(e,t,i){return this.chatOrchestrator.askStream(e,t,i)}async ask(e,t){return this.chatOrchestrator.ask(e,t)}async speakByAudioShapes(e,t){return this.chatOrchestrator.speakByAudioShapes(e,t)}async speakByAudioStreamShapes(e,t,i){return this.chatOrchestrator.speakByAudioStreamShapes(e,t,i)}async speakByAudio(e,t){return this.chatOrchestrator.speakByAudio(e,t)}async startVoice2Text(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>{};return this.voiceToTextManager.startVoice2Text(e)}async stopVoice2Text(e){return this.voiceToTextManager.stopVoice2Text(e)}sendToolAction(e,t,i){this.gatewayService?this.gatewayService.sendToolAction(e,t,i):console.warn("[Human] Cannot send tool action: gateway not initialized")}async stop(){try{return this.chatOrchestrator.stopPlayback(),this.audio.pause(),this.emit(i.AUDIO_PAUSE),(()=>{for(const[e,t]of Object.entries(oo))t.length>0&&(t.forEach((e=>{try{e instanceof AbortController?e.abort():"object"==typeof(t=e)&&null!==t&&"function"==typeof t.close?e.close():e.cancel("终止请求")}catch(e){console.warn(e.message)}var t})),oo[e]=[])})(),this.gatewayService&&this.gatewayService.isConnected()&&this.gatewayService.sendInterrupt(),this.finalizeTTSPlayback(),this.gatewayService?.sendTTSPlaybackState("playback_ended"),this.framePlayer&&await this.framePlayer.clear(),this.status="ready",!0}catch(e){return console.error("[Human] stop error:",e),this.emit(i.HUMAN_ERROR,{code:"STOP_ERROR",msg:"Failed to stop",details:uo(e)}),!1}}async stopPlayback(){this.finalizeTTSPlayback(),this.gatewayService?.sendTTSPlaybackState("playback_ended"),this.flushPendingASRIfReady("stop-playback"),this.audio.pause(),this.chatOrchestrator.stopPlayback(),this.emit(i.AUDIO_PAUSE),this.framePlayer&&await this.framePlayer.clear()}getStatus(){return this.status}initStorage(){Es.setItem(ps,this.config.token),Es.setItem("wss-url",this.config.server.wss),Es.setItem(Bs,this.config.server.api),ro.setConfig({baseURL:this.config.server.api})}muteAudio(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];try{Eo.MUTED=e,this.audio.mute(e),this.chatOrchestrator.muteAllAudio(e)}catch(e){console.error("[Human] muteAudio error:",e),this.emit(i.HUMAN_ERROR,{code:"MUTE_AUDIO_ERROR",msg:"Failed to mute/unmute audio",details:uo(e)})}}muteAction(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];try{if(!this.core)return void console.warn("[Human] Core is not initialized, cannot mute action");this.core.muteAction(e)}catch(e){console.error("[Human] muteAction error:",e),this.emit(i.HUMAN_ERROR,{code:"MUTE_ACTION_ERROR",msg:"Failed to mute/unmute action",details:uo(e)})}}dealVoice2Text(e){this.voiceToTextManager.dealVoice2Text(e)}async enableAudio(){this.framePlayer&&await this.framePlayer.enableAudio()}enableAudioDebug(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.audioDebugger.enableAudioDebug(e)}getDebugAudioInfo(){return this.audioDebugger.getDebugAudioInfo()}downloadDebugAudio(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"debug_audio";this.audioDebugger.downloadDebugAudio(e)}async playDebugAudio(e){return this.audioDebugger.playDebugAudio(e)}async playDebugAudio2(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.audioDebugger.playDebugAudio2(e,t)}playIdleAnimation(){this.core?.playAction("idle",{loop:Qd.IDLE_LOOP_MODE,repetitions:Number.MAX_SAFE_INTEGER})}finalizeTTSPlayback(){this.ttsState.reset(),this.core?.stopServerShapes(),this.playIdleAnimation()}async destroy(){if(!this._destroyed){this._destroyed=!0;try{if(this.degradedNotice?.destroy(),"closed"!==this.voiceInteractionState&&await this.closeVoiceInteraction(),await this.stop(),this.audioDiscardingTimer&&(clearTimeout(this.audioDiscardingTimer),this.audioDiscardingTimer=null),this.voiceInteractionExitTimer&&(clearTimeout(this.voiceInteractionExitTimer),this.voiceInteractionExitTimer=null),this.asrSilenceTimer&&(clearTimeout(this.asrSilenceTimer),this.asrSilenceTimer=null),this.textMergeTimer&&(clearTimeout(this.textMergeTimer),this.textMergeTimer=null),this.clearTTSPlaySafetyTimer(),this.replaceFramePlayerPlayEndHandler(null),this.eventBusModule&&this.eventBusHandlers.length>0&&(this.eventBusHandlers.forEach((e=>{let{event:t,handler:i}=e;this.eventBusModule.off(t,i)})),this.eventBusHandlers=[],this.eventBusModule=null),this.config?.modelConfig?.name&&"undefined"!=typeof window){const e=`__qt_human_${this.config.modelConfig.name}`;window[e]=null}this.recorder&&(this.recorderMessageHandler&&this.recorder.off("message",this.recorderMessageHandler),this.recorder.destroy(),this.recorder=null,this.recorderMessageHandler=null),this.core&&(this.onAnyEvent&&(this.core.offAny(this.onAnyEvent),this.onAnyEvent=null),this.core.destroy(),this.core=null),this.gatewayService&&(this.gatewayService.destroy(),this.gatewayService=null),this.framePlayer&&(await this.framePlayer.clear(),this.framePlayer=null),this.audioDebugger.destroy(),this.webrtcLipSync.destroy(),this.ttsState.destroy(),this.voiceToTextManager.destroy(),this.chatOrchestrator.destroy(),this.camera&&(this.camera.destroy(),this.camera=null),this.loading&&(this.loading.destroy(),this.loading=void 0),this.characterData=null,this.voiceInteractionConfig=null,this.voiceInteractionState="closed",this.voiceInteractionConversationId="",this.status="init"}catch(e){console.error("[Human] destroy error:",e),this.emit(i.HUMAN_ERROR,{code:"DESTROY_ERROR",msg:"Failed to destroy instance",details:uo(e)})}}}async refreshAuthToken(e){if(!e)throw new Error("Token cannot be empty");if(this.config.token=e,Es.setItem(ps,e),this.degradedNotice?.syncWithToken(e),!this.gatewayService)return void console.warn("[Human] refreshAuthToken called before gatewayService init");let t=null;try{t=await this.refreshGatewayToken()}catch(e){console.warn("[Human] refreshGatewayToken threw; falling back to raw token for gateway reauth:",e)}const i=t||e;t||console.warn("[Human] refreshGatewayToken returned empty; using raw token for gateway reauth (public-page scenario?)"),await this.gatewayService.refreshAuthToken(i)}updateToken(e){this.updateTokenWarnedOnce||(this.updateTokenWarnedOnce=!0,console.warn("[Human] updateToken() is deprecated; use refreshAuthToken() which triggers same-connection reauth.")),this.refreshAuthToken(e).catch((e=>{console.error("[Human] updateToken shim: refreshAuthToken rejected:",e),this.emit(i.HUMAN_ERROR,{code:"UPDATE_TOKEN_ERROR",msg:"Failed to update token",details:uo(e)})}))}setAngleView(e){let{camera:t}=e;this.core&&t&&this.core.setAngleView({camera:t})}playAction(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.core&&this.core.playAction(e,t),Promise.resolve()}getModelInfo(){return this.core?this.core.getModelInfo():null}setupAnimationDirector(){this.core&&(this.animationDirector=new ld(new hd(this.core),ds),this.core.setAutoReturnToIdle(!1),this.core.animationDirector=this.animationDirector)}async createVoiceConversation(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.gatewayService||!this.gatewayService.isConnected())throw new Error("[Human] createVoiceConversation 须在 Gateway 连接后调用(等待 HUMAN_READY)");if(!this.framePlayer)throw new Error("[Human] createVoiceConversation 须在 framePlayer 就绪后调用(等待 HUMAN_READY)");const t=e.characterId||this.characterData?.id;if(!t)throw new Error("[Human] createVoiceConversation 须先 setCharacter,或在 config.characterId 显式传入形象 ID");const{VoiceConversation:i}=await Promise.resolve().then((function(){return Kd}));return new i({...e,gateway:this.gatewayService,renderer:this.core,animationDirector:this.animationDirector??void 0,framePlayer:this.framePlayer,characterId:t})}async openVoiceInteraction(e){if(!this.gatewayService||!this.gatewayService.isConnected())return this.emit(i.HUMAN_ERROR,{code:"GATEWAY_NOT_CONNECTED",msg:"Gateway service is not connected"}),Promise.reject(new Error("Gateway service is not connected"));if(!this.characterData)return this.emit(i.HUMAN_ERROR,{code:"CHARACTER_NOT_LOADED",msg:"Character data is not loaded"}),Promise.reject(new Error("Character data is not loaded"));if(this.voiceInteractionConfig={wakeWords:e.wakeWords||[],exitWords:e.exitWords||[],interruptWords:e.interruptWords||[],sampleRate:e.sampleRate||24e3,exitTime:e.exitTime||3e4,keepActive:e.keepActive||!1,autoAsk:!1!==e.autoAsk,silenceTimeout:e.silenceTimeout||1500,a2fEnabled:!1!==e.a2fEnabled,doubleWakeWord:e.doubleWakeWord??!1,wakeConfirmText:e.wakeConfirmText,syntheticTexts:e.syntheticTexts||[],continuousWindowMs:e.continuousWindowMs,gracefulExitPrompt:e.gracefulExitPrompt,gracefulExitEnabled:e.gracefulExitEnabled??!1,bargeInStrictMode:e.bargeInStrictMode??!1,bargeInCooldownMs:e.bargeInCooldownMs,llmTimeoutMs:e.llmTimeoutMs,llmMaxRetry:e.llmMaxRetry,webrtcReconnectInterval:e.webrtcReconnectInterval,webrtcMaxReconnectAttempts:e.webrtcMaxReconnectAttempts,vadGateWindowMs:e.vadGateWindowMs,vadGraceMs:e.vadGraceMs,interruptFollowUpWindowMs:e.interruptFollowUpWindowMs,gracefulExitPhase2Prompt:e.gracefulExitPhase2Prompt,gracefulExitPhase2Silence:e.gracefulExitPhase2Silence,gracefulExitPhase3Silence:e.gracefulExitPhase3Silence,interruptWordFilterMs:e.interruptWordFilterMs,welcomeAsrResumeDelayMs:e.welcomeAsrResumeDelayMs,voiceAskTimeout:e.voiceAskTimeout,ttsSafetyTimeoutMs:e.ttsSafetyTimeoutMs},this.voiceInteractionState=this.voiceInteractionConfig.keepActive?"active":"sleeping",this.voiceInteractionProcessing=!1,this.voiceInteractionLastText="",this.voiceInteractionLastTextTime=0,this.ttsState.clearCurrentText(),this.ttsState.reset(),this.gatewayService&&this.gatewayService.isConnected()){const e=this.voiceInteractionConfig.wakeWords||[],t=[];for(const i of e){if(Qd.GREETING_ONLY_WORDS.includes(i.toLowerCase())){t.push(i);continue}const e=Qd.generateNameVariants(i);if(t.push(...e),this.voiceInteractionConfig.doubleWakeWord)for(const i of e)for(const A of e)t.push(i+A)}const i=this.voiceInteractionConfig.interruptWords||[];t.push(...i);const A=[...new Set(t)],n=[...new Set([this.voiceInteractionConfig.wakeConfirmText,this.voiceInteractionConfig.gracefulExitPrompt,...this.voiceInteractionConfig.syntheticTexts||[]].filter((e=>"string"==typeof e&&e.trim().length>0)).map((e=>e.trim())))];this.gatewayService.sendVoiceInteractionConfig({wakeWords:A,syntheticTexts:n}),A.length}try{return await this.createVoiceInteractionWebRTC(),this.emit(i.VOICE_INTERACTION_OPENED,{state:this.voiceInteractionState,config:this.voiceInteractionConfig}),this.voiceInteractionState,this.voiceInteractionTTSMode=null,this.voiceInteractionWebRTCDisabled=!1,!0}catch(e){return console.error("[Human] Failed to open voice interaction:",e),this.emit(i.HUMAN_ERROR,{code:"VOICE_INTERACTION_OPEN_ERROR",msg:"Failed to open voice interaction",details:uo(e)}),!1}}async closeVoiceInteraction(){try{return this.voiceInteractionExitTimer&&(clearTimeout(this.voiceInteractionExitTimer),this.voiceInteractionExitTimer=null),this.secondExitTimer&&(clearTimeout(this.secondExitTimer),this.secondExitTimer=null),this.exitPromptFired=!1,this.exitTimerTurnId++,this.asrSilenceTimer&&(clearTimeout(this.asrSilenceTimer),this.asrSilenceTimer=null),this.asrTextBuffer=[],this.pendingASRFinal=!1,this.voiceInteractionTTSMode=null,this.voiceInteractionWebRTCDisabled=!1,this.textMergeTimer&&(clearTimeout(this.textMergeTimer),this.textMergeTimer=null),this.pendingMergeText=null,this.textMergeStartTime=0,this.clearTTSPlaySafetyTimer(),this.replaceFramePlayerPlayEndHandler(null),this.isFirstUserInput=!0,this.gatewayService&&this.gatewayService.closeWebRTCConnection(),this.voiceInteractionState="closed",this.voiceInteractionConfig=null,this.emit(i.VOICE_INTERACTION_CLOSED),!0}catch(e){return console.error("[Human] Failed to close voice interaction:",e),this.emit(i.HUMAN_ERROR,{code:"VOICE_INTERACTION_CLOSE_ERROR",msg:"Failed to close voice interaction",details:uo(e)}),!1}}wakeVoiceInteraction(){"sleeping"===this.voiceInteractionState?this.handleVoiceInteractionWakeup():this.voiceInteractionState}sleepVoiceInteraction(){"active"===this.voiceInteractionState?this.handleVoiceInteractionSleep():this.voiceInteractionState}async createVoiceInteractionWebRTC(){this.emit(i.VOICE_INTERACTION_AUDIO_START);const e=await this.gatewayService.createWebRTCConnection((e=>{this.handleVoiceInteractionASR(e)}));e.addEventListener("connectionstatechange",(()=>{const t=e.connectionState;this.emit(i.VOICE_INTERACTION_WEBRTC_STATE,{state:t}),"failed"!==t&&"disconnected"!==t||this.emit(i.HUMAN_ERROR,{code:"WEBRTC_CONNECTION_FAILED",msg:"WebRTC connection failed or disconnected"})}))}handleVoiceInteractionASR(e){const{text:t,isFinal:i}=e;if(this.bargeInInProgress)return;this.asrTextBuffer.length,this.ttsState.isTTSPlaying,this.voiceInteractionProcessing;const A=Date.now();if(this.ttsState.isTTSPlaying){if(!t||!t.trim())return;const e=t.trim(),i=this.voiceInteractionConfig,n=i?.wakeWords||[],s=i?.interruptWords||[],r=n.filter((e=>!Qd.GREETING_ONLY_WORDS.includes(e.toLowerCase()))).flatMap((e=>Qd.generateNameVariants(e))),a=[...r,...s];this.voiceInteractionProcessing;if(a.some((t=>t&&e.toLowerCase().includes(t.toLowerCase())))){A-this.lastBargeInTime<Qd.BARGE_IN_COOLDOWN_MS||(this.bargeInInProgress=!0,this.triggerBargeIn(e))}}else t&&t.trim()?(this.asrTextBuffer.push(t.trim()),this.asrTextBuffer,this.asrSilenceTimer&&(clearTimeout(this.asrSilenceTimer),this.asrSilenceTimer=null),i?this.processCompleteASRText():this.asrSilenceTimer=setTimeout((()=>{this.processCompleteASRText()}),Qd.ASR_SILENCE_TIMEOUT_MS)):i&&this.asrTextBuffer.length>0&&this.processCompleteASRText()}flushPendingASRIfReady(e){if(this.ttsState.isTTSPlaying)return;if(!this.pendingASRFinal)return;if(0===this.asrTextBuffer.length)return void(this.pendingASRFinal=!1);this.asrTextBuffer.length,this.pendingASRFinal=!1,this.asrSilenceTimer&&(clearTimeout(this.asrSilenceTimer),this.asrSilenceTimer=null);const t=this.asrTextBuffer.join("");this.asrTextBuffer=[],t.trim()&&(this.isNoiseText(t)||this.sendTextToProcess(t))}processCompleteASRText(){this.asrSilenceTimer&&(clearTimeout(this.asrSilenceTimer),this.asrSilenceTimer=null),this.pendingASRFinal=!1;const e=this.asrTextBuffer.join("");if(this.asrTextBuffer=[],e.trim()&&!this.isNoiseText(e)){if(this.isFirstUserInput&&!this.ttsState.isTTSPlaying&&"active"===this.voiceInteractionState){this.pendingMergeText=(this.pendingMergeText||"")+e,this.textMergeTimer&&clearTimeout(this.textMergeTimer),this.textMergeStartTime||(this.textMergeStartTime=Date.now());const t=Date.now()-this.textMergeStartTime;return t>=Qd.TEXT_MERGE_MAX_DELAY_MS?void this.flushMergedText():(this.pendingMergeText,Qd.TEXT_MERGE_MAX_DELAY_MS,void(this.textMergeTimer=setTimeout((()=>{this.flushMergedText()}),Qd.TEXT_MERGE_DELAY_MS)))}this.sendTextToProcess(e)}}flushMergedText(){this.textMergeTimer&&(clearTimeout(this.textMergeTimer),this.textMergeTimer=null);const e=this.textMergeStartTime?Date.now()-this.textMergeStartTime:0,t=e>=Qd.TEXT_MERGE_MAX_DELAY_MS;if(this.asrTextBuffer.length>0&&!t)return this.asrTextBuffer.length,Qd.TEXT_MERGE_MAX_DELAY_MS,void(this.textMergeTimer=setTimeout((()=>{this.flushMergedText()}),Qd.TEXT_MERGE_DELAY_MS));if(this.asrTextBuffer.length>0){const e=this.asrTextBuffer.join("");this.asrTextBuffer=[],this.pendingMergeText=(this.pendingMergeText||"")+e}this.pendingMergeText&&(this.pendingMergeText,this.sendTextToProcess(this.pendingMergeText),this.pendingMergeText=null),this.textMergeStartTime=0}sendTextToProcess(e){const t=this.voiceInteractionConfig;if(t)if("sleeping"!==this.voiceInteractionState){if("active"===this.voiceInteractionState){if(!t.keepActive&&this.checkKeywords(e,t.exitWords||[]))return void this.handleVoiceInteractionSleep();if(this.resetVoiceInteractionExitTimer(),this.emit(i.VOICE2TEXT,{text:e,isFinal:!0}),t.autoAsk&&e.trim()){if(this.voiceInteractionProcessing)return;const i=Date.now()-this.voiceInteractionLastTextTime;if(e.trim()===this.voiceInteractionLastText&&i<Qd.DUPLICATE_TEXT_WINDOW_MS)return void Qd.DUPLICATE_TEXT_WINDOW_MS;const A=t.wakeWords||[],n=t.interruptWords||[],s=[...A.flatMap((e=>Qd.generateNameVariants(e))),...n];let r=e.trim();for(const e of s){const t=new RegExp(`^${lo(e)}[,,。??!!]?\\s*`,"gi");r=r.replace(t,"").trim()}const a=/[\u4e00-\u9fa5a-zA-Z0-9]/.test(r)?r:e.trim();if(a){this.voiceInteractionLastText=e.trim(),this.voiceInteractionLastTextTime=Date.now(),this.voiceInteractionProcessing=!0;const t=this.handleVoiceInteractionAsk(a),i=this.voiceInteractionAskId;t.finally((()=>{i===this.voiceInteractionAskId&&(this.voiceInteractionProcessing=!1)}))}}}}else{const A=t.doubleWakeWord??!1;let n;if(n=A?this.isDoubleWakeWord(e,t.wakeWords||[]):this.checkKeywords(e,t.wakeWords||[]),n){const A=t.wakeConfirmText;if(A)this.handleVoiceInteractionWakeup(!0),this.emit(i.VOICE_INTERACTION_WAKE_CONFIRM,{text:A}),this.speakDirect(A).then((()=>{"active"===this.voiceInteractionState&&this.resetVoiceInteractionExitTimer()})).catch((e=>{console.warn("[Human] Wake confirm TTS failed:",e),"active"===this.voiceInteractionState&&this.resetVoiceInteractionExitTimer()}));else if(this.handleVoiceInteractionWakeup(),t.autoAsk){this.emit(i.VOICE2TEXT,{text:e,isFinal:!0}),this.voiceInteractionProcessing=!0,this.voiceInteractionLastText=e.trim(),this.voiceInteractionLastTextTime=Date.now();const t=this.handleVoiceInteractionAsk(e),A=this.voiceInteractionAskId;t.finally((()=>{A===this.voiceInteractionAskId&&(this.voiceInteractionProcessing=!1)}))}return}t.wakeWords}else this.emit(i.VOICE2TEXT,{text:e,isFinal:!0})}checkKeywords(e,t){if(!t||0===t.length)return!1;const i=e.toLowerCase();return t.some((e=>i.includes(e.toLowerCase())))}containsInterruptIntent(e){if(!e)return!1;const t=e.toLowerCase();return Qd.INTERRUPT_INTENT_WORDS.some((e=>t.includes(e.toLowerCase())))}async triggerBargeIn(e){const t=Date.now();if(t-this.lastBargeInTime<Qd.BARGE_IN_COOLDOWN_MS)this.bargeInInProgress=!1;else try{if(this.lastBargeInTime=t,++this.voiceInteractionAskId,this.voiceInteractionAskId,this.isAudioDataDiscarding=!0,this.audioDiscardingTimer&&clearTimeout(this.audioDiscardingTimer),this.audioDiscardingTimer=setTimeout((()=>{this.isAudioDataDiscarding&&(this.isAudioDataDiscarding=!1)}),Qd.AUDIO_DISCARDING_TIMEOUT_MS),await this.stopPlayback(),this.gatewayService&&this.gatewayService.isConnected()&&this.gatewayService.sendInterrupt(),this.asrTextBuffer=[],this.asrSilenceTimer&&(clearTimeout(this.asrSilenceTimer),this.asrSilenceTimer=null),this.pendingASRFinal=!1,this.voiceInteractionProcessing=!1,this.textMergeTimer&&(clearTimeout(this.textMergeTimer),this.textMergeTimer=null),this.pendingMergeText=null,this.textMergeStartTime=0,this.emit(i.VOICE_INTERACTION_INTERRUPT),this.emit(i.VOICE_INTERRUPT),this.emit(i.VOICE_BARGE_IN,{text:e}),await new Promise((e=>setTimeout(e,150))),e.trim()){const t=this.voiceInteractionConfig,A=t?.wakeWords||[],n=t?.interruptWords||[],s=[...A.flatMap((e=>Qd.generateNameVariants(e))),...n];let r=e.trim();for(const e of s){const t=new RegExp(`^${lo(e)}[,,。??!!]?\\s*`,"gi");r=r.replace(t,"").trim()}const a=/[\u4e00-\u9fa5a-zA-Z0-9]/.test(r)?r:"";if(a&&(this.voiceInteractionLastText=e.trim(),this.voiceInteractionLastTextTime=Date.now(),this.emit(i.VOICE2TEXT,{text:a,isFinal:!0,isBargeIn:!0}),t?.autoAsk)){this.voiceInteractionProcessing=!0;const e=this.handleVoiceInteractionAsk(a),t=this.voiceInteractionAskId;e.finally((()=>{t===this.voiceInteractionAskId&&(this.voiceInteractionProcessing=!1)}))}}}finally{setTimeout((()=>{this.bargeInInProgress=!1}),100)}}isNoiseText(e){if(!e)return!0;const t=e.replace(/[,。?!、,.\?!::;;\s]/g,"").toLowerCase();if(t.length<Qd.MIN_VALID_TEXT_LENGTH)return t.length,!0;const i=e.trim().replace(/[,。?!、,.\?!::;;]/g,"");return!(!Qd.NOISE_WORDS.includes(i)&&!Qd.NOISE_WORDS.includes(t))||!!/^(\d+|(.)\2*)$/.test(t)}handleVoiceInteractionWakeup(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.voiceInteractionState="active",this.emit(i.VOICE_INTERACTION_WAKEUP),this.emit(i.VOICE_WAKE),e||this.resetVoiceInteractionExitTimer()}handleVoiceInteractionSleep(){this.voiceInteractionState="sleeping",this.voiceInteractionExitTimer&&(clearTimeout(this.voiceInteractionExitTimer),this.voiceInteractionExitTimer=null),this.secondExitTimer&&(clearTimeout(this.secondExitTimer),this.secondExitTimer=null),this.exitPromptFired=!1,this.exitTimerTurnId++,this.voiceInteractionProcessing=!1,this.voiceInteractionLastText="",this.voiceInteractionLastTextTime=0,this.emit(i.VOICE_INTERACTION_SLEEP),this.emit(i.VOICE_SLEEP)}handleVoiceInteractionInterrupt(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stopPlayback(),this.asrSilenceTimer&&(clearTimeout(this.asrSilenceTimer),this.asrSilenceTimer=null),e&&this.gatewayService&&this.gatewayService.isConnected()&&this.gatewayService.sendInterrupt(),e&&(this.voiceInteractionProcessing=!1),this.emit(i.VOICE_INTERACTION_INTERRUPT),this.emit(i.VOICE_INTERRUPT)}async handleVoiceInteractionAsk(e){if(!this.characterData)return;const t=++this.voiceInteractionAskId;let A=!1;const n=()=>{A||t!==this.voiceInteractionAskId||(A=!0,this.emit(i.VOICE_INTERACTION_PLAY_START,{text:e}))};this.on(i.CHAT_MESSAGE_BS_PLAY_START,n);const s=this.voiceInteractionConfig?.voiceAskTimeout??12e4;try{if(await Promise.race([this.askStream({message:[{role:"user",content:e}],conversation_id:this.voiceInteractionConversationId,inputs:{use_webrtc_tts:!1,a2f_enabled:!1!==this.voiceInteractionConfig?.a2fEnabled}},(e=>{0===e.code&&e.data&&e.data.forEach((e=>{e.conversation_id&&(this.voiceInteractionConversationId=e.conversation_id)}))}),{skipStop:!0}),new Promise(((e,t)=>setTimeout((()=>t(new Error("Voice interaction ask timeout"))),s)))]),this.off(i.CHAT_MESSAGE_BS_PLAY_START,n),t!==this.voiceInteractionAskId)return void this.voiceInteractionAskId;this.emit(i.VOICE_INTERACTION_PLAY_END,{text:e}),this.exitPromptFired||this.resetVoiceInteractionExitTimer(),this.isFirstUserInput=!1,this.gatewayService&&this.gatewayService.isConnected()&&this.gatewayService.sendInterrupt()}catch(A){if(this.off(i.CHAT_MESSAGE_BS_PLAY_START,n),t!==this.voiceInteractionAskId)return void this.voiceInteractionAskId;A instanceof Error&&"Voice interaction ask timeout"===A.message?console.warn("[Human] Voice interaction ask timeout ("+s/1e3+"s)"):(console.error("[Human] Voice interaction ask error:",A),this.emit(i.HUMAN_ERROR,{code:"VOICE_INTERACTION_ASK_ERROR",msg:"Failed to process voice interaction",details:uo(A)})),this.emit(i.VOICE_INTERACTION_PLAY_END,{text:e}),this.exitPromptFired||this.resetVoiceInteractionExitTimer()}}resetVoiceInteractionExitTimer(){this.voiceInteractionExitTimer&&(clearTimeout(this.voiceInteractionExitTimer),this.voiceInteractionExitTimer=null),this.secondExitTimer&&(clearTimeout(this.secondExitTimer),this.secondExitTimer=null),this.exitPromptFired=!1;const e=++this.exitTimerTurnId;if(this.voiceInteractionConfig?.keepActive)return;if("active"!==this.voiceInteractionState)return;const t=this.voiceInteractionConfig,A=t?.gracefulExitEnabled??!1,n=t?.continuousWindowMs||t?.exitTime||3e4,s=t?.gracefulExitPrompt||"还有什么要问的吗?";this.voiceInteractionExitTimer=setTimeout((()=>{if(this.exitTimerTurnId===e&&"active"===this.voiceInteractionState)return this.voiceInteractionProcessing||this.ttsState.isTTSPlaying?(this.voiceInteractionProcessing,void this.ttsState.isTTSPlaying):void(A?(this.exitPromptFired=!0,this.emit(i.VOICE_INTERACTION_EXIT_PROMPT,{text:s}),this.speakDirect(s).finally((()=>{if(this.exitTimerTurnId!==e)return;if("active"!==this.voiceInteractionState)return;this.emit(i.VOICE_INTERACTION_POST_EXIT_IDLE),this.secondExitTimer=setTimeout((()=>{this.exitTimerTurnId===e&&this.handleVoiceInteractionSleep()}),18e4)}))):this.handleVoiceInteractionSleep())}),n)}offlineRender(e){this.core&&(this.core.destroy(),this.core.offAny(this.onAnyEvent),this.core=null,this.onAnyEvent=null);const t=cd.resolveOffline(this.config.modelConfig,e,this.config),A=cd.toModelDescription(t),s=[...t.assets.aposes,...t.assets.animations];this.core=new n(this.container,A,this),this.onAnyEvent=(e,t)=>{if("action.finished"===e){const e=Array.isArray(t)?t[0]:t;this.animationDirector?.notifyGestureFinished(String(e??""))}this.emit(String(e),t)},this.core.onAny(this.onAnyEvent),this.setupAnimationDirector();return gs(s,(e=>{this.emit(i.HUMAN_LOAD_PROGRESS,{code:"download",progress:e,total:Math.floor(.99*e)})})).then((e=>this.core.loadBundles(e,(e=>{this.emit(i.HUMAN_LOAD_PROGRESS,{code:"loaded",progress:e,total:Math.floor(99+.01*e)})})))).then((()=>(this.status="ready",this.emit(i.HUMAN_READY),this.loading&&this.config.loadingDestroy&&setTimeout((()=>{this.loading.destroy()}),500),this.isNotRender||this.core.animate.call(this.core),!0))).catch((e=>(console.error("load model error...",e),!1)))}startRender(){return this.core?(this.core.startRender(),Promise.resolve(!0)):Promise.reject("未初始化渲染对象")}stopRender(){return this.core?(this.core.stopRender(),Promise.resolve(!0)):Promise.reject("未初始化渲染对象")}async closeRecorder(){return"voice"===this.config.mode?(console.warn("[Human] Voice mode recorder has been removed"),Promise.resolve(!0)):this.recorder?this.recorder.close().then((()=>!0)):(console.warn("[Human] Recorder is not available"),Promise.resolve(!0))}async openRecorder(){return"voice"===this.config.mode?(console.warn("[Human] Voice mode recorder has been removed"),Promise.resolve({code:-1,data:{isUserNotAllow:!1},msg:"Voice mode recorder has been removed"})):this.recorder?this.recorder.open():(console.warn("[Human] Recorder is not available"),Promise.resolve({code:-1,data:{isUserNotAllow:!1},msg:"Recorder is not available"}))}async openCamera(e){const{CameraSDK:t}=await import("./index-CZnDSeaQ.js"),i=new t({facingMode:"user",features:["face","detection","expression"],...e});return this.camera=i,this.camera.open()}async startFaceRecognition(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.camera&&this.camera.isOpen()?this.camera.startFaceRecognition(e,(e=>{this.emit(i.CAMERA_FACE_RECOGNITION_RESULT,e)})):Promise.reject("camera is null!")}async stopFaceRecognition(){return!this.camera||!this.camera.isOpen()||this.camera.stopFaceRecognition()}async startBodyDetect(){return!this.camera||!this.camera.isOpen()||this.camera.startBodyDetect((e=>{this.emit(i.CAMERA_PERSON_TEST_RESULT,e)}))}async stopBodyDetect(){return!this.camera||!this.camera.isOpen()||this.camera.stopBodyDetect()}async startSmileDetection(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.camera&&this.camera.isOpen()?this.camera.startSmileDetection(e,(()=>{this.emit(i.EXPRESSION_SMILE_DETECTED)}),(e=>{this.emit(i.EXPRESSION_SMILE_STATE_CHANGED,e)})):Promise.reject("camera is null!")}stopSmileDetection(){return!this.camera||!this.camera.isOpen()||this.camera.stopSmileDetection()}closeCamera(){this.camera&&(this.camera.destroy(),this.camera=null)}}var md;!function(e){e.IDLE="idle",e.PLAYING="playing",e.PAUSED="paused",e.STOPPED="stopped"}(md||(md={}));class yd{ttsTextHistory=[];currentTTSText="";lastTTSEndTime=0;static TTS_HISTORY_SIZE=5;static TTS_ECHO_COOLDOWN_MS=4e3;checkAndExtractFromEcho(e,t){const i=Date.now();if(e.replace(/[,。!?、;:""''()【】《》\s]/g,"").length<5)return{isEcho:!1,extractedText:null};if(t&&this.currentTTSText&&this.isSimilarText(e,this.currentTTSText)){return{isEcho:!0,extractedText:this.extractUserTextFromEcho(e,this.currentTTSText)}}const A=i-this.lastTTSEndTime;if(A<yd.TTS_ECHO_COOLDOWN_MS&&this.currentTTSText&&this.shouldCheckEcho(e,A)&&this.isSimilarText(e,this.currentTTSText)){return{isEcho:!0,extractedText:this.extractUserTextFromEcho(e,this.currentTTSText)}}for(const t of this.ttsTextHistory){const A=i-t.timestamp;if(A<yd.TTS_ECHO_COOLDOWN_MS&&this.shouldCheckEcho(e,A)&&this.isSimilarText(e,t.text)){return{isEcho:!0,extractedText:this.extractUserTextFromEcho(e,t.text)}}}return{isEcho:!1,extractedText:null}}isSimilarText(e,t){if(!e||!t)return!1;const i=e=>e.replace(/[,。!?、;:""''()【】《》\s]/g,"").toLowerCase(),A=i(e),n=i(t);if(A.length<5||n.length<5)return!1;if(A===n)return!0;if(n.includes(A)){if(A.length/n.length>=.3)return!0}if(A.includes(n))return!0;let s=0;for(let e=0;e<n.length;e++)A.includes(n[e])&&s++;return s/n.length>=(A.length<10?.9:.7)&&A.length>=.5*n.length}extractUserTextFromEcho(e,t){if(!e||!t)return e;const i=e=>e.replace(/[,。!?、;:""''()【】《》\s]/g,"").toLowerCase(),A=i(e),n=i(t);if(n.includes(A))return null;if(A.includes(n)){const t=A.indexOf(n),s=t+n.length;if(s<A.length){if(A.substring(s).length>=3){const t=n.substring(n.length-5);let A=-1;for(let n=e.length-1;n>=0;n--){if(i(e.substring(0,n+1)).endsWith(t)){A=n+1;break}}if(A>0&&A<e.length){const t=e.substring(A).trim();if(t.length>=3)return t}}}if(t>0){if(A.substring(0,t).length>=3)return null}}return null}isTextSimilarToTTS(e){if(!this.currentTTSText)return!1;const t=e.replace(/[,。!?、;:""''()【】《》\s]/g,"").toLowerCase(),i=this.currentTTSText.replace(/[,。!?、;:""''()【】《》\s]/g,"").toLowerCase();if(i.includes(t)&&t.length>=2)return!0;if(t.length>=4){let e=0;for(let A=0;A<t.length-1;A++){const n=t.substring(A,A+2);i.includes(n)&&e++}const A=e/(t.length-1);if(A>.6)return(100*A).toFixed(1),!0}return!1}shouldCheckEcho(e,t){if(t<=1500)return!0;return e.replace(/[,。!?、;:""''()【】《》\s]/g,"").length>=10}addTTSToHistory(e){for(this.ttsTextHistory.push({text:e,timestamp:Date.now()});this.ttsTextHistory.length>yd.TTS_HISTORY_SIZE;)this.ttsTextHistory.shift()}setCurrentTTSText(e){this.currentTTSText=e}getCurrentTTSText(){return this.currentTTSText}markTTSEnd(){this.lastTTSEndTime=Date.now()}getLastTTSEndTime(){return this.lastTTSEndTime}reset(){this.ttsTextHistory=[],this.currentTTSText="",this.lastTTSEndTime=0}}class wd{current=null;history=[];static HISTORY_SIZE=20;start(){this.current={t1_silenceDetected:performance.now(),t2_chatRequestSent:0,t3_llmFirstChar:0,t4_ttsFirstData:0,t5_a2fFirstData:0,t6_framePlayerStart:0,t7_audioPlayStart:0}}markChatRequestSent(){this.current&&(this.current.t2_chatRequestSent=performance.now())}markLLMFirstChar(){this.current&&0===this.current.t3_llmFirstChar&&(this.current.t3_llmFirstChar=performance.now())}markTTSFirstData(){this.current&&0===this.current.t4_ttsFirstData&&(this.current.t4_ttsFirstData=performance.now())}markA2FFirstData(){this.current&&0===this.current.t5_a2fFirstData&&(this.current.t5_a2fFirstData=performance.now())}markFramePlayerStart(){this.current&&0===this.current.t6_framePlayerStart&&(this.current.t6_framePlayerStart=performance.now())}markAudioPlayStart(){this.current&&(this.current.t7_audioPlayStart=performance.now(),this.print(),this.history.push({...this.current}),this.history.length>wd.HISTORY_SIZE&&this.history.shift(),this.current=null)}reset(){this.current=null}get isActive(){return null!==this.current}getHistory(){return this.history}print(){if(!this.current)return;const e=this.current,t=e.t1_silenceDetected,i=e.t2_chatRequestSent-t,A=e.t3_llmFirstChar-e.t2_chatRequestSent,n=e.t4_ttsFirstData-e.t3_llmFirstChar,s=e.t5_a2fFirstData-e.t4_ttsFirstData,r=e.t6_framePlayerStart-e.t5_a2fFirstData,a=e.t7_audioPlayStart-e.t6_framePlayerStart,o=e.t7_audioPlayStart-t;i.toFixed(0),A.toFixed(0),n.toFixed(0),s.toFixed(0),r.toFixed(0),a.toFixed(0),o.toFixed(0)}}const Sd={completeSentence:0,question:0,partial:800,shortText:1200,minCompleteSentenceLength:4,defaultTimeout:1500},_d=/[,。!?、;:""''()【】《》\s]/g,Td=["嗯","啊","哦","噢","呃","额","嗯嗯","啊啊","哎","唉","呀","好","好的","嗯好","好嗯","是","是的","对","对的","行","行的","可以","好吧","那","那个","这","这个","喂","诶","哈","哈哈","呵","呵呵","嘿","嘿嘿","不急","知道","知道了","明白","明白了","收到","了解","等一下","稍等","来了","走了","去吧","好好","慢点","谢谢","不客气","没事","没关系","没问题","随便","说什么","干什么","怎么了","谁啊","在哪","去哪"],Dd=2,bd=new Set(["对","好","行","是","好的","可以","没错","是的","对啊","好啊","行啊","那没错","没问题","继续","继续讲","然后呢","再讲","讲下","说下","还有呢","为什么呀","真的吗","是吗","不是","不对"]),Rd=new Set(["你好","您好","嗨","早上好","下午好","晚上好","你好呀","你好啊","你好哇","晚安","拜拜","再见","拜","晚安啦","晚安了","拜拜啦","再见啦","帮我","来吧","开始","停止","暂停"]),vd=new Set(["我要","就是","那个","那么","然后","然后让","嗯后","嗯呢","那个呢","这个呢","一会","一会儿"]),kd=[/^那个.{0,2}$/,/^这个.{0,2}$/,/^就是.{0,2}$/,/^然后.{0,2}$/,/^我要.{0,2}$/,/^一会.{0,2}$/];function xd(e){return e.replace(_d,"")}function Pd(e){const t=xd(e);return t.length<2||!(!Td.includes(e)&&!Td.includes(t))}function Fd(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(Od(e,t))return!0;const A=xd(e);return!!Rd.has(A)||(A.length>=4||!(!i.allowShortFollowUp||!Md(e)))}function Md(e){const t=xd(e);return!!t&&(!!bd.has(t)||!(t.length<Dd)&&[/^继续.{0,4}$/,/^然后呢?$/,/^再(讲|说).{0,3}$/,/^讲下.{0,3}$/,/^说下.{0,3}$/,/^还有呢?$/,/^为什么呀?$/,/^真的?吗?$/,/^是吗$/,/^不是.{0,2}$/,/^不对.{0,2}$/].some((e=>e.test(t))))}function Nd(e){const t=xd(e);return!t||(!!["嗯","啊","哦","噢","呃","额","哎","诶"].includes(t)||!bd.has(t)&&(t.length<=1||(!!vd.has(t)||!!(t.length<=4&&kd.some((e=>e.test(t)))))))}function Ld(e,t){return!(!e||!t)&&(t.includes(e)||e.includes(t))}function Ud(e){if(e.endsWith("?")||e.endsWith("?"))return!0;return["什么","怎么","为什么","哪里","哪个","谁","几","多少","是不是","能不能","可不可以","会不会","有没有","吗","呢","吧"].some((t=>e.includes(t)))}function Gd(e){if(0===e.length)return"";if(1===e.length)return e[0];const t=[];let i="";for(const A of e)A.trim()&&(i&&Ld(A,i)?A.length>i.length&&(t.pop(),t.push(A),i=A):(t.push(A),i=A));return t.join("")}function Od(e,t){const i=e.toLowerCase();return t.some((e=>i.includes(e.toLowerCase())))}function Jd(e,t,i){return e?""!==t?"submit-query":"arm":i?"submit-text":"ignore"}class qd extends t{_config;_state="SLEEPING";_conversationId="";_isStarted=!1;isTransitioning=!1;pendingTransition=null;wakeArmed=!1;textBuffer=[];committedTranscript="";silenceTimer=null;idleTimer=null;thinkTimer=null;currentRequestId=null;activeLLMRequestId=null;activeLLMResolve=null;activeLLMReject=null;activeLLMTimeout=null;ttsStartTime=0;lastBargeInTime=0;speakingTextBuffer="";lastUserQuery="";static CONTINUATION_WINDOW_MS=2e3;static BARGE_IN_MIN_TEXT_LENGTH=2;static DEFAULT_BARGE_IN_COOLDOWN_MS=500;static DEFAULT_WELCOME_ASR_RESUME_DELAY_MS=1200;interruptDetectionTimer=null;interruptHintTimer=null;interruptFollowUpTimer=null;welcomeAsrResumeTimer=null;interruptDetectionEnabled=!1;vadGateTimer=null;vadGateActiveUntil=0;vadGateEnabled=!1;lastVadTriggerTime=0;static DEFAULT_VAD_GATE_WINDOW_MS=2500;static VAD_DUCK_GAIN=.02;static VAD_DUCK_MS=800;static DEFAULT_VAD_GRACE_MS=4e3;static VAD_START_DELAY_MS=700;static DEFAULT_INTERRUPT_FOLLOW_UP_WINDOW_MS=6e3;static CORE_INTERRUPT_WORDS=["停一下","等一下","好了"];isPlayingWelcomeTTS=!1;currentPlaybackContext=null;allowFollowUpDuringPlayback=!1;gracefulExitFollowUpBuffer=[];isPlayingInterruptFeedback=!1;isHandlingInterrupt=!1;lastInterruptTime=0;static DEFAULT_INTERRUPT_WORD_FILTER_MS=3e3;isPlayingTTSLocked=!1;dataChannelEndTimer=null;vadStartTimer=null;webrtcReconnectAttempts=0;webrtcReconnectTimer=null;llmRetryCount=0;_isReconnecting=!1;llmRequestCancelled=!1;_asrSuspended=!1;ttsEndTimestampForASRDiag=0;static DEFAULT_MAX_WEBRTC_RECONNECT_ATTEMPTS=3;static DEFAULT_WEBRTC_RECONNECT_INTERVAL=3e3;static DEFAULT_MAX_LLM_RETRY_COUNT=2;static DEFAULT_LLM_TIMEOUT_MS=3e4;echoDetector=new yd;ttsTimeline=new wd;llmDataEnded=!1;ttsDataEnded=!1;a2fDataEnded=!1;webrtcAudioClockBound=!1;currentA2fStreamId=null;lastA2fOffset=-1;a2fOffsetBase=null;ttsPlaybackState=null;activeTTSTransport=null;llmTTSStreamPrepared=!1;static DEFAULT_WAKE_WORDS=["你好"];static DEFAULT_EXIT_WORDS=["退出","再见"];static DEFAULT_INTERRUPT_WORDS=["停","停止","停一下","暂停","打住","好了","行了","够了","算了","可以了","等","等等","等一下","等下","不对","不是","不要","不要了","不用了","不说了","别说了","不想听","闭嘴","安静","我说","我想","我要","我问","听我说","让我","跳过","换个话题","错了","重来","打断","退出","结束","关闭","取消"];static SUPPLEMENT_WORDS=["还有","还有呢","然后呢","继续","接着说","再说说","详细说说","具体说说","展开说说","比如","举个例子","什么意思","加上","另外","补充一下","顺便","对了","哦对了","还想问"];static HARD_INTERRUPT_WORDS=["停","停止","停一下","暂停","打住","好了","行了","够了","算了","可以了","等","等等","等一下","等下","不对","不是","不要","不要了","不用了","不说了","别说了","不想听","闭嘴","安静","我说","我想","我要","我问","听我说","让我","跳过","换个话题","错了","重来","打断","退出","结束","关闭","取消"];static DEFAULT_IDLE_TIMEOUT=6e4;static DEFAULT_SILENCE_TIMEOUT=1500;static DEFAULT_GRACEFUL_EXIT_PROMPT="还有什么要问的吗?";static DEFAULT_GRACEFUL_EXIT_PHASE2_PROMPT="如果没有其他问题,我先休息了哦";static DEFAULT_GRACEFUL_EXIT_PHASE2_SILENCE=6e4;static DEFAULT_GRACEFUL_EXIT_PHASE3_SILENCE=3e4;exitPromptTimer=null;isInPostExitIdle=!1;pendingPostExitIdleEmit=!1;gracefulExitGeneration=0;gracefulExitPhase=0;effectiveInterruptWords=qd.CORE_INTERRUPT_WORDS;configuredInterruptWords=[];constructor(e){if(super(),!e.gateway)throw new Error("gateway is required");if(!e.framePlayer)throw new Error("framePlayer is required");if(!e.characterId)throw new Error("characterId is required");if(this.configuredInterruptWords=e.interruptWords||[],this._config={gateway:e.gateway,renderer:e.renderer,animationDirector:e.animationDirector,framePlayer:e.framePlayer,characterId:e.characterId,wakeWords:e.wakeWords||qd.DEFAULT_WAKE_WORDS,exitWords:e.exitWords||qd.DEFAULT_EXIT_WORDS,interruptWords:e.interruptWords||qd.DEFAULT_INTERRUPT_WORDS,idleTimeout:e.idleTimeout??qd.DEFAULT_IDLE_TIMEOUT,silenceTimeout:e.silenceTimeout??qd.DEFAULT_SILENCE_TIMEOUT,autoWake:e.autoWake||!1,echoDetection:!1!==e.echoDetection,ttsTransport:e.ttsTransport??"websocket",voiceEngine:e.voiceEngine??"pipeline",bargeInSensitivity:e.bargeInSensitivity||"high",welcomeAsrResumeDelayMs:e.welcomeAsrResumeDelayMs??qd.DEFAULT_WELCOME_ASR_RESUME_DELAY_MS,animations:{wake:e.animations?.wake,idle:e.animations?.idle||"idle",talk:e.animations?.talk||"talk"},interruptAck:e.interruptAck??"none",interruptFeedback:e.interruptFeedback??"好的",enableInterrupt:this.resolveEnableInterrupt(e.enableInterrupt),onStateChange:e.onStateChange,onTranscript:e.onTranscript,onResponse:e.onResponse,onError:e.onError,doubleWakeWord:e.doubleWakeWord??!1,wakePerTurn:e.wakePerTurn??!1,wakeConfirmText:e.wakeConfirmText,syntheticTexts:(e.syntheticTexts??[]).map((e=>e.trim())).filter(Boolean),gracefulExitEnabled:e.gracefulExitEnabled??!1,gracefulExitPrompt:e.gracefulExitPrompt??qd.DEFAULT_GRACEFUL_EXIT_PROMPT,gracefulExitPhase2Prompt:e.gracefulExitPhase2Prompt??qd.DEFAULT_GRACEFUL_EXIT_PHASE2_PROMPT,gracefulExitPhase2Silence:e.gracefulExitPhase2Silence??qd.DEFAULT_GRACEFUL_EXIT_PHASE2_SILENCE,gracefulExitPhase3Silence:e.gracefulExitPhase3Silence??qd.DEFAULT_GRACEFUL_EXIT_PHASE3_SILENCE,bargeInStrictMode:e.bargeInStrictMode??!1,continuousWindowMs:e.continuousWindowMs,bargeInCooldownMs:e.bargeInCooldownMs??qd.DEFAULT_BARGE_IN_COOLDOWN_MS,llmTimeoutMs:e.llmTimeoutMs??qd.DEFAULT_LLM_TIMEOUT_MS,llmMaxRetry:e.llmMaxRetry??qd.DEFAULT_MAX_LLM_RETRY_COUNT,webrtcMaxReconnectAttempts:e.webrtcMaxReconnectAttempts??qd.DEFAULT_MAX_WEBRTC_RECONNECT_ATTEMPTS,webrtcReconnectInterval:e.webrtcReconnectInterval??qd.DEFAULT_WEBRTC_RECONNECT_INTERVAL,vadGateWindowMs:e.vadGateWindowMs??qd.DEFAULT_VAD_GATE_WINDOW_MS,vadGraceMs:e.vadGraceMs??qd.DEFAULT_VAD_GRACE_MS,interruptFollowUpWindowMs:e.interruptFollowUpWindowMs??qd.DEFAULT_INTERRUPT_FOLLOW_UP_WINDOW_MS,interruptWordFilterMs:e.interruptWordFilterMs??qd.DEFAULT_INTERRUPT_WORD_FILTER_MS},this._config.enableInterrupt,this.handleASRResult=this.handleASRResult.bind(this),this.handleTTSPlayStart=this.handleTTSPlayStart.bind(this),this.handleTTSPlayEnd=this.handleTTSPlayEnd.bind(this),this.handleAudioPlaybackStart=this.handleAudioPlaybackStart.bind(this),this.handleGatewayDisconnect=this.handleGatewayDisconnect.bind(this),this.handleGatewayReconnecting=this.handleGatewayReconnecting.bind(this),this.handleWebRTCStateChange=this.handleWebRTCStateChange.bind(this),this.handleAnimationEnd=this.handleAnimationEnd.bind(this),this._config.bargeInStrictMode){const e=this._config.wakeWords.filter((e=>!gd.includes(e.toLowerCase()))).flatMap((e=>ud(e)));this.effectiveInterruptWords=[...new Set([...e,...this.configuredInterruptWords])],this.effectiveInterruptWords.length}else this.effectiveInterruptWords=[...new Set([...qd.CORE_INTERRUPT_WORDS,...this._config.interruptWords])]}resolveEnableInterrupt(e){return void 0===e||e}get state(){return this._state}get config(){return this._config}get coreInterruptWords(){return qd.CORE_INTERRUPT_WORDS}get isStarted(){return this._isStarted}get isReconnecting(){return this._isReconnecting}get conversationId(){return this._conversationId}async start(){if(this._isStarted)console.warn("[VoiceConversation] Already started");else{if(this._conversationId||(this._conversationId=sd(16),this._conversationId),!this._config.gateway.isConnected())throw this.emitError({code:"GATEWAY_DISCONNECTED",message:"Gateway is not connected",recoverable:!1}),new Error("Gateway is not connected");try{await this._config.gateway.createWebRTCConnection(this.handleASRResult),this._config.gateway.setTTSDataChannelCallback((e=>{"webrtc"===this.activeTTSTransport&&(this.ttsTimeline.markTTSFirstData(),this._config.framePlayer.addBinaryAudio(e))})),this._config.framePlayer.setPlayAudioThroughAudioManager(!0),this.registerEventListeners(),this.sendExpandedWakeWords(),this._isStarted=!0,this._config.autoWake?(this.transitionTo("IDLE"),this.emit("wakeUp",{trigger:"manual"}),this._config.wakeConfirmText&&(this.emit("wakeConfirm",{text:this._config.wakeConfirmText}),await this.playTTS(this._config.wakeConfirmText,{synthetic:!0}))):this.transitionTo("SLEEPING")}catch(e){throw console.error("[VoiceConversation] Failed to start:",e),this.emitError({code:"WEBRTC_FAILED",message:"Failed to create WebRTC connection",recoverable:!0}),e}}}async stop(){this._isStarted&&(this.clearSilenceTimer(),this.clearIdleTimer(),this.clearWebRTCReconnectTimer(),this.clearInterruptTimers(),this.clearInterruptFollowUpWindow(),this.clearWelcomeAsrResumeTimer(),this.dataChannelEndTimer&&(clearTimeout(this.dataChannelEndTimer),this.dataChannelEndTimer=null),this.vadStartTimer&&(clearTimeout(this.vadStartTimer),this.vadStartTimer=null),this.interruptDetectionEnabled=!1,this.isPlayingWelcomeTTS=!1,this.currentPlaybackContext=null,this.allowFollowUpDuringPlayback=!1,this.gracefulExitFollowUpBuffer=[],this._asrSuspended=!1,this.activeTTSTransport=null,this.cancelActiveLLMRequest("Voice conversation stopped"),this.unregisterEventListeners(),this._config.gateway.setTTSDataChannelCallback(null),this._config.gateway.closeWebRTCConnection(),await this._config.framePlayer.clear(),this._config.framePlayer.setExternalAudioTimeProvider(null),this._isStarted=!1,this._state="SLEEPING",this.textBuffer=[],this._conversationId="",this.webrtcReconnectAttempts=0,this.llmRetryCount=0,this.webrtcAudioClockBound=!1,this.currentRequestId=null)}wake(){"SLEEPING"===this._state&&(this.transitionTo("IDLE"),this.emit("wakeUp",{trigger:"manual"}))}sleep(){"SLEEPING"!==this._state&&this.handleSleep()}suspendASR(){this._asrSuspended=!0}resumeASR(){this._asrSuspended=!1}async interrupt(){"SPEAKING"!==this._state&&"THINKING"!==this._state||(this.clearInterruptTimers(),this.interruptDetectionEnabled=!1,this.emit("interruptHintHide"),this.isHandlingInterrupt=!0,await this.handleInterrupt(),this.textBuffer=[],this._config.onTranscript?.("",!0),this.emit("interrupted",{text:"",feedback:""}),this.lastInterruptTime=Date.now(),this.isHandlingInterrupt=!1,this.startInterruptFollowUpWindow(),this.transitionTo("LISTENING"))}isGracefulExitPromptContext(e){return"graceful_exit_prompt"===e||"graceful_exit_phase2_prompt"===e}shouldCaptureGracefulExitFollowUp(e){if(!this.allowFollowUpDuringPlayback||!this.isGracefulExitPromptContext(this.currentPlaybackContext))return!1;return!(e.replace(/[,。!?、;:""''()【】《》\s]/g,"").length<4)&&(!Pd(e)&&!Nd(e))}bufferGracefulExitFollowUp(e,t){0===this.gracefulExitFollowUpBuffer.length&&this.clearIdleTimer();const i=this.gracefulExitFollowUpBuffer[this.gracefulExitFollowUpBuffer.length-1];i?Ld(e,i)?e.length>=i.length&&(this.gracefulExitFollowUpBuffer[this.gracefulExitFollowUpBuffer.length-1]=e):i!==e&&this.gracefulExitFollowUpBuffer.push(e):this.gracefulExitFollowUpBuffer.push(e);const A=Gd(this.gracefulExitFollowUpBuffer);this._config.onTranscript?.(A,t),this.emit("transcript",{text:A,isFinal:t})}flushGracefulExitFollowUpBuffer(){const e=Gd(this.gracefulExitFollowUpBuffer);return this.gracefulExitFollowUpBuffer=[],!!e.trim()&&(this._config.onTranscript?.(e,!0),this.emit("transcript",{text:e,isFinal:!0}),this.sendToLLM(e),!0)}get isASRSuspended(){return this._asrSuspended}async sendText(e){e.trim()?("SLEEPING"===this._state&&this.wake(),"SPEAKING"!==this._state&&"THINKING"!==this._state||await this.handleInterrupt(),this.textBuffer=[],this.clearSilenceTimer(),this.emit("transcript",{text:e,isFinal:!0}),this._config.onTranscript?.(e,!0),this.sendToLLM(e)):console.warn("[VoiceConversation] sendText: empty text, ignored")}async playTTS(e,t){if(e.trim()){this.isPlayingTTSLocked&&await this.handleInterrupt();try{this.isPlayingTTSLocked=!0;const i=!!t?.allowFollowUpDuringPlayback;this.isPlayingWelcomeTTS=!i,this.currentPlaybackContext=t?.playbackContext??null,this.allowFollowUpDuringPlayback=i,this.clearWelcomeAsrResumeTimer(),this.gracefulExitFollowUpBuffer=[],i||(this.suspendASR(),this._config.gateway.muteLocalAudio());"SPEAKING"===this._state||"THINKING"===this._state&&!this.llmDataEnded?await this.handleInterrupt():this._state,this.resetDataEndedFlags(),this.webrtcAudioClockBound=!1,this.lastA2fOffset=-1,this.a2fOffsetBase=null,this.currentA2fStreamId=null,this.echoDetector.setCurrentTTSText(e),this._config.onResponse?.(e),this.emit("response",{text:e});const A=!!t?.synthetic||e.length<=24;this._config.framePlayer.prepareForNewTTS(A);const n=this.shouldUseWebRTCTTS();this.activeTTSTransport=n?"webrtc":"websocket",this._config.ttsTransport;let s=!1;this._config.gateway.sendTTS({character_id:this._config.characterId,text:e,a2f_enabled:!0,dialect:t?.dialect||"中文",use_webrtc_tts:n,...t?.synthetic?{synthetic:!0}:{}},(e=>{try{switch(e.type){case"rate":e.sampleRate&&(s=!0,e.sampleRate,this._config.framePlayer.setAudioRate(e.sampleRate));break;case"audio":e.audio&&(s=!0,this._config.framePlayer.addBinaryAudio(e.audio));break;case"a2f":if(e.blendShapes){s=!0;const t=e.audioOffset||0;this.webrtcAudioClockBound||(this.webrtcAudioClockBound=!0),this._config.framePlayer.addShapes(e.blendShapes,Math.max(0,t))}break;case"end":if(!s){e.endType;break}if("tts"===e.endType){if(this.ttsDataEnded)break;this.ttsDataEnded=!0,this.checkAllDataEnded()}else if("a2f"===e.endType){if(this.a2fDataEnded)break;this.a2fDataEnded=!0,this.checkAllDataEnded()}}}catch(e){console.error("[VoiceConversation] TTS callback error:",e),this.isPlayingTTSLocked=!1,this.isPlayingWelcomeTTS=!1,this.currentPlaybackContext=null,this.allowFollowUpDuringPlayback=!1,this.gracefulExitFollowUpBuffer=[],this.resumeASR(),this._config.gateway.unmuteLocalAudio(),this.transitionTo("IDLE")}}))}catch(e){console.error("[VoiceConversation] playTTS error:",e),this.isPlayingTTSLocked=!1,this.isPlayingWelcomeTTS=!1,this.currentPlaybackContext=null,this.allowFollowUpDuringPlayback=!1,this.gracefulExitFollowUpBuffer=[],this.resumeASR(),this._config.gateway.unmuteLocalAudio(),this.emitError({code:"TTS_FAILED",message:e.message||"TTS playback failed",recoverable:!0})}}else console.warn("[VoiceConversation] playTTS: empty text, ignored")}transitionTo(e){if(this.isTransitioning)return void(this.pendingTransition=e);const t=this._state;if(t!==e){this.isTransitioning=!0;try{this._state=e,this.syncStateToGateway(e),this._config.onStateChange?.(e,t),this.emit("stateChange",{state:e,prevState:t}),this.onEnterState(e,t)}finally{if(this.isTransitioning=!1,this.pendingTransition){const e=this.pendingTransition;this.pendingTransition=null,this.transitionTo(e)}}}}syncStateToGateway(e){this._config.gateway.isConnected()&&this._config.gateway.sendStateSync(e)}onEnterState(e,t){switch("IDLE"===e||"LISTENING"===e?this._config.gateway.startAudioLevelMonitor((e=>{this.emit("audioLevel",{level:e})})):(this._config.gateway.stopAudioLevelMonitor(),"LISTENING"!==t&&"IDLE"!==t||this.emit("audioLevel",{level:0})),this.clearThinkTimer(),e){case"SLEEPING":this.committedTranscript="",this.clearInterruptFollowUpWindow(),this.clearIdleTimer(),this.clearSilenceTimer(),this.wakeArmed=!1;break;case"IDLE":this.committedTranscript="",this.clearInterruptFollowUpWindow(),this.isInPostExitIdle?this.pendingPostExitIdleEmit&&(this.pendingPostExitIdleEmit=!1,this.emit("postExitIdle")):this.resetIdleTimer(),this.speakingTextBuffer="","SLEEPING"===t&&this._config.gateway.unmuteLocalAudio(),"SLEEPING"===t&&this._config.animations.wake?(this._config.animations.wake,this._config.renderer?.playAction?.(this._config.animations.wake)):(this._config.animations.idle,this.playBaseAnim("idle"));break;case"LISTENING":this.clearIdleTimer(),this.speakingTextBuffer="";break;case"THINKING":this.clearInterruptFollowUpWindow(),this.thinkTimer=setTimeout((()=>{"THINKING"===this._state&&this.playBaseAnim("think")}),800);break;case"SPEAKING":this.clearInterruptFollowUpWindow(),this.ttsStartTime=Date.now()}}handleASRResult(e){const{text:t,isFinal:i}=e;if(this._asrSuspended)return;if(!t||!t.trim())return void(i&&("LISTENING"===this._state&&this.textBuffer.length>0?(this.textBuffer,this.startSilenceTimer()):"SPEAKING"===this._state&&this.speakingTextBuffer&&(this.speakingTextBuffer,this.shouldTriggerBargeIn(this.speakingTextBuffer,!0)&&(this.speakingTextBuffer,this.handleBargeIn(this.speakingTextBuffer)),this.speakingTextBuffer="")));const A=t.trim();if("SPEAKING"===this._state){if(this.interruptDetectionEnabled){const e=this.echoDetector.getCurrentTTSText();if(e&&this.echoDetector.isSimilarText(A,e));else{const e=A.replace(/[,。!?、;:""''()【】《》\s]/g,""),t=this.effectiveInterruptWords.find((t=>e.includes(t)));if(t){const e=this.matchExplicitInterruptPhrase(A),t=!!e,i=this.hasWakeWordInterrupt(A)&&!t;t||i?this.handleVoiceInterrupt(A):(!this.vadGateEnabled||this.isVadGateOpen()||this.isVadRecent())&&(this.isVadGateOpen(),this.handleVoiceInterrupt(A))}}}return void(this.shouldCaptureGracefulExitFollowUp(A)&&this.bufferGracefulExitFollowUp(A,i))}if(this.ttsEndTimestampForASRDiag>0&&A){Date.now(),this.ttsEndTimestampForASRDiag;this._state,this.ttsEndTimestampForASRDiag,this.ttsEndTimestampForASRDiag=0}const n=this.echoDetector.getLastTTSEndTime();n&&Date.now();if(this._state,!Pd(A)||this.shouldAllowShortFollowUp(A)){if(this._config.echoDetection){const e=this.echoDetector.checkAndExtractFromEcho(A,this.isPlayingWelcomeTTS);if(e.isEcho)return void(e.extractedText&&(e.extractedText,this.processASRText(e.extractedText,i)))}switch("LISTENING"!==this._state&&"THINKING"!==this._state&&"IDLE"!==this._state&&this.emit("transcript",{text:A,isFinal:i}),this._state){case"SLEEPING":this.handleASRInSleeping(A);break;case"IDLE":this.handleASRInIdle(A,i);break;case"LISTENING":this.handleASRInListening(A,i);break;case"THINKING":this.handleASRInThinking(A,i)}}}processASRText(e,t){switch("LISTENING"!==this._state&&"THINKING"!==this._state&&this.emit("transcript",{text:e,isFinal:t}),this._state){case"SLEEPING":this.handleASRInSleeping(e);break;case"IDLE":this.handleASRInIdle(e,t);break;case"LISTENING":this.handleASRInListening(e,t);break;case"THINKING":this.handleASRInThinking(e,t)}}clearTranscriptDisplay(){this.emit("transcript",{text:"",isFinal:!1}),this._config.onTranscript?.("",!1)}async handleASRInSleeping(e){const t=this._config.wakeWords;let i;if(this._config.doubleWakeWord)Cd(e,t)&&(i=t.find((e=>!gd.includes(e.toLowerCase())))||t[0]);else{const A=e.toLowerCase();for(const e of t){if(ud(e).find((e=>A.includes(e.toLowerCase())))){i=e;break}}}if(i){if(this._config.doubleWakeWord,this.transitionTo("IDLE"),this.emit("wakeUp",{trigger:"word",word:i}),!0===this._config.wakePerTurn){const{query:t}=pd(e,this._config.wakeWords,this._config.doubleWakeWord);if(""!==t)return this.wakeArmed=!1,void this.submitWakePerTurnQuery(t,!0);this.wakeArmed=!0}this._config.wakeConfirmText&&(this.emit("wakeConfirm",{text:this._config.wakeConfirmText}),await this.playTTS(this._config.wakeConfirmText,{synthetic:!0}))}}submitWakePerTurnQuery(e,t){this.textBuffer=[e],this.transitionTo("LISTENING"),this._config.onTranscript?.(e,t),this.emit("transcript",{text:e,isFinal:t}),t&&this.startSilenceTimer()}_isSameUtterance(e,t){if(!e||!t)return!1;if(e.includes(t)||t.includes(e))return!0;const i=Math.min(e.length,t.length);let A=0;for(let n=0;n<i&&e[n]===t[n];n++)A++;return A>=.5*i}_isWakeWordOnly(e){let t=e;const i=[",","。","!","?","、",";",":","“","”","‘","’","(",")","【","】","《","》",",",".","!","?",";",":"," ","\t","\n"];for(const e of i)t=t.split(e).join("");if(0===t.length)return!1;const A=this._expandedWakeWords.length>0?this._expandedWakeWords:this._config.wakeWords;for(const e of A){let A=e;for(const e of i)A=A.split(e).join("");if(!A||0===A.length)continue;let n=t;for(;n.length>0&&-1!==n.indexOf(A);)n=n.replace(A,"");if(0===n.length)return!0}return!1}handleASRInIdle(e,t){if(Od(e,this._config.exitWords))return void this.handleSleep("word");if(!0===this._config.wakePerTurn){const{matched:i,query:A}=pd(e,this._config.wakeWords,this._config.doubleWakeWord);switch(Jd(i,A,this.wakeArmed)){case"submit-query":return this.wakeArmed=!1,void this.submitWakePerTurnQuery(A,t);case"arm":return this.wakeArmed=!0,this._config.wakeConfirmText&&(this.emit("wakeConfirm",{text:this._config.wakeConfirmText}),this.playTTS(this._config.wakeConfirmText,{synthetic:!0})),void this.clearTranscriptDisplay();case"submit-text":return this.wakeArmed=!1,void this.submitWakePerTurnQuery(e,t);case"ignore":return void this.clearTranscriptDisplay()}}if(!Fd(e,this._config.wakeWords,{allowShortFollowUp:this.shouldAllowShortFollowUp(e)}))return void this.clearTranscriptDisplay();if(Nd(e)&&!this.shouldAllowShortFollowUp(e))return void this.clearTranscriptDisplay();if(this._isWakeWordOnly(e))return this.textBuffer=[],void this.transitionTo("LISTENING");const i=Ed(e,this._config.wakeWords);if(!i)return this.textBuffer=[],void this.transitionTo("LISTENING");this.textBuffer=[i],this.transitionTo("LISTENING"),this._config.onTranscript?.(i,t),this.emit("transcript",{text:i,isFinal:t}),t&&this.startSilenceTimer()}handleASRInListening(e,t){if(this._isWakeWordOnly(e))return;const i=Date.now()-this.lastInterruptTime;if(this.lastInterruptTime>0&&i<this._config.interruptWordFilterMs){const t=e.replace(/[,。!?、;:""''()【】《》\s]/g,"");if(this.effectiveInterruptWords.some((e=>t===e||t.length<=e.length+2&&t.includes(e))))return}if(this.clearInterruptFollowUpWindow(),Od(e,this._config.exitWords))return void this.handleSleep("word");if(0===this.textBuffer.length)return this.textBuffer.push(e),void this.emit("transcript",{text:e,isFinal:t});const A=this.textBuffer[this.textBuffer.length-1];t?(A!==e&&(this._isSameUtterance(e,A)?this.textBuffer[this.textBuffer.length-1]=e:this.textBuffer.push(e)),this.startSilenceTimer()):(this.clearSilenceTimer(),A&&this._isSameUtterance(e,A)?this.textBuffer[this.textBuffer.length-1]=e:this.textBuffer.push(e));const n=this.textBuffer.join("");this._config.onTranscript?.(n,t),this.emit("transcript",{text:n,isFinal:t})}async handleASRInThinking(e,t){const i=this.committedTranscript?this.committedTranscript+e:e;if(this._config.onTranscript?.(i,t),this.emit("transcript",{text:i,isFinal:t}),Od(e,this._config.exitWords))return await this.handleInterrupt(),void await this.handleSleep("word");if(Od(e,this._config.interruptWords))return await this.handleInterrupt(),this.textBuffer=[e],this.transitionTo("LISTENING"),void this.startSilenceTimer();if(t){e.replace(/[,。!?、;:""''()【】《》\s]/g,"").length>=qd.BARGE_IN_MIN_TEXT_LENGTH&&(await this.handleInterrupt(),this.textBuffer=[e],this.transitionTo("LISTENING"),this.startSilenceTimer())}}async handleVoiceInterrupt(e){this.clearInterruptTimers(),this.interruptDetectionEnabled=!1,this.emit("interruptHintHide");const t=this._config.interruptFeedback||"好的";this.isHandlingInterrupt=!0;const i="short"===this._config.interruptAck;i&&(this.isPlayingInterruptFeedback=!0),await this.handleInterrupt(),this.textBuffer=[],this._config.onTranscript?.("",!0),this.emit("interrupted",{text:e,feedback:t}),this._config.onResponse?.(""),this._config.onResponse?.(t),i&&(await this.playInterruptFeedback(t),this.isPlayingInterruptFeedback=!1),this.lastInterruptTime=Date.now(),this.isHandlingInterrupt=!1,this.startInterruptFollowUpWindow(),this.transitionTo("LISTENING")}async playInterruptFeedback(e){try{this.resetDataEndedFlags(),this._config.framePlayer.prepareForNewTTS(!0),await new Promise((t=>{const i=setTimeout((()=>{n(),t()}),5e3),A=()=>{n(),t()},n=()=>{clearTimeout(i),this._config.framePlayer.off("playend",A)};this._config.framePlayer.on("playend",A),this._config.gateway.sendTTS({character_id:this._config.characterId,text:e,a2f_enabled:!0,dialect:"中文"},(e=>{"rate"===e.type&&e.sampleRate&&this._config.framePlayer.setAudioRate(e.sampleRate)}))}))}catch(e){console.warn("[VoiceConversation] Interrupt feedback playback failed:",e)}}getBargeInThresholds(){switch(this._config.bargeInSensitivity){case"low":return{cooldownMs:1500,continuationWindowMs:5e3,minTextLength:6};case"medium":return{cooldownMs:1e3,continuationWindowMs:3e3,minTextLength:4};default:return{cooldownMs:this._config.bargeInCooldownMs,continuationWindowMs:qd.CONTINUATION_WINDOW_MS,minTextLength:qd.BARGE_IN_MIN_TEXT_LENGTH}}}shouldTriggerBargeIn(e,t){const i=Date.now(),A=this.getBargeInThresholds();if(i-this.lastBargeInTime<A.cooldownMs)return!1;const n=this.matchExplicitInterruptPhrase(e);return!!n}handleBargeIn(e){this.lastBargeInTime=Date.now();const t=this.classifyBargeIn(e);this.emit("bargeIn",{text:e,type:t}),this.isHandlingInterrupt=!0,this.handleBargeInTransition(e,t).catch((e=>{console.error("[VoiceConversation] Barge-in transition failed:",e),this.isHandlingInterrupt=!1,this.transitionTo("IDLE")}))}async handleBargeInTransition(e,t){try{if(await this.handleInterrupt(),"supplement"===t&&this.lastUserQuery){const t=`${this.lastUserQuery},${e}`;this.textBuffer=[t]}else this.textBuffer=[e];this.transitionTo("LISTENING"),this.startSilenceTimer()}finally{this.isHandlingInterrupt=!1}}classifyBargeIn(e){if(this.matchExplicitInterruptPhrase(e,qd.HARD_INTERRUPT_WORDS))return"interrupt";if(Od(e,qd.SUPPLEMENT_WORDS))return"supplement";if(e.replace(/[,。!?、;:""''()【】《》\s]/g,"").length<=5){if(["呢","吗","吧","啊","哦","嗯"].some((t=>e.endsWith(t))))return"supplement"}return"interrupt"}async sendToLLM(e){if(!e.trim())return this.ttsTimeline.reset(),void this.transitionTo("IDLE");this.ttsTimeline.markChatRequestSent(),this.lastUserQuery=e,this.echoDetector.setCurrentTTSText(""),this.transitionTo("THINKING"),this.currentRequestId=this.generateRequestId(),this.llmRetryCount=0,this.cancelActiveLLMRequest("Superseded by new request"),await this.sendToLLMWithRetry(e)}async sendToLLMWithRetry(e){let t="",i=!1;const A=this.currentRequestId;this.llmRequestCancelled=!1;try{await new Promise(((n,s)=>{if(!A)return void s(new Error("LLM request missing id"));if(!this._config.gateway.isConnected())return void s(new Error("Gateway not connected"));this.bindActiveLLMRequest(A,n,s);const r=this.shouldUseWebRTCTTS();this.activeTTSTransport=r?"webrtc":"websocket",this.llmTTSStreamPrepared=!1,this._conversationId,this._config.ttsTransport,this._config.gateway.sendLLMChat({query:e,inputs:{character_id:this._config.characterId,chat_id:this._conversationId||void 0,tts_enabled:!0,a2f_enabled:!0,chunk_type:"stream",use_webrtc_tts:r}},(e=>{try{if(this.llmRequestCancelled)return;if(A!==this.currentRequestId)return;if("llm"===e.type&&this.clearActiveLLMTimeout(A),this.handleLLMResponse(e,(e=>{t+=e,t&&this._config.onResponse?.(t)})),"end"===e.type&&"llm"===e.endType&&!i&&(i=!0,t.length,0===t.length&&"THINKING"===this._state))return this.committedTranscript="",this.clearActiveLLMRequest(A),void this.transitionTo("IDLE");"end"===e.type&&"tts"===e.endType&&this.resolveActiveLLMRequest(A)}catch(e){console.error("[VoiceConversation] LLM callback error:",e),this.clearActiveLLMRequest(A),this.transitionTo("IDLE")}})),this.activeLLMTimeout=setTimeout((()=>{this.llmRequestCancelled=!0,s(new Error("LLM request timeout"))}),this._config.llmTimeoutMs)})),this.llmRetryCount=0}catch(t){const i=t.message;if(this.clearActiveLLMRequest(A),"LLM request cancelled"===i||"LLM request interrupted"===i||"Voice conversation stopped"===i||"Superseded by new request"===i)return;if(console.error(`[VoiceConversation] LLM error (attempt ${this.llmRetryCount+1}):`,i),this.llmRetryCount<this._config.llmMaxRetry&&this.isRetryableError(i))return this.llmRetryCount++,this.llmRetryCount,this._config.llmMaxRetry,await new Promise((e=>setTimeout(e,1e3))),this.sendToLLMWithRetry(e);this.emitError({code:i.includes("timeout")?"LLM_TIMEOUT":"LLM_ERROR",message:i,recoverable:!0}),this.transitionTo("IDLE")}}isRetryableError(e){const t=e.toLowerCase();return["timeout","network","connection","ECONNRESET","ETIMEDOUT"].some((e=>t.includes(e)))}handleLLMResponse(e,t){switch(e.type){case"llm":e.text&&this.ttsTimeline.markLLMFirstChar(),e.text&&(t(e.text),this.echoDetector.setCurrentTTSText(this.echoDetector.getCurrentTTSText()+e.text),this.emit("response",{text:e.text}));break;case"tts":e.audio&&this.ttsTimeline.markTTSFirstData(),"THINKING"!==this._state||this.llmTTSStreamPrepared||(this._config.framePlayer.prepareForNewTTS(),this.resetDataEndedFlags(),this.webrtcAudioClockBound=!1,this.lastA2fOffset=-1,this.a2fOffsetBase=null,this.currentA2fStreamId=null,this.llmTTSStreamPrepared=!0),e.sampleRate&&this._config.framePlayer.setAudioRate(e.sampleRate),e.audio&&("webrtc"===this.activeTTSTransport||this._config.framePlayer.addBinaryAudio(e.audio));break;case"a2f":if(e.blendShapes&&this.ttsTimeline.markA2FFirstData(),e.blendShapes){const t=e.streamId,i="number"==typeof e.audioOffset?e.audioOffset:0,A=this.lastA2fOffset>=0&&i<this.lastA2fOffset;(!!t&&t!==this.currentA2fStreamId||A)&&(this.currentA2fStreamId=t||null,this.lastA2fOffset=-1,this.a2fOffsetBase=null),this.lastA2fOffset=i;const n=Math.max(0,i);this.webrtcAudioClockBound||(this.webrtcAudioClockBound=!0),this._config.framePlayer.addShapes(e.blendShapes,n)}break;case"end":if("llm"===e.endType){if(this.llmDataEnded)break;this.llmDataEnded=!0;const e=this.echoDetector.getCurrentTTSText();e&&this.echoDetector.addTTSToHistory(e)}else if("tts"===e.endType){if(this.ttsDataEnded)break;this.ttsDataEnded=!0,this.checkAllDataEnded()}else if("a2f"===e.endType){if(this.a2fDataEnded)break;this.a2fDataEnded=!0,this.checkAllDataEnded()}}}checkAllDataEnded(){if(this.ttsDataEnded&&this.a2fDataEnded){if(this.dataChannelEndTimer)return;this._config.gateway.clearTTSCallback(),this.dataChannelEndTimer=setTimeout((()=>{this.dataChannelEndTimer=null,this._config.framePlayer.markAudioStreamEnded()}),100)}else this.ttsDataEnded,this.a2fDataEnded}resetDataEndedFlags(){this.llmDataEnded=!1,this.ttsDataEnded=!1,this.a2fDataEnded=!1,this.ttsPlaybackState=null,this.llmTTSStreamPrepared=!1}registerEventListeners(){this._config.framePlayer.on("bs-startplay",this.handleTTSPlayStart),this._config.framePlayer.on("playend",this.handleTTSPlayEnd),this._config.framePlayer.on("audio-playback-started",this.handleAudioPlaybackStart),Xg.on(i.GATEWAY_DISCONNECTED,this.handleGatewayDisconnect),Xg.on(i.GATEWAY_RECONNECTING,this.handleGatewayReconnecting),Xg.on(i.VOICE_INTERACTION_WEBRTC_STATE,this.handleWebRTCStateChange),Xg.on(i.GATEWAY_STATE_PUSH,this.handleGatewayStatePush),Xg.on(i.ANIMATION_END,this.handleAnimationEnd)}unregisterEventListeners(){this._config.framePlayer.off("bs-startplay",this.handleTTSPlayStart),this._config.framePlayer.off("playend",this.handleTTSPlayEnd),this._config.framePlayer.off("audio-playback-started",this.handleAudioPlaybackStart),Xg.off(i.GATEWAY_DISCONNECTED,this.handleGatewayDisconnect),Xg.off(i.GATEWAY_RECONNECTING,this.handleGatewayReconnecting),Xg.off(i.VOICE_INTERACTION_WEBRTC_STATE,this.handleWebRTCStateChange),Xg.off(i.GATEWAY_STATE_PUSH,this.handleGatewayStatePush),Xg.off(i.ANIMATION_END,this.handleAnimationEnd)}handleGatewayStatePush=e=>{e&&"SLEEPING"===e.state&&"SLEEPING"!==this._state&&(this.exitPromptTimer&&(clearTimeout(this.exitPromptTimer),this.exitPromptTimer=null),this.gracefulExitGeneration++,this.gracefulExitPhase=0,this.isInPostExitIdle=!1,this.pendingPostExitIdleEmit=!1,this.handleSleep("server"))};playBaseAnim(e){const t=this._config.animationDirector??this._config.renderer?.animationDirector;if(t)return void t.setBaseState(e);const i="talk"===e?this.getRandomTalkAnimation():"think"===e?"think":this._config.animations.idle;this._config.renderer?.playAction?.(i,{loop:2201,repetitions:Number.MAX_SAFE_INTEGER})}clearThinkTimer(){this.thinkTimer&&(clearTimeout(this.thinkTimer),this.thinkTimer=null)}getRandomTalkAnimation(){const e=this._config.animations.talk;if(Array.isArray(e)){if(0===e.length)return"talk";return e[Math.floor(Math.random()*e.length)]}return e}handleTTSPlayStart(){if("started"===this.ttsPlaybackState)return;this.ttsTimeline.markFramePlayerStart(),this.ttsStartTime=Date.now(),this.ttsPlaybackState="started",this._config.gateway.resumeRemoteAudio(),"SPEAKING"!==this._state&&(this.transitionTo("SPEAKING"),this.emit("speaking",{text:this.isPlayingInterruptFeedback?"":this.echoDetector.getCurrentTTSText()})),this._config.gateway.sendTTSPlaybackState("playback_started",this.currentPlaybackContext??void 0);this.getRandomTalkAnimation();this.playBaseAnim("talk"),this.isPlayingWelcomeTTS||this.allowFollowUpDuringPlayback&&this.isGracefulExitPromptContext(this.currentPlaybackContext)||this.enableInterruptDetection()}enableInterruptDetection(){if(!this._config.enableInterrupt)return;if("SPEAKING"!==this._state||"started"!==this.ttsPlaybackState)return;this.interruptDetectionEnabled=!0,this.vadGateEnabled=!0,this._config.gateway.unmuteLocalAudio(),this.vadStartTimer=setTimeout((()=>{this.vadStartTimer=null,"SPEAKING"===this._state&&this.interruptDetectionEnabled&&this._config.gateway.startVADDetection(((e,t)=>{e&&"SPEAKING"===this._state&&this.interruptDetectionEnabled&&this.handleVADDirectInterrupt()}))}),qd.VAD_START_DELAY_MS);const e=this._config.bargeInStrictMode?[...new Set([...this._config.wakeWords.filter((e=>!gd.includes(e.toLowerCase()))),...this.configuredInterruptWords])]:[...new Set([...qd.CORE_INTERRUPT_WORDS,...this.configuredInterruptWords])];this.emit("interruptHintShow",{words:e})}async handleVADDirectInterrupt(){this.openVadGate()}openVadGate(){const e=Date.now();this.vadGateEnabled&&(this.vadGateActiveUntil>e||(this.lastVadTriggerTime=e,this.vadGateActiveUntil=e+this._config.vadGateWindowMs,this.vadGateTimer&&clearTimeout(this.vadGateTimer),this.vadGateTimer=setTimeout((()=>{this.vadGateTimer=null,this.vadGateActiveUntil=0}),this._config.vadGateWindowMs)))}isVadGateOpen(){return this.vadGateActiveUntil>Date.now()}isVadRecent(){return Date.now()-this.lastVadTriggerTime<=this._config.vadGraceMs}matchExplicitInterruptPhrase(e,t){const i=e.replace(/[,。!?、;:""''()【】《》\s]/g,"");if(!i)return null;const A=Ud(e),n=this._config.bargeInStrictMode?this.configuredInterruptWords:[...this._config.interruptWords,...qd.DEFAULT_INTERRUPT_WORDS,...qd.CORE_INTERRUPT_WORDS],s=[...new Set((t||n).map((e=>e.replace(/[,。!?、;:""''()【】《》\s]/g,""))).filter(Boolean))].sort(((e,t)=>t.length-e.length));for(const e of s){if(i===e)return e;if(!("不是"===e||"不对"===e)||!A){if(i.startsWith(e)||i.endsWith(e))return e;if(e.length>=2&&i.includes(e)&&i.length<=e.length+4)return e}}return null}hasExplicitInterruptIntent(e){return!!this.matchExplicitInterruptPhrase(e)}hasWakeWordInterrupt(e){const t=e.replace(/[,。!?、;:""''()【】《》\s]/g,""),i=this._config.wakeWords.filter((e=>!gd.includes(e.toLowerCase()))).flatMap((e=>ud(e)));return[...new Set(i)].some((e=>t.includes(e)))}clearInterruptTimers(){this.interruptDetectionTimer&&(clearTimeout(this.interruptDetectionTimer),this.interruptDetectionTimer=null),this.interruptHintTimer&&(clearTimeout(this.interruptHintTimer),this.interruptHintTimer=null),this.vadGateTimer&&(clearTimeout(this.vadGateTimer),this.vadGateTimer=null),this.vadStartTimer&&(clearTimeout(this.vadStartTimer),this.vadStartTimer=null),this.vadGateActiveUntil=0,this.vadGateEnabled=!1,this.lastVadTriggerTime=0,this._config.gateway.stopVADDetection()}startInterruptFollowUpWindow(){this.clearInterruptFollowUpWindow(),this.interruptFollowUpTimer=setTimeout((()=>{this.interruptFollowUpTimer=null,"LISTENING"===this._state&&0===this.textBuffer.length&&this.transitionTo("IDLE")}),this._config.interruptFollowUpWindowMs)}clearInterruptFollowUpWindow(){this.interruptFollowUpTimer&&(clearTimeout(this.interruptFollowUpTimer),this.interruptFollowUpTimer=null)}handleTTSPlayEnd(){if("ended"===this.ttsPlaybackState)return;this.activeTTSTransport=null,this.isPlayingTTSLocked=!1,this.echoDetector.markTTSEnd(),this.echoDetector.getLastTTSEndTime(),this.ttsEndTimestampForASRDiag=Date.now(),this.ttsEndTimestampForASRDiag,this.ttsPlaybackState="ended",this._config.gateway.sendTTSPlaybackState("playback_ended");const e=this.currentPlaybackContext,t=this.allowFollowUpDuringPlayback;if(this.currentPlaybackContext=null,this.allowFollowUpDuringPlayback=!1,this.clearInterruptTimers(),this.interruptDetectionEnabled&&(this.interruptDetectionEnabled=!1,this.emit("interruptHintHide")),this.emit("speakEnd"),this.isPlayingWelcomeTTS&&(this.isPlayingWelcomeTTS=!1,this.scheduleWelcomeASRResume()),"SPEAKING"===this._state){if(this.echoDetector.setCurrentTTSText(""),this.isHandlingInterrupt||this.isPlayingInterruptFeedback)return;if(t&&this.isGracefulExitPromptContext(e)&&this.flushGracefulExitFollowUpBuffer())return;this._asrSuspended&&(this.resumeASR(),this._config.gateway.unmuteLocalAudio()),this.transitionTo("IDLE")}}scheduleWelcomeASRResume(){this.clearWelcomeAsrResumeTimer(),this.welcomeAsrResumeTimer=setTimeout((()=>{this.welcomeAsrResumeTimer=null,this._asrSuspended&&(this.resumeASR(),this._config.gateway.unmuteLocalAudio())}),this._config.welcomeAsrResumeDelayMs)}clearWelcomeAsrResumeTimer(){this.welcomeAsrResumeTimer&&(clearTimeout(this.welcomeAsrResumeTimer),this.welcomeAsrResumeTimer=null)}handleAudioPlaybackStart(){this.ttsTimeline.markAudioPlayStart()}handleAnimationEnd(e){const t=this._config.animations.wake;t&&e.code===t&&"IDLE"===this._state&&(this._config.animations.idle,this.playBaseAnim("idle"))}handleGatewayDisconnect(){this.emitError({code:"GATEWAY_DISCONNECTED",message:"Gateway connection lost",recoverable:!1}),this.transitionTo("SLEEPING")}handleGatewayReconnecting(){"SPEAKING"===this._state&&this.handleInterrupt()}handleWebRTCStateChange(e){switch(e.state,e.state){case"ready":case"reconnected":this.webrtcReconnectAttempts=0,this._isReconnecting=!1,this.emit("webrtcReady"),this.sendExpandedWakeWords();break;case"disconnected":case"failed":this.attemptWebRTCReconnect();break;case"closed":this._isStarted&&!this._isReconnecting&&this.emitError({code:"WEBRTC_FAILED",message:e.reason||"WebRTC connection closed",recoverable:!0})}}async attemptWebRTCReconnect(){if(!this._isReconnecting){if(this.webrtcReconnectAttempts>=this._config.webrtcMaxReconnectAttempts)return console.error("[VoiceConversation] Max WebRTC reconnect attempts reached"),this.emitError({code:"WEBRTC_FAILED",message:"WebRTC reconnection failed after max attempts",recoverable:!1}),void this.transitionTo("SLEEPING");this._isReconnecting=!0,this.webrtcReconnectAttempts++,this.webrtcReconnectAttempts,this._config.webrtcMaxReconnectAttempts,this.webrtcReconnectTimer=setTimeout((async()=>{try{if(!this._config.gateway.isConnected())return void(this._isReconnecting=!1);await this._config.gateway.createWebRTCConnection(this.handleASRResult),this.webrtcReconnectAttempts=0,this._isReconnecting=!1}catch(e){console.error("[VoiceConversation] WebRTC reconnect failed:",e),this._isReconnecting=!1,this.attemptWebRTCReconnect()}}),this._config.webrtcReconnectInterval)}}clearWebRTCReconnectTimer(){this.webrtcReconnectTimer&&(clearTimeout(this.webrtcReconnectTimer),this.webrtcReconnectTimer=null),this._isReconnecting=!1}_expandedWakeWords=[];sendExpandedWakeWords(){if(this._config.gateway.isConnected()){const e=Bd(this._config.wakeWords,{doubleWakeWord:this._config.doubleWakeWord,interruptWords:this._config.interruptWords});this._expandedWakeWords=e;const t=[...new Set([this._config.wakeConfirmText,this._config.gracefulExitPrompt,this._config.gracefulExitPhase2Prompt,...this._config.syntheticTexts].filter((e=>"string"==typeof e&&e.trim().length>0)).map((e=>e.trim())))];this._config.gateway.sendVoiceInteractionConfig({wakeWords:e,syntheticTexts:t,voiceEngine:this._config.voiceEngine,characterId:this._config.characterId})}}async handleSleep(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"manual";this.clearSilenceTimer(),this.clearIdleTimer(),this.textBuffer=[],this.wakeArmed=!1,this.isPlayingWelcomeTTS=!1,"SPEAKING"===this._state&&await this.handleInterrupt(),"server"!==e&&this._config.gateway.muteLocalAudio(),this.transitionTo("SLEEPING"),this.emit("sleep",{trigger:e})}async handleInterrupt(){this.cancelActiveLLMRequest("LLM request interrupted"),this.committedTranscript="",this.clearInterruptTimers(),this.interruptDetectionEnabled&&(this.interruptDetectionEnabled=!1,this.emit("interruptHintHide")),await this._config.framePlayer.clear(),this._config.framePlayer.setExternalAudioTimeProvider(null),this.webrtcAudioClockBound=!1,this.resetDataEndedFlags(),this._config.gateway.unmuteLocalAudio(),this._config.gateway.isConnected()&&await this._config.gateway.sendInterrupt()}shouldAllowShortFollowUp(e){if("IDLE"!==this._state)return!1;if(!Md(e))return!1;if(this.isInPostExitIdle)return!0;const t=this.echoDetector.getLastTTSEndTime();if(!t)return!1;const i=this._config.continuousWindowMs??8e3;return Date.now()-t<=i}shouldUseWebRTCTTS(){switch(this._config.ttsTransport){case"websocket":return!1;case"webrtc":return!!this._config.gateway.isWebRTCConnected()||(console.warn("[VoiceConversation] WebRTC TTS forced but WebRTC is not connected, falling back to WebSocket TTS"),!1);default:return this._config.gateway.isWebRTCConnected()}}bindActiveLLMRequest(e,t,i){this.clearActiveLLMRequest(e),this.activeLLMRequestId=e,this.activeLLMResolve=t,this.activeLLMReject=i}clearActiveLLMTimeout(e){e&&this.activeLLMRequestId!==e||this.activeLLMTimeout&&(clearTimeout(this.activeLLMTimeout),this.activeLLMTimeout=null)}clearActiveLLMRequest(e){e&&this.activeLLMRequestId!==e||(this.clearActiveLLMTimeout(e??this.activeLLMRequestId),e&&this.activeLLMRequestId!==e||(this.activeLLMRequestId=null,this.activeLLMResolve=null,this.activeLLMReject=null))}resolveActiveLLMRequest(e){if(this.activeLLMRequestId!==e||!this.activeLLMResolve)return;const t=this.activeLLMResolve;this.clearActiveLLMRequest(e),t()}cancelActiveLLMRequest(e){if(this.llmRequestCancelled=!0,!this.activeLLMReject)return void this.clearActiveLLMRequest();const t=this.activeLLMReject,i=this.activeLLMRequestId;this.clearActiveLLMRequest(i),t(new Error(e))}startSilenceTimer(){this.clearSilenceTimer();const e=this.textBuffer.join(""),t=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Sd;if(!e||0===e.trim().length)return t.defaultTimeout;const i=e.trim(),A=xd(i);if(Ud(i))return t.question;if(A.length<t.minCompleteSentenceLength)return t.shortText;const n=i.slice(-1);return"。?!?!.".includes(n)?t.completeSentence:",、;,;".includes(n)||A.length>=10?t.partial:t.defaultTimeout}(e,{...Sd,defaultTimeout:this._config.silenceTimeout});e.slice(-20),this.silenceTimer=setTimeout((()=>{this.flushTextBuffer()}),t)}clearSilenceTimer(){this.silenceTimer&&(clearTimeout(this.silenceTimer),this.silenceTimer=null)}flushTextBuffer(){this.ttsTimeline.start();const e=Gd(this.textBuffer);if(this.textBuffer=[],this.committedTranscript=e,e.trim()){if(Pd(e)&&!this.shouldAllowShortFollowUp(e))return this.ttsTimeline.reset(),void this.transitionTo("IDLE");if(Nd(e)&&!this.shouldAllowShortFollowUp(e))return this.ttsTimeline.reset(),void this.transitionTo("IDLE");if(this._isWakeWordOnly(e))return this.ttsTimeline.reset(),void this.transitionTo("IDLE");this.sendToLLM(e)}else this.ttsTimeline.reset(),this.transitionTo("IDLE")}resetIdleTimer(){this.clearIdleTimer(),this.isInPostExitIdle=!1;const e=this._config.idleTimeout;this.idleTimer=setTimeout((()=>{this._config.gracefulExitEnabled?this.handleGracefulExitPhase1():this.handleSleep("timeout")}),e)}async handleGracefulExitPhase1(){const e=++this.gracefulExitGeneration;this.gracefulExitPhase=1,await this.playTTS(this._config.gracefulExitPrompt,{synthetic:!0,playbackContext:"graceful_exit_prompt",allowFollowUpDuringPlayback:!0}),await this.waitForGracefulExitPlayEnd(),e===this.gracefulExitGeneration?(this.isInPostExitIdle=!0,this.pendingPostExitIdleEmit=!0,this.exitPromptTimer=setTimeout((()=>{this.isInPostExitIdle&&e===this.gracefulExitGeneration&&this.handleGracefulExitPhase2(e)}),this._config.gracefulExitPhase2Silence)):this.gracefulExitGeneration}async handleGracefulExitPhase2(e){this.gracefulExitPhase=2,await this.playTTS(this._config.gracefulExitPhase2Prompt,{synthetic:!0,playbackContext:"graceful_exit_phase2_prompt",allowFollowUpDuringPlayback:!0}),await this.waitForGracefulExitPlayEnd(),e===this.gracefulExitGeneration?this.exitPromptTimer=setTimeout((()=>{this.isInPostExitIdle&&e===this.gracefulExitGeneration&&(this.gracefulExitPhase=0,this.isInPostExitIdle=!1,this.handleSleep("timeout"))}),this._config.gracefulExitPhase3Silence):this.gracefulExitGeneration}waitForGracefulExitPlayEnd(){return new Promise((e=>{const t=()=>{clearTimeout(i),this._config.framePlayer.off("playend",t),e()},i=setTimeout((()=>{console.warn("[VoiceConversation] Graceful exit: playend timeout, proceeding anyway"),this._config.framePlayer.off("playend",t),e()}),3e4);this._config.framePlayer.on("playend",t)}))}clearIdleTimer(){this.idleTimer&&(clearTimeout(this.idleTimer),this.idleTimer=null),this.exitPromptTimer&&(clearTimeout(this.exitPromptTimer),this.exitPromptTimer=null),this.isInPostExitIdle=!1,this.pendingPostExitIdleEmit=!1,this.gracefulExitPhase=0,this.gracefulExitGeneration++}generateRequestId(){return`vc_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}emitError(e){console.error("[VoiceConversation] Error:",e),this._config.onError?.(e),this.emit("error",e)}}var Kd=Object.freeze({__proto__:null,VoiceConversation:qd});const Hd=["停","停止","停一下","好了","不用了","可以了","stop","ok"];class Wd extends t{_config;_state="SLEEPING";_conversationId="";_isStarted=!1;isTransitioning=!1;pendingTransition=null;textBuffer=[];lastTranscript="";llmResponseText="";echoDetector=new yd;effectiveWakeWords=[];effectiveInterruptWords=[];idleTimer=null;gracefulExitPhase=0;ttsDataEnded=!1;isReceivingTTSAudio=!1;wakeTimestamp=0;wakeArmed=!1;ttsEndTimestamp=0;boundHandleTTSPlayStart=null;boundHandleTTSPlayEnd=null;constructor(e){if(super(),this._config={gateway:e.gateway,renderer:e.renderer,framePlayer:e.framePlayer,characterId:e.characterId,wakeWords:e.wakeWords||["你好"],exitWords:e.exitWords||["退出"],interruptWords:e.interruptWords||["停止","stop"],idleTimeout:e.idleTimeout??18e4,autoWake:e.autoWake||!1,echoDetection:!1!==e.echoDetection,doubleWakeWord:e.doubleWakeWord??!0,wakePerTurn:e.wakePerTurn??!1,bargeInStrictMode:e.bargeInStrictMode??!1,continuousWindowMs:e.continuousWindowMs??8e3,gracefulExitEnabled:e.gracefulExitEnabled??!0,gracefulExitPrompt:e.gracefulExitPrompt||"还有什么要问的吗?",animations:e.animations||{idle:"idle",talk:"talk"},onStateChange:e.onStateChange,onTranscript:e.onTranscript,onResponse:e.onResponse,onError:e.onError},this.effectiveWakeWords=Bd(this._config.wakeWords,{doubleWakeWord:this._config.doubleWakeWord,interruptWords:this._config.interruptWords}),this._config.bargeInStrictMode){const e=[];for(const t of this._config.wakeWords)gd.includes(t.toLowerCase())||e.push(...ud(t));this.effectiveInterruptWords=[...new Set([...e,...this._config.interruptWords])]}else this.effectiveInterruptWords=[...Hd,...this._config.interruptWords]}getState(){return this._state}isStarted(){return this._isStarted}async start(){if(this._isStarted)return;this._conversationId=sd(16),this._conversationId,this._config.framePlayer.setPlayAudioThroughAudioManager(!0),this.boundHandleTTSPlayStart=()=>this.handleTTSPlayStart(),this.boundHandleTTSPlayEnd=()=>this.handleTTSPlayEnd(),this._config.framePlayer.on("bs-startplay",this.boundHandleTTSPlayStart),this._config.framePlayer.on("playend",this.boundHandleTTSPlayEnd);let e=0;this._config.gateway.setTTSDataChannelCallback((t=>{this.isReceivingTTSAudio||(this.isReceivingTTSAudio=!0,e=0,this._config.framePlayer.setAudioRate(24e3),this._config.framePlayer.prepareForNewTTS(!0)),e++,t.byteLength,this._config.framePlayer.addBinaryAudio(t)})),this._config.gateway.setLLMCallback((e=>{this.handleLLMResponse(e)}));try{await this._config.gateway.createWebRTCConnection((e=>{this.handleASRResult(e)}))}catch(e){return console.error("[VoiceConversationE2E] WebRTC failed:",e),void this.emit("error",{code:"WEBRTC_FAILED",message:e?.message||"WebRTC connection failed",recoverable:!1})}this._config.gateway.sendVoiceInteractionConfig({wakeWords:this.effectiveWakeWords,syntheticTexts:[],voiceEngine:"doubao_e2e",characterId:this._config.characterId}),this._isStarted=!0,this.transitionTo(this._config.autoWake?"IDLE":"SLEEPING"),this.emit("webrtcReady")}async stop(){this._isStarted&&(this._isStarted=!1,this.clearIdleTimer(),this.boundHandleTTSPlayStart&&this._config.framePlayer.off("bs-startplay",this.boundHandleTTSPlayStart),this.boundHandleTTSPlayEnd&&this._config.framePlayer.off("playend",this.boundHandleTTSPlayEnd),this._config.gateway.setLLMCallback(null),this._config.gateway.closeWebRTCConnection(),this.transitionTo("SLEEPING"))}destroy(){this.stop(),this.clearListeners()}wake(){"SLEEPING"===this._state&&(this.transitionTo("IDLE"),this.emit("wakeUp",{trigger:"manual"}))}sleep(){this.handleSleep("manual")}async sendText(e){console.warn("[VoiceConversationE2E] sendText not supported in E2E mode")}handleASRResult(e){if(!this._isStarted)return;const{text:t,isFinal:i}=e,A=t?.trim()||"";if(!A||!Pd(A)){if(A&&this._config.echoDetection){const e="SPEAKING"===this._state,t=this.echoDetector.checkAndExtractFromEcho(A,e);if(t.isEcho&&!t.extractedText)return}switch(this._state){case"SLEEPING":this.handleASRInSleeping(A);break;case"IDLE":this.handleASRInIdle(A,i);break;case"LISTENING":this.handleASRInListening(A,i);break;case"THINKING":break;case"SPEAKING":this.handleASRInSpeaking(A)}}}handleASRInSleeping(e){if(!e)return;if((this._config.doubleWakeWord?Cd(e,this._config.wakeWords):this.effectiveWakeWords.some((t=>e.includes(t))))&&(this.wakeTimestamp=Date.now(),this.transitionTo("IDLE"),this.emit("wakeUp",{trigger:"word",word:e}),!0===this._config.wakePerTurn)){const{query:t}=pd(e,this._config.wakeWords,this._config.doubleWakeWord);""!==t?(this.wakeArmed=!1,this.submitWakePerTurnQuery(t,!0)):(this.wakeArmed=!0,this.emit("wakeConfirm",{text:"我在呢"}))}}submitWakePerTurnQuery(e,t){this.textBuffer=[e],this.lastTranscript=e,this.transitionTo("LISTENING"),this.emit("transcript",{text:e,isFinal:!1}),this._config.onTranscript?.(e,!1),t&&this.handleListeningFinal(e)}handleASRInIdle(e,t){if(e){if(this.wakeTimestamp&&Date.now()-this.wakeTimestamp<1e3){if(this._config.wakeWords.some((t=>e.includes(t))))return}if(!(this.ttsEndTimestamp&&Date.now()-this.ttsEndTimestamp<1500&&this.echoDetector.isTextSimilarToTTS(e)))if(Od(e,this._config.exitWords))this.handleSleep("word");else{if(!0===this._config.wakePerTurn){const{matched:i,query:A}=pd(e,this._config.wakeWords,this._config.doubleWakeWord);switch(Jd(i,A,this.wakeArmed)){case"submit-query":return this.wakeArmed=!1,void this.submitWakePerTurnQuery(A,t);case"arm":return this.wakeArmed=!0,void this.emit("wakeConfirm",{text:"我在呢"});case"submit-text":return this.wakeArmed=!1,void this.submitWakePerTurnQuery(e,t);case"ignore":return}}Fd(e,this._config.wakeWords)&&(this.textBuffer=[e],this.lastTranscript=e,this.transitionTo("LISTENING"),this.emit("transcript",{text:e,isFinal:!1}),this._config.onTranscript?.(e,!1),t&&this.handleListeningFinal(e))}}}handleASRInListening(e,t){e&&(this.lastTranscript=e,this.emit("transcript",{text:e,isFinal:!1}),this._config.onTranscript?.(e,!1)),t&&this.handleListeningFinal(this.lastTranscript)}handleListeningFinal(e){this.emit("transcript",{text:e,isFinal:!0}),this._config.onTranscript?.(e,!0),this.transitionTo("THINKING"),this.textBuffer=[],this.lastTranscript="",this.llmResponseText=""}handleASRInSpeaking(e){if(!e)return;this.effectiveInterruptWords.some((t=>e.toLowerCase().includes(t.toLowerCase())))&&this.handleInterrupt(e)}handleLLMResponse(e){if(this._isStarted)switch(e.type){case"llm":e.text&&(this.llmResponseText+=e.text,this.emit("response",{text:e.text}),this._config.onResponse?.(this.llmResponseText));break;case"end":"tts"===e.endType&&(this.ttsDataEnded=!0,setTimeout((()=>{this._config.framePlayer.markAudioStreamEnded()}),500)),"llm"===e.endType&&(this.llmResponseText&&this.echoDetector.addTTSToHistory(this.llmResponseText),this.llmResponseText);break;case"tts":break;case"a2f":if(e.blendShapes){const t=e.audioOffset;this._config.framePlayer.addShapes(e.blendShapes,t)}}}handleTTSPlayStart(){if(!this._isStarted)return;const e=Array.isArray(this._config.animations.talk)?this._config.animations.talk[Math.floor(Math.random()*this._config.animations.talk.length)]:this._config.animations.talk;this._config.renderer?.playAction&&this._config.renderer.playAction(e),this.transitionTo("SPEAKING"),this.emit("speaking",{text:this.llmResponseText}),this.emit("interruptHintShow",{words:this.effectiveInterruptWords.slice(0,3)})}handleTTSPlayEnd(){this._isStarted&&(this._config.renderer?.playAction&&this._config.renderer.playAction(this._config.animations.idle),this.echoDetector.markTTSEnd(),this.ttsEndTimestamp=Date.now(),this.ttsDataEnded=!1,this.isReceivingTTSAudio=!1,this.emit("speakEnd"),this.emit("interruptHintHide"),this.transitionTo("IDLE"))}handleInterrupt(e){this._config.framePlayer.clear(),this._config.gateway.sendInterrupt(),this.ttsDataEnded=!1,this.isReceivingTTSAudio=!1,this.llmResponseText="",this.emit("interrupted",{text:e,feedback:""}),this.emit("interruptHintHide"),this._config.renderer?.playAction&&this._config.renderer.playAction(this._config.animations.idle),this.transitionTo("IDLE")}handleSleep(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"manual";this.clearIdleTimer(),this.gracefulExitPhase=0,this.wakeArmed=!1,this.transitionTo("SLEEPING"),this.emit("sleep",{trigger:e})}startIdleTimer(){this.clearIdleTimer();const e=0===this.gracefulExitPhase?this._config.continuousWindowMs:this._config.idleTimeout;this.idleTimer=setTimeout((()=>{"IDLE"===this._state&&(this._config.gracefulExitEnabled&&0===this.gracefulExitPhase?(this.gracefulExitPhase=1,this.emit("postExitIdle"),this.startIdleTimer()):this.handleSleep("timeout"))}),e)}clearIdleTimer(){this.idleTimer&&(clearTimeout(this.idleTimer),this.idleTimer=null)}transitionTo(e){if(this.isTransitioning)return void(this.pendingTransition=e);const t=this._state;if(t!==e&&(this.isTransitioning=!0,this._state=e,this.onEnterState(e,t),this.emit("stateChange",{state:e,prevState:t}),this._config.onStateChange?.(e,t),this._config.gateway.sendStateSync?.(e),this.isTransitioning=!1,this.pendingTransition)){const e=this.pendingTransition;this.pendingTransition=null,this.transitionTo(e)}}onEnterState(e,t){switch("IDLE"===e||"LISTENING"===e?this._config.gateway.startAudioLevelMonitor?.((e=>{this.emit("audioLevel",{level:e})})):(this._config.gateway.stopAudioLevelMonitor?.(),"LISTENING"!==t&&"IDLE"!==t||this.emit("audioLevel",{level:0})),e){case"SLEEPING":this.clearIdleTimer(),this.textBuffer=[],this.lastTranscript="",this.llmResponseText="",this.gracefulExitPhase=0,this.wakeArmed=!1,this._config.gateway.muteLocalAudio?.();break;case"IDLE":this.clearIdleTimer(),this.textBuffer=[],this.lastTranscript="",this.llmResponseText="",this._config.gateway.unmuteLocalAudio?.(),this._config.renderer?.playAction&&this._config.renderer.playAction(this._config.animations.idle),this.startIdleTimer();break;case"LISTENING":this.clearIdleTimer(),this.gracefulExitPhase=0;break;case"THINKING":case"SPEAKING":this.clearIdleTimer()}}}export{us as B,$g as G,Qd as H,qd as V,gn as a,Is as b,r as c,Zg as d,Wd as e,ud as f,a as g,Bd as h,ro as i};