genosdb 0.22.3 → 0.22.5

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.
package/README.md CHANGED
@@ -151,8 +151,6 @@ For interactive, AI-assisted GenosDB documentation:
151
151
 
152
152
  [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/estebanrfp/gdb)
153
153
 
154
- [Mintlify GenosDB Documentation](https://estebanrfp-gdb.mintlify.app/docs)
155
-
156
154
  ## Examples
157
155
 
158
156
  We’ve created a collection of interactive examples to help you understand how GDB works in real-world scenarios. These examples cover everything from basic setup to advanced features like RBAC and P2P synchronization.
@@ -230,6 +228,7 @@ We value community contributions — get involved through:
230
228
 
231
229
  - [Issues](https://github.com/estebanrfp/gdb/issues) — report bugs or request features
232
230
  - [Discussions](https://github.com/estebanrfp/gdb/discussions) — ask questions or share ideas
231
+ - ⭐ [Star the repo](https://github.com/estebanrfp/gdb) — if GenosDB saves you a backend, it helps other developers find it
233
232
 
234
233
  See the discussion on Product Hunt:
235
234
 
@@ -1,2 +1,2 @@
1
1
  var log=(()=>{const n=()=>{};return new Proxy(console,{get:(c,m)=>globalThis.__gdbDebug?c[m].bind(c):n})})();
2
- var F$=typeof globalThis==="object"&&"crypto"in globalThis?globalThis.crypto:void 0;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function m$($){return $ instanceof Uint8Array||ArrayBuffer.isView($)&&$.constructor.name==="Uint8Array"}function U0($){if(!Number.isSafeInteger($)||$<0)throw Error("positive integer expected, got "+$)}function A$($,...J){if(!m$($))throw Error("Uint8Array expected");if(J.length>0&&!J.includes($.length))throw Error("Uint8Array expected of length "+J+", got length="+$.length)}function C0($){if(typeof $!=="function"||typeof $.create!=="function")throw Error("Hash should be wrapped by utils.createHasher");U0($.outputLen),U0($.blockLen)}function s$($,J=!0){if($.destroyed)throw Error("Hash instance has been destroyed");if(J&&$.finished)throw Error("Hash#digest() has already been called")}function y8($,J){A$($);let q=J.outputLen;if($.length<q)throw Error("digestInto() expects output buffer of length at least "+q)}function h$(...$){for(let J=0;J<$.length;J++)$[J].fill(0)}function S0($){return new DataView($.buffer,$.byteOffset,$.byteLength)}function R$($,J){return $<<32-J|$>>>J}var g8=(()=>typeof Uint8Array.from([]).toHex==="function"&&typeof Uint8Array.fromHex==="function")(),ZJ=Array.from({length:256},($,J)=>J.toString(16).padStart(2,"0"));function C$($){if(A$($),g8)return $.toHex();let J="";for(let q=0;q<$.length;q++)J+=ZJ[$[q]];return J}var k$={_0:48,_9:57,A:65,F:70,a:97,f:102};function f8($){if($>=k$._0&&$<=k$._9)return $-k$._0;if($>=k$.A&&$<=k$.F)return $-(k$.A-10);if($>=k$.a&&$<=k$.f)return $-(k$.a-10);return}function c$($){if(typeof $!=="string")throw Error("hex string expected, got "+typeof $);if(g8)return Uint8Array.fromHex($);let J=$.length,q=J/2;if(J%2)throw Error("hex string expected, got unpadded hex of length "+J);let Q=new Uint8Array(q);for(let G=0,Y=0;G<q;G++,Y+=2){let X=f8($.charCodeAt(Y)),K=f8($.charCodeAt(Y+1));if(X===void 0||K===void 0){let U=$[Y]+$[Y+1];throw Error('hex string expected, got non-hex character "'+U+'" at index '+Y)}Q[G]=X*16+K}return Q}function P0($){if(typeof $!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode($))}function K0($){if(typeof $==="string")$=P0($);return A$($),$}function j$(...$){let J=0;for(let Q=0;Q<$.length;Q++){let G=$[Q];A$(G),J+=G.length}let q=new Uint8Array(J);for(let Q=0,G=0;Q<$.length;Q++){let Y=$[Q];q.set(Y,G),G+=Y.length}return q}class j0{}function u8($){let J=(Q)=>$().update(K0(Q)).digest(),q=$();return J.outputLen=q.outputLen,J.blockLen=q.blockLen,J.create=()=>$(),J}function d$($=32){if(F$&&typeof F$.getRandomValues==="function")return F$.getRandomValues(new Uint8Array($));if(F$&&typeof F$.randomBytes==="function")return Uint8Array.from(F$.randomBytes($));throw Error("crypto.getRandomValues must be defined")}function UJ($,J,q,Q){if(typeof $.setBigUint64==="function")return $.setBigUint64(J,q,Q);let G=BigInt(32),Y=BigInt(4294967295),X=Number(q>>G&Y),K=Number(q&Y),U=Q?4:0,B=Q?0:4;$.setUint32(J+U,X,Q),$.setUint32(J+B,K,Q)}function F8($,J,q){return $&J^~$&q}function m8($,J,q){return $&J^$&q^J&q}class J8 extends j0{constructor($,J,q,Q){super();this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=$,this.outputLen=J,this.padOffset=q,this.isLE=Q,this.buffer=new Uint8Array($),this.view=S0(this.buffer)}update($){s$(this),$=K0($),A$($);let{view:J,buffer:q,blockLen:Q}=this,G=$.length;for(let Y=0;Y<G;){let X=Math.min(Q-this.pos,G-Y);if(X===Q){let K=S0($);for(;Q<=G-Y;Y+=Q)this.process(K,Y);continue}if(q.set($.subarray(Y,Y+X),this.pos),this.pos+=X,Y+=X,this.pos===Q)this.process(J,0),this.pos=0}return this.length+=$.length,this.roundClean(),this}digestInto($){s$(this),y8($,this),this.finished=!0;let{buffer:J,view:q,blockLen:Q,isLE:G}=this,{pos:Y}=this;if(J[Y++]=128,h$(this.buffer.subarray(Y)),this.padOffset>Q-Y)this.process(q,0),Y=0;for(let M=Y;M<Q;M++)J[M]=0;UJ(q,Q-8,BigInt(this.length*8),G),this.process(q,0);let X=S0($),K=this.outputLen;if(K%4)throw Error("_sha2: outputLen should be aligned to 32bit");let U=K/4,B=this.get();if(U>B.length)throw Error("_sha2: outputLen bigger than state");for(let M=0;M<U;M++)X.setUint32(4*M,B[M],G)}digest(){let{buffer:$,outputLen:J}=this;this.digestInto($);let q=$.slice(0,J);return this.destroy(),q}_cloneInto($){$||($=new this.constructor),$.set(...this.get());let{blockLen:J,buffer:q,length:Q,finished:G,destroyed:Y,pos:X}=this;if($.destroyed=Y,$.finished=G,$.length=Q,$.pos=X,Q%J)$.buffer.set(q);return $}clone(){return this._cloneInto()}}var S$=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var KJ=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),b$=new Uint32Array(64);class h8 extends J8{constructor($=32){super(64,$,8,!1);this.A=S$[0]|0,this.B=S$[1]|0,this.C=S$[2]|0,this.D=S$[3]|0,this.E=S$[4]|0,this.F=S$[5]|0,this.G=S$[6]|0,this.H=S$[7]|0}get(){let{A:$,B:J,C:q,D:Q,E:G,F:Y,G:X,H:K}=this;return[$,J,q,Q,G,Y,X,K]}set($,J,q,Q,G,Y,X,K){this.A=$|0,this.B=J|0,this.C=q|0,this.D=Q|0,this.E=G|0,this.F=Y|0,this.G=X|0,this.H=K|0}process($,J){for(let M=0;M<16;M++,J+=4)b$[M]=$.getUint32(J,!1);for(let M=16;M<64;M++){let A=b$[M-15],z=b$[M-2],j=R$(A,7)^R$(A,18)^A>>>3,w=R$(z,17)^R$(z,19)^z>>>10;b$[M]=w+b$[M-7]+j+b$[M-16]|0}let{A:q,B:Q,C:G,D:Y,E:X,F:K,G:U,H:B}=this;for(let M=0;M<64;M++){let A=R$(X,6)^R$(X,11)^R$(X,25),z=B+A+F8(X,K,U)+KJ[M]+b$[M]|0,w=(R$(q,2)^R$(q,13)^R$(q,22))+m8(q,Q,G)|0;B=U,U=K,K=X,X=Y+z|0,Y=G,G=Q,Q=q,q=z+w|0}q=q+this.A|0,Q=Q+this.B|0,G=G+this.C|0,Y=Y+this.D|0,X=X+this.E|0,K=K+this.F|0,U=U+this.G|0,B=B+this.H|0,this.set(q,Q,G,Y,X,K,U,B)}roundClean(){h$(b$)}destroy(){this.set(0,0,0,0,0,0,0,0),h$(this.buffer)}}var I0=u8(()=>new h8);class q8 extends j0{constructor($,J){super();this.finished=!1,this.destroyed=!1,C0($);let q=K0(J);if(this.iHash=$.create(),typeof this.iHash.update!=="function")throw Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let Q=this.blockLen,G=new Uint8Array(Q);G.set(q.length>Q?$.create().update(q).digest():q);for(let Y=0;Y<G.length;Y++)G[Y]^=54;this.iHash.update(G),this.oHash=$.create();for(let Y=0;Y<G.length;Y++)G[Y]^=106;this.oHash.update(G),h$(G)}update($){return s$(this),this.iHash.update($),this}digestInto($){s$(this),A$($,this.outputLen),this.finished=!0,this.iHash.digestInto($),this.oHash.update($),this.oHash.digestInto($),this.destroy()}digest(){let $=new Uint8Array(this.oHash.outputLen);return this.digestInto($),$}_cloneInto($){$||($=Object.create(Object.getPrototypeOf(this),{}));let{oHash:J,iHash:q,finished:Q,destroyed:G,blockLen:Y,outputLen:X}=this;return $=$,$.finished=Q,$.destroyed=G,$.blockLen=Y,$.outputLen=X,$.oHash=J._cloneInto($.oHash),$.iHash=q._cloneInto($.iHash),$}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}var G8=($,J,q)=>new q8($,J).update(q).digest();G8.create=($,J)=>new q8($,J);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */var z8=BigInt(0),X8=BigInt(1);function W0($,J=""){if(typeof $!=="boolean"){let q=J&&`"${J}"`;throw Error(q+"expected boolean, got type="+typeof $)}return $}function f$($,J,q=""){let Q=m$($),G=$?.length,Y=J!==void 0;if(!Q||Y&&G!==J){let X=q&&`"${q}" `,K=Y?` of length ${J}`:"",U=Q?`length=${G}`:`type=${typeof $}`;throw Error(X+"expected Uint8Array"+K+", got "+U)}return $}function D0($){let J=$.toString(16);return J.length&1?"0"+J:J}function c8($){if(typeof $!=="string")throw Error("hex string expected, got "+typeof $);return $===""?z8:BigInt("0x"+$)}function P$($){return c8(C$($))}function Z8($){return A$($),c8(C$(Uint8Array.from($).reverse()))}function t$($,J){return c$($.toString(16).padStart(J*2,"0"))}function U8($,J){return t$($,J).reverse()}function o($,J,q){let Q;if(typeof J==="string")try{Q=c$(J)}catch(Y){throw Error($+" must be hex string or Uint8Array, cause: "+Y)}else if(m$(J))Q=Uint8Array.from(J);else throw Error($+" must be hex string or Uint8Array");let G=Q.length;if(typeof q==="number"&&G!==q)throw Error($+" of length "+q+" expected, got "+G);return Q}var Y8=($)=>typeof $==="bigint"&&z8<=$;function M0($,J,q){return Y8($)&&Y8(J)&&Y8(q)&&J<=$&&$<q}function d8($,J,q,Q){if(!M0(J,q,Q))throw Error("expected valid "+$+": "+q+" <= n < "+Q+", got "+J)}function E0($){let J;for(J=0;$>z8;$>>=X8,J+=1);return J}var y$=($)=>(X8<<BigInt($))-X8;function l8($,J,q){if(typeof $!=="number"||$<2)throw Error("hashLen must be a number");if(typeof J!=="number"||J<2)throw Error("qByteLen must be a number");if(typeof q!=="function")throw Error("hmacFn must be a function");let Q=(j)=>new Uint8Array(j),G=(j)=>Uint8Array.of(j),Y=Q($),X=Q($),K=0,U=()=>{Y.fill(1),X.fill(0),K=0},B=(...j)=>q(X,Y,...j),M=(j=Q(0))=>{if(X=B(G(0),j),Y=B(),j.length===0)return;X=B(G(1),j),Y=B()},A=()=>{if(K++>=1000)throw Error("drbg: tried 1000 values");let j=0,w=[];while(j<J){Y=B();let C=Y.slice();w.push(C),j+=Y.length}return j$(...w)};return(j,w)=>{U(),M(j);let C=void 0;while(!(C=w(A())))M();return U(),C}}function V0($,J,q={}){if(!$||typeof $!=="object")throw Error("expected valid options object");function Q(G,Y,X){let K=$[G];if(X&&K===void 0)return;let U=typeof K;if(U!==Y||K===null)throw Error(`param "${G}" is invalid: expected ${Y}, got ${U}`)}Object.entries(J).forEach(([G,Y])=>Q(G,Y,!1)),Object.entries(q).forEach(([G,Y])=>Q(G,Y,!0))}function K8($){let J=new WeakMap;return(q,...Q)=>{let G=J.get(q);if(G!==void 0)return G;let Y=$(q,...Q);return J.set(q,Y),Y}}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */var U$=BigInt(0),Y$=BigInt(1),l$=BigInt(2),i8=BigInt(3),r8=BigInt(4),a8=BigInt(5),jJ=BigInt(7),n8=BigInt(8),WJ=BigInt(9),s8=BigInt(16);function M$($,J){let q=$%J;return q>=U$?q:J+q}function V$($,J,q){let Q=$;while(J-- >U$)Q*=Q,Q%=q;return Q}function p8($,J){if($===U$)throw Error("invert: expected non-zero number");if(J<=U$)throw Error("invert: expected positive modulus, got "+J);let q=M$($,J),Q=J,G=U$,Y=Y$,X=Y$,K=U$;while(q!==U$){let B=Q/q,M=Q%q,A=G-X*B,z=Y-K*B;Q=q,q=M,G=X,Y=K,X=A,K=z}if(Q!==Y$)throw Error("invert: does not exist");return M$(G,J)}function j8($,J,q){if(!$.eql($.sqr(J),q))throw Error("Cannot find square root")}function t8($,J){let q=($.ORDER+Y$)/r8,Q=$.pow(J,q);return j8($,Q,J),Q}function DJ($,J){let q=($.ORDER-a8)/n8,Q=$.mul(J,l$),G=$.pow(Q,q),Y=$.mul(J,G),X=$.mul($.mul(Y,l$),G),K=$.mul(Y,$.sub(X,$.ONE));return j8($,K,J),K}function MJ($){let J=g$($),q=e8($),Q=q(J,J.neg(J.ONE)),G=q(J,Q),Y=q(J,J.neg(Q)),X=($+jJ)/s8;return(K,U)=>{let B=K.pow(U,X),M=K.mul(B,Q),A=K.mul(B,G),z=K.mul(B,Y),j=K.eql(K.sqr(M),U),w=K.eql(K.sqr(A),U);B=K.cmov(B,M,j),M=K.cmov(z,A,w);let C=K.eql(K.sqr(M),U),E=K.cmov(B,M,C);return j8(K,E,U),E}}function e8($){if($<i8)throw Error("sqrt is not defined for small field");let J=$-Y$,q=0;while(J%l$===U$)J/=l$,q++;let Q=l$,G=g$($);while(o8(G,Q)===1)if(Q++>1000)throw Error("Cannot find square root: probably non-prime P");if(q===1)return t8;let Y=G.pow(Q,J),X=(J+Y$)/l$;return function(U,B){if(U.is0(B))return B;if(o8(U,B)!==1)throw Error("Cannot find square root");let M=q,A=U.mul(U.ONE,Y),z=U.pow(B,J),j=U.pow(B,X);while(!U.eql(z,U.ONE)){if(U.is0(z))return U.ZERO;let w=1,C=U.sqr(z);while(!U.eql(C,U.ONE))if(w++,C=U.sqr(C),w===M)throw Error("Cannot find square root");let E=Y$<<BigInt(M-w-1),m=U.pow(A,E);M=w,A=U.sqr(m),z=U.mul(z,A),j=U.mul(j,m)}return j}}function VJ($){if($%r8===i8)return t8;if($%n8===a8)return DJ;if($%s8===WJ)return MJ($);return e8($)}var NJ=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function W8($){let J={ORDER:"bigint",MASK:"bigint",BYTES:"number",BITS:"number"},q=NJ.reduce((Q,G)=>{return Q[G]="function",Q},J);return V0($,q),$}function BJ($,J,q){if(q<U$)throw Error("invalid exponent, negatives unsupported");if(q===U$)return $.ONE;if(q===Y$)return J;let Q=$.ONE,G=J;while(q>U$){if(q&Y$)Q=$.mul(Q,G);G=$.sqr(G),q>>=Y$}return Q}function v0($,J,q=!1){let Q=Array(J.length).fill(q?$.ZERO:void 0),G=J.reduce((X,K,U)=>{if($.is0(K))return X;return Q[U]=X,$.mul(X,K)},$.ONE),Y=$.inv(G);return J.reduceRight((X,K,U)=>{if($.is0(K))return X;return Q[U]=$.mul(X,Q[U]),$.mul(X,K)},Y),Q}function o8($,J){let q=($.ORDER-Y$)/l$,Q=$.pow(J,q),G=$.eql(Q,$.ONE),Y=$.eql(Q,$.ZERO),X=$.eql(Q,$.neg($.ONE));if(!G&&!Y&&!X)throw Error("invalid Legendre symbol result");return G?1:Y?0:-1}function _0($,J){if(J!==void 0)U0(J);let q=J!==void 0?J:$.toString(2).length,Q=Math.ceil(q/8);return{nBitLength:q,nByteLength:Q}}function g$($,J,q=!1,Q={}){if($<=U$)throw Error("invalid field: expected ORDER > 0, got "+$);let G=void 0,Y=void 0,X=!1,K=void 0;if(typeof J==="object"&&J!=null){if(Q.sqrt||q)throw Error("cannot specify opts in two arguments");let z=J;if(z.BITS)G=z.BITS;if(z.sqrt)Y=z.sqrt;if(typeof z.isLE==="boolean")q=z.isLE;if(typeof z.modFromBytes==="boolean")X=z.modFromBytes;K=z.allowedLengths}else{if(typeof J==="number")G=J;if(Q.sqrt)Y=Q.sqrt}let{nBitLength:U,nByteLength:B}=_0($,G);if(B>2048)throw Error("invalid field: expected ORDER of <= 2048 bytes");let M,A=Object.freeze({ORDER:$,isLE:q,BITS:U,BYTES:B,MASK:y$(U),ZERO:U$,ONE:Y$,allowedLengths:K,create:(z)=>M$(z,$),isValid:(z)=>{if(typeof z!=="bigint")throw Error("invalid field element: expected bigint, got "+typeof z);return U$<=z&&z<$},is0:(z)=>z===U$,isValidNot0:(z)=>!A.is0(z)&&A.isValid(z),isOdd:(z)=>(z&Y$)===Y$,neg:(z)=>M$(-z,$),eql:(z,j)=>z===j,sqr:(z)=>M$(z*z,$),add:(z,j)=>M$(z+j,$),sub:(z,j)=>M$(z-j,$),mul:(z,j)=>M$(z*j,$),pow:(z,j)=>BJ(A,z,j),div:(z,j)=>M$(z*p8(j,$),$),sqrN:(z)=>z*z,addN:(z,j)=>z+j,subN:(z,j)=>z-j,mulN:(z,j)=>z*j,inv:(z)=>p8(z,$),sqrt:Y||((z)=>{if(!M)M=VJ($);return M(A,z)}),toBytes:(z)=>q?U8(z,B):t$(z,B),fromBytes:(z,j=!0)=>{if(K){if(!K.includes(z.length)||z.length>B)throw Error("Field.fromBytes: expected "+K+" bytes, got "+z.length);let C=new Uint8Array(B);C.set(z,q?0:C.length-z.length),z=C}if(z.length!==B)throw Error("Field.fromBytes: expected "+B+" bytes, got "+z.length);let w=q?Z8(z):P$(z);if(X)w=M$(w,$);if(!j){if(!A.isValid(w))throw Error("invalid field element: outside of range 0..ORDER")}return w},invertBatch:(z)=>v0(A,z),cmov:(z,j,w)=>w?j:z});return Object.freeze(A)}function $Q($){if(typeof $!=="bigint")throw Error("field order must be bigint");let J=$.toString(2).length;return Math.ceil(J/8)}function D8($){let J=$Q($);return J+Math.ceil(J/2)}function b0($,J,q=!1){let Q=$.length,G=$Q(J),Y=D8(J);if(Q<16||Q<Y||Q>1024)throw Error("expected "+Y+"-1024 bytes of input, got "+Q);let X=q?Z8($):P$($),K=M$(X,J-Y$)+Y$;return q?U8(K,G):t$(K,G)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */var e$=BigInt(0),p$=BigInt(1);function N0($,J){let q=J.negate();return $?q:J}function f0($,J){let q=v0($.Fp,J.map((Q)=>Q.Z));return J.map((Q,G)=>$.fromAffine(Q.toAffine(q[G])))}function GQ($,J){if(!Number.isSafeInteger($)||$<=0||$>J)throw Error("invalid window size, expected [1.."+J+"], got W="+$)}function M8($,J){GQ($,J);let q=Math.ceil(J/$)+1,Q=2**($-1),G=2**$,Y=y$($),X=BigInt($);return{windows:q,windowSize:Q,mask:Y,maxNumber:G,shiftBy:X}}function QQ($,J,q){let{windowSize:Q,mask:G,maxNumber:Y,shiftBy:X}=q,K=Number($&G),U=$>>X;if(K>Q)K-=Y,U+=p$;let B=J*Q,M=B+Math.abs(K)-1,A=K===0,z=K<0,j=J%2!==0;return{nextN:U,offset:M,isZero:A,isNeg:z,isNegF:j,offsetF:B}}function OJ($,J){if(!Array.isArray($))throw Error("array expected");$.forEach((q,Q)=>{if(!(q instanceof J))throw Error("invalid point at index "+Q)})}function HJ($,J){if(!Array.isArray($))throw Error("array of scalars expected");$.forEach((q,Q)=>{if(!J.isValid(q))throw Error("invalid scalar at index "+Q)})}var V8=new WeakMap,YQ=new WeakMap;function N8($){return YQ.get($)||1}function JQ($){if($!==e$)throw Error("invalid wNAF")}class B8{constructor($,J){this.BASE=$.BASE,this.ZERO=$.ZERO,this.Fn=$.Fn,this.bits=J}_unsafeLadder($,J,q=this.ZERO){let Q=$;while(J>e$){if(J&p$)q=q.add(Q);Q=Q.double(),J>>=p$}return q}precomputeWindow($,J){let{windows:q,windowSize:Q}=M8(J,this.bits),G=[],Y=$,X=Y;for(let K=0;K<q;K++){X=Y,G.push(X);for(let U=1;U<Q;U++)X=X.add(Y),G.push(X);Y=X.double()}return G}wNAF($,J,q){if(!this.Fn.isValid(q))throw Error("invalid scalar");let Q=this.ZERO,G=this.BASE,Y=M8($,this.bits);for(let X=0;X<Y.windows;X++){let{nextN:K,offset:U,isZero:B,isNeg:M,isNegF:A,offsetF:z}=QQ(q,X,Y);if(q=K,B)G=G.add(N0(A,J[z]));else Q=Q.add(N0(M,J[U]))}return JQ(q),{p:Q,f:G}}wNAFUnsafe($,J,q,Q=this.ZERO){let G=M8($,this.bits);for(let Y=0;Y<G.windows;Y++){if(q===e$)break;let{nextN:X,offset:K,isZero:U,isNeg:B}=QQ(q,Y,G);if(q=X,U)continue;else{let M=J[K];Q=Q.add(B?M.negate():M)}}return JQ(q),Q}getPrecomputes($,J,q){let Q=V8.get(J);if(!Q){if(Q=this.precomputeWindow(J,$),$!==1){if(typeof q==="function")Q=q(Q);V8.set(J,Q)}}return Q}cached($,J,q){let Q=N8($);return this.wNAF(Q,this.getPrecomputes(Q,$,q),J)}unsafe($,J,q,Q){let G=N8($);if(G===1)return this._unsafeLadder($,J,Q);return this.wNAFUnsafe(G,this.getPrecomputes(G,$,q),J,Q)}createCache($,J){GQ(J,this.bits),YQ.set($,J),V8.delete($)}hasCache($){return N8($)!==1}}function XQ($,J,q,Q){let G=J,Y=$.ZERO,X=$.ZERO;while(q>e$||Q>e$){if(q&p$)Y=Y.add(G);if(Q&p$)X=X.add(G);G=G.double(),q>>=p$,Q>>=p$}return{p1:Y,p2:X}}function zQ($,J,q,Q){OJ(q,$),HJ(Q,J);let G=q.length,Y=Q.length;if(G!==Y)throw Error("arrays of points and scalars must have equal length");let X=$.ZERO,K=E0(BigInt(G)),U=1;if(K>12)U=K-3;else if(K>4)U=K-2;else if(K>0)U=2;let B=y$(U),M=Array(Number(B)+1).fill(X),A=Math.floor((J.BITS-1)/U)*U,z=X;for(let j=A;j>=0;j-=U){M.fill(X);for(let C=0;C<Y;C++){let E=Q[C],m=Number(E>>BigInt(j)&B);M[m]=M[m].add(q[C])}let w=X;for(let C=M.length-1,E=X;C>0;C--)E=E.add(M[C]),w=w.add(E);if(z=z.add(w),j!==0)for(let C=0;C<U;C++)z=z.double()}return z}function qQ($,J,q){if(J){if(J.ORDER!==$)throw Error("Field.ORDER must match order: Fp == p, Fn == n");return W8(J),J}else return g$($,{isLE:q})}function ZQ($,J,q={},Q){if(Q===void 0)Q=$==="edwards";if(!J||typeof J!=="object")throw Error(`expected valid ${$} CURVE object`);for(let U of["p","n","h"]){let B=J[U];if(!(typeof B==="bigint"&&B>e$))throw Error(`CURVE.${U} must be positive bigint`)}let G=qQ(J.p,q.Fp,Q),Y=qQ(J.n,q.Fn,Q),K=["Gx","Gy","a",$==="weierstrass"?"b":"d"];for(let U of K)if(!G.isValid(J[U]))throw Error(`CURVE.${U} must be valid field element of CURVE.Fp`);return J=Object.freeze(Object.assign({},J)),{CURVE:J,Fp:G,Fn:Y}}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */var UQ=($,J)=>($+($>=0?J:-J)/jQ)/J;function AJ($,J,q){let[[Q,G],[Y,X]]=J,K=UQ(X*$,q),U=UQ(-G*$,q),B=$-K*Q-U*Y,M=-K*G-U*X,A=B<E$,z=M<E$;if(A)B=-B;if(z)M=-M;let j=y$(Math.ceil(E0(q)/2))+$0;if(B<E$||B>=j||M<E$||M>=j)throw Error("splitScalar (endomorphism): failed, k="+$);return{k1neg:A,k1:B,k2neg:z,k2:M}}function H8($){if(!["compact","recovered","der"].includes($))throw Error('Signature format must be "compact", "recovered", or "der"');return $}function O8($,J){let q={};for(let Q of Object.keys(J))q[Q]=$[Q]===void 0?J[Q]:$[Q];if(W0(q.lowS,"lowS"),W0(q.prehash,"prehash"),q.format!==void 0)H8(q.format);return q}class KQ extends Error{constructor($=""){super($)}}var I$={Err:KQ,_tlv:{encode:($,J)=>{let{Err:q}=I$;if($<0||$>256)throw new q("tlv.encode: wrong tag");if(J.length&1)throw new q("tlv.encode: unpadded data");let Q=J.length/2,G=D0(Q);if(G.length/2&128)throw new q("tlv.encode: long form length too big");let Y=Q>127?D0(G.length/2|128):"";return D0($)+Y+G+J},decode($,J){let{Err:q}=I$,Q=0;if($<0||$>256)throw new q("tlv.encode: wrong tag");if(J.length<2||J[Q++]!==$)throw new q("tlv.decode: wrong tlv");let G=J[Q++],Y=!!(G&128),X=0;if(!Y)X=G;else{let U=G&127;if(!U)throw new q("tlv.decode(long): indefinite length not supported");if(U>4)throw new q("tlv.decode(long): byte length is too big");let B=J.subarray(Q,Q+U);if(B.length!==U)throw new q("tlv.decode: length bytes not complete");if(B[0]===0)throw new q("tlv.decode(long): zero leftmost byte");for(let M of B)X=X<<8|M;if(Q+=U,X<128)throw new q("tlv.decode(long): not minimal encoding")}let K=J.subarray(Q,Q+X);if(K.length!==X)throw new q("tlv.decode: wrong value length");return{v:K,l:J.subarray(Q+X)}}},_int:{encode($){let{Err:J}=I$;if($<E$)throw new J("integer: negative integers are not allowed");let q=D0($);if(Number.parseInt(q[0],16)&8)q="00"+q;if(q.length&1)throw new J("unexpected DER parsing assertion: unpadded hex");return q},decode($){let{Err:J}=I$;if($[0]&128)throw new J("invalid signature integer: negative");if($[0]===0&&!($[1]&128))throw new J("invalid signature integer: unnecessary leading zero");return P$($)}},toSig($){let{Err:J,_int:q,_tlv:Q}=I$,G=o("signature",$),{v:Y,l:X}=Q.decode(48,G);if(X.length)throw new J("invalid signature: left bytes after parsing");let{v:K,l:U}=Q.decode(2,Y),{v:B,l:M}=Q.decode(2,U);if(M.length)throw new J("invalid signature: left bytes after parsing");return{r:q.decode(K),s:q.decode(B)}},hexFromSig($){let{_tlv:J,_int:q}=I$,Q=J.encode(2,q.encode($.r)),G=J.encode(2,q.encode($.s)),Y=Q+G;return J.encode(48,Y)}},E$=BigInt(0),$0=BigInt(1),jQ=BigInt(2),y0=BigInt(3),RJ=BigInt(4);function u$($,J){let{BYTES:q}=$,Q;if(typeof J==="bigint")Q=J;else{let G=o("private key",J);try{Q=$.fromBytes(G)}catch(Y){throw Error(`invalid private key: expected ui8a of size ${q}, got ${typeof J}`)}}if(!$.isValidNot0(Q))throw Error("invalid private key: out of range [1..N-1]");return Q}function xJ($,J={}){let q=ZQ("weierstrass",$,J),{Fp:Q,Fn:G}=q,Y=q.CURVE,{h:X,n:K}=Y;V0(J,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object",wrapPrivateKey:"boolean"});let{endo:U}=J;if(U){if(!Q.is0(Y.a)||typeof U.beta!=="bigint"||!Array.isArray(U.basises))throw Error('invalid endo: expected "beta": bigint and "basises": array')}let B=DQ(Q,G);function M(){if(!Q.isOdd)throw Error("compression is not supported: Field does not have .isOdd()")}function A(R,k,D){let{x:H,y:N}=k.toAffine(),Z=Q.toBytes(H);if(W0(D,"isCompressed"),D){M();let W=!Q.isOdd(N);return j$(WQ(W),Z)}else return j$(Uint8Array.of(4),Z,Q.toBytes(N))}function z(R){f$(R,void 0,"Point");let{publicKey:k,publicKeyUncompressed:D}=B,H=R.length,N=R[0],Z=R.subarray(1);if(H===k&&(N===2||N===3)){let W=Q.fromBytes(Z);if(!Q.isValid(W))throw Error("bad point: is not on curve, wrong x");let x=C(W),O;try{O=Q.sqrt(x)}catch(y){let _=y instanceof Error?": "+y.message:"";throw Error("bad point: is not on curve, sqrt error"+_)}M();let T=Q.isOdd(O);if((N&1)===1!==T)O=Q.neg(O);return{x:W,y:O}}else if(H===D&&N===4){let W=Q.BYTES,x=Q.fromBytes(Z.subarray(0,W)),O=Q.fromBytes(Z.subarray(W,W*2));if(!E(x,O))throw Error("bad point: is not on curve");return{x,y:O}}else throw Error(`bad point: got length ${H}, expected compressed=${k} or uncompressed=${D}`)}let j=J.toBytes||A,w=J.fromBytes||z;function C(R){let k=Q.sqr(R),D=Q.mul(k,R);return Q.add(Q.add(D,Q.mul(R,Y.a)),Y.b)}function E(R,k){let D=Q.sqr(k),H=C(R);return Q.eql(D,H)}if(!E(Y.Gx,Y.Gy))throw Error("bad curve params: generator point");let m=Q.mul(Q.pow(Y.a,y0),RJ),p=Q.mul(Q.sqr(Y.b),BigInt(27));if(Q.is0(Q.add(m,p)))throw Error("bad curve params: a or b");function h(R,k,D=!1){if(!Q.isValid(k)||D&&Q.is0(k))throw Error(`bad point coordinate ${R}`);return k}function a(R){if(!(R instanceof v))throw Error("ProjectivePoint expected")}function X$(R){if(!U||!U.basises)throw Error("no endo");return AJ(R,U.basises,G.ORDER)}let z$=K8((R,k)=>{let{X:D,Y:H,Z:N}=R;if(Q.eql(N,Q.ONE))return{x:D,y:H};let Z=R.is0();if(k==null)k=Z?Q.ONE:Q.inv(N);let W=Q.mul(D,k),x=Q.mul(H,k),O=Q.mul(N,k);if(Z)return{x:Q.ZERO,y:Q.ZERO};if(!Q.eql(O,Q.ONE))throw Error("invZ was invalid");return{x:W,y:x}}),W$=K8((R)=>{if(R.is0()){if(J.allowInfinityPoint&&!Q.is0(R.Y))return;throw Error("bad point: ZERO")}let{x:k,y:D}=R.toAffine();if(!Q.isValid(k)||!Q.isValid(D))throw Error("bad point: x or y not field elements");if(!E(k,D))throw Error("bad point: equation left != right");if(!R.isTorsionFree())throw Error("bad point: not in prime-order subgroup");return!0});function q$(R,k,D,H,N){return D=new v(Q.mul(D.X,R),D.Y,D.Z),k=N0(H,k),D=N0(N,D),k.add(D)}class v{constructor(R,k,D){this.X=h("x",R),this.Y=h("y",k,!0),this.Z=h("z",D),Object.freeze(this)}static CURVE(){return Y}static fromAffine(R){let{x:k,y:D}=R||{};if(!R||!Q.isValid(k)||!Q.isValid(D))throw Error("invalid affine point");if(R instanceof v)throw Error("projective point not allowed");if(Q.is0(k)&&Q.is0(D))return v.ZERO;return new v(k,D,Q.ONE)}static fromBytes(R){let k=v.fromAffine(w(f$(R,void 0,"point")));return k.assertValidity(),k}static fromHex(R){return v.fromBytes(o("pointHex",R))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(R=8,k=!0){if(n.createCache(this,R),!k)this.multiply(y0);return this}assertValidity(){W$(this)}hasEvenY(){let{y:R}=this.toAffine();if(!Q.isOdd)throw Error("Field doesn't support isOdd");return!Q.isOdd(R)}equals(R){a(R);let{X:k,Y:D,Z:H}=this,{X:N,Y:Z,Z:W}=R,x=Q.eql(Q.mul(k,W),Q.mul(N,H)),O=Q.eql(Q.mul(D,W),Q.mul(Z,H));return x&&O}negate(){return new v(this.X,Q.neg(this.Y),this.Z)}double(){let{a:R,b:k}=Y,D=Q.mul(k,y0),{X:H,Y:N,Z}=this,W=Q.ZERO,x=Q.ZERO,O=Q.ZERO,T=Q.mul(H,H),P=Q.mul(N,N),y=Q.mul(Z,Z),_=Q.mul(H,N);return _=Q.add(_,_),O=Q.mul(H,Z),O=Q.add(O,O),W=Q.mul(R,O),x=Q.mul(D,y),x=Q.add(W,x),W=Q.sub(P,x),x=Q.add(P,x),x=Q.mul(W,x),W=Q.mul(_,W),O=Q.mul(D,O),y=Q.mul(R,y),_=Q.sub(T,y),_=Q.mul(R,_),_=Q.add(_,O),O=Q.add(T,T),T=Q.add(O,T),T=Q.add(T,y),T=Q.mul(T,_),x=Q.add(x,T),y=Q.mul(N,Z),y=Q.add(y,y),T=Q.mul(y,_),W=Q.sub(W,T),O=Q.mul(y,P),O=Q.add(O,O),O=Q.add(O,O),new v(W,x,O)}add(R){a(R);let{X:k,Y:D,Z:H}=this,{X:N,Y:Z,Z:W}=R,x=Q.ZERO,O=Q.ZERO,T=Q.ZERO,P=Y.a,y=Q.mul(Y.b,y0),_=Q.mul(k,N),c=Q.mul(D,Z),S=Q.mul(H,W),u=Q.add(k,D),b=Q.add(N,Z);u=Q.mul(u,b),b=Q.add(_,c),u=Q.sub(u,b),b=Q.add(k,H);let g=Q.add(N,W);return b=Q.mul(b,g),g=Q.add(_,S),b=Q.sub(b,g),g=Q.add(D,H),x=Q.add(Z,W),g=Q.mul(g,x),x=Q.add(c,S),g=Q.sub(g,x),T=Q.mul(P,b),x=Q.mul(y,S),T=Q.add(x,T),x=Q.sub(c,T),T=Q.add(c,T),O=Q.mul(x,T),c=Q.add(_,_),c=Q.add(c,_),S=Q.mul(P,S),b=Q.mul(y,b),c=Q.add(c,S),S=Q.sub(_,S),S=Q.mul(P,S),b=Q.add(b,S),_=Q.mul(c,b),O=Q.add(O,_),_=Q.mul(g,b),x=Q.mul(u,x),x=Q.sub(x,_),_=Q.mul(u,c),T=Q.mul(g,T),T=Q.add(T,_),new v(x,O,T)}subtract(R){return this.add(R.negate())}is0(){return this.equals(v.ZERO)}multiply(R){let{endo:k}=J;if(!G.isValidNot0(R))throw Error("invalid scalar: out of range");let D,H,N=(Z)=>n.cached(this,Z,(W)=>f0(v,W));if(k){let{k1neg:Z,k1:W,k2neg:x,k2:O}=X$(R),{p:T,f:P}=N(W),{p:y,f:_}=N(O);H=P.add(_),D=q$(k.beta,T,y,Z,x)}else{let{p:Z,f:W}=N(R);D=Z,H=W}return f0(v,[D,H])[0]}multiplyUnsafe(R){let{endo:k}=J,D=this;if(!G.isValid(R))throw Error("invalid scalar: out of range");if(R===E$||D.is0())return v.ZERO;if(R===$0)return D;if(n.hasCache(this))return this.multiply(R);if(k){let{k1neg:H,k1:N,k2neg:Z,k2:W}=X$(R),{p1:x,p2:O}=XQ(v,D,N,W);return q$(k.beta,x,O,H,Z)}else return n.unsafe(D,R)}multiplyAndAddUnsafe(R,k,D){let H=this.multiplyUnsafe(k).add(R.multiplyUnsafe(D));return H.is0()?void 0:H}toAffine(R){return z$(this,R)}isTorsionFree(){let{isTorsionFree:R}=J;if(X===$0)return!0;if(R)return R(v,this);return n.unsafe(this,K).is0()}clearCofactor(){let{clearCofactor:R}=J;if(X===$0)return this;if(R)return R(v,this);return this.multiplyUnsafe(X)}isSmallOrder(){return this.multiplyUnsafe(X).is0()}toBytes(R=!0){return W0(R,"isCompressed"),this.assertValidity(),j(v,this,R)}toHex(R=!0){return C$(this.toBytes(R))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}get px(){return this.X}get py(){return this.X}get pz(){return this.Z}toRawBytes(R=!0){return this.toBytes(R)}_setWindowSize(R){this.precompute(R)}static normalizeZ(R){return f0(v,R)}static msm(R,k){return zQ(v,G,R,k)}static fromPrivateKey(R){return v.BASE.multiply(u$(G,R))}}v.BASE=new v(Y.Gx,Y.Gy,Q.ONE),v.ZERO=new v(Q.ZERO,Q.ONE,Q.ZERO),v.Fp=Q,v.Fn=G;let Z$=G.BITS,n=new B8(v,J.endo?Math.ceil(Z$/2):Z$);return v.BASE.precompute(8),v}function WQ($){return Uint8Array.of($?2:3)}function DQ($,J){return{secretKey:J.BYTES,publicKey:1+$.BYTES,publicKeyUncompressed:1+2*$.BYTES,publicKeyHasPrefix:!0,signature:2*J.BYTES}}function wJ($,J={}){let{Fn:q}=$,Q=J.randomBytes||d$,G=Object.assign(DQ($.Fp,q),{seed:D8(q.ORDER)});function Y(j){try{return!!u$(q,j)}catch(w){return!1}}function X(j,w){let{publicKey:C,publicKeyUncompressed:E}=G;try{let m=j.length;if(w===!0&&m!==C)return!1;if(w===!1&&m!==E)return!1;return!!$.fromBytes(j)}catch(m){return!1}}function K(j=Q(G.seed)){return b0(f$(j,G.seed,"seed"),q.ORDER)}function U(j,w=!0){return $.BASE.multiply(u$(q,j)).toBytes(w)}function B(j){let w=K(j);return{secretKey:w,publicKey:U(w)}}function M(j){if(typeof j==="bigint")return!1;if(j instanceof $)return!0;let{secretKey:w,publicKey:C,publicKeyUncompressed:E}=G;if(q.allowedLengths||w===C)return;let m=o("key",j).length;return m===C||m===E}function A(j,w,C=!0){if(M(j)===!0)throw Error("first arg must be private key");if(M(w)===!1)throw Error("second arg must be public key");let E=u$(q,j);return $.fromHex(w).multiply(E).toBytes(C)}return Object.freeze({getPublicKey:U,getSharedSecret:A,keygen:B,Point:$,utils:{isValidSecretKey:Y,isValidPublicKey:X,randomSecretKey:K,isValidPrivateKey:Y,randomPrivateKey:K,normPrivateKeyToScalar:(j)=>u$(q,j),precompute(j=8,w=$.BASE){return w.precompute(j,!1)}},lengths:G})}function TJ($,J,q={}){C0(J),V0(q,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"});let Q=q.randomBytes||d$,G=q.hmac||((D,...H)=>G8(J,D,j$(...H))),{Fp:Y,Fn:X}=$,{ORDER:K,BITS:U}=X,{keygen:B,getPublicKey:M,getSharedSecret:A,utils:z,lengths:j}=wJ($,q),w={prehash:!1,lowS:typeof q.lowS==="boolean"?q.lowS:!1,format:void 0,extraEntropy:!1},C="compact";function E(D){let H=K>>$0;return D>H}function m(D,H){if(!X.isValidNot0(H))throw Error(`invalid signature ${D}: out of range 1..Point.Fn.ORDER`);return H}function p(D,H){H8(H);let N=j.signature,Z=H==="compact"?N:H==="recovered"?N+1:void 0;return f$(D,Z,`${H} signature`)}class h{constructor(D,H,N){if(this.r=m("r",D),this.s=m("s",H),N!=null)this.recovery=N;Object.freeze(this)}static fromBytes(D,H=C){p(D,H);let N;if(H==="der"){let{r:O,s:T}=I$.toSig(f$(D));return new h(O,T)}if(H==="recovered")N=D[0],H="compact",D=D.subarray(1);let Z=X.BYTES,W=D.subarray(0,Z),x=D.subarray(Z,Z*2);return new h(X.fromBytes(W),X.fromBytes(x),N)}static fromHex(D,H){return this.fromBytes(c$(D),H)}addRecoveryBit(D){return new h(this.r,this.s,D)}recoverPublicKey(D){let H=Y.ORDER,{r:N,s:Z,recovery:W}=this;if(W==null||![0,1,2,3].includes(W))throw Error("recovery id invalid");if(K*jQ<H&&W>1)throw Error("recovery id is ambiguous for h>1 curve");let O=W===2||W===3?N+K:N;if(!Y.isValid(O))throw Error("recovery id 2 or 3 invalid");let T=Y.toBytes(O),P=$.fromBytes(j$(WQ((W&1)===0),T)),y=X.inv(O),_=X$(o("msgHash",D)),c=X.create(-_*y),S=X.create(Z*y),u=$.BASE.multiplyUnsafe(c).add(P.multiplyUnsafe(S));if(u.is0())throw Error("point at infinify");return u.assertValidity(),u}hasHighS(){return E(this.s)}toBytes(D=C){if(H8(D),D==="der")return c$(I$.hexFromSig(this));let H=X.toBytes(this.r),N=X.toBytes(this.s);if(D==="recovered"){if(this.recovery==null)throw Error("recovery bit must be present");return j$(Uint8Array.of(this.recovery),H,N)}return j$(H,N)}toHex(D){return C$(this.toBytes(D))}assertValidity(){}static fromCompact(D){return h.fromBytes(o("sig",D),"compact")}static fromDER(D){return h.fromBytes(o("sig",D),"der")}normalizeS(){return this.hasHighS()?new h(this.r,X.neg(this.s),this.recovery):this}toDERRawBytes(){return this.toBytes("der")}toDERHex(){return C$(this.toBytes("der"))}toCompactRawBytes(){return this.toBytes("compact")}toCompactHex(){return C$(this.toBytes("compact"))}}let a=q.bits2int||function(H){if(H.length>8192)throw Error("input is too large");let N=P$(H),Z=H.length*8-U;return Z>0?N>>BigInt(Z):N},X$=q.bits2int_modN||function(H){return X.create(a(H))},z$=y$(U);function W$(D){return d8("num < 2^"+U,D,E$,z$),X.toBytes(D)}function q$(D,H){return f$(D,void 0,"message"),H?f$(J(D),void 0,"prehashed message"):D}function v(D,H,N){if(["recovered","canonical"].some((S)=>(S in N)))throw Error("sign() legacy options not supported");let{lowS:Z,prehash:W,extraEntropy:x}=O8(N,w);D=q$(D,W);let O=X$(D),T=u$(X,H),P=[W$(T),W$(O)];if(x!=null&&x!==!1){let S=x===!0?Q(j.secretKey):x;P.push(o("extraEntropy",S))}let y=j$(...P),_=O;function c(S){let u=a(S);if(!X.isValidNot0(u))return;let b=X.inv(u),g=$.BASE.multiply(u).toAffine(),t=X.create(g.x);if(t===E$)return;let s=X.create(b*X.create(_+t*T));if(s===E$)return;let l=(g.x===t?0:2)|Number(g.y&$0),$$=s;if(Z&&E(s))$$=X.neg(s),l^=1;return new h(t,$$,l)}return{seed:y,k2sig:c}}function Z$(D,H,N={}){D=o("message",D);let{seed:Z,k2sig:W}=v(D,H,N);return l8(J.outputLen,X.BYTES,G)(Z,W)}function n(D){let H=void 0,N=typeof D==="string"||m$(D),Z=!N&&D!==null&&typeof D==="object"&&typeof D.r==="bigint"&&typeof D.s==="bigint";if(!N&&!Z)throw Error("invalid signature, expected Uint8Array, hex string or Signature instance");if(Z)H=new h(D.r,D.s);else if(N){try{H=h.fromBytes(o("sig",D),"der")}catch(W){if(!(W instanceof I$.Err))throw W}if(!H)try{H=h.fromBytes(o("sig",D),"compact")}catch(W){return!1}}if(!H)return!1;return H}function R(D,H,N,Z={}){let{lowS:W,prehash:x,format:O}=O8(Z,w);if(N=o("publicKey",N),H=q$(o("message",H),x),"strict"in Z)throw Error("options.strict was renamed to lowS");let T=O===void 0?n(D):h.fromBytes(o("sig",D),O);if(T===!1)return!1;try{let P=$.fromBytes(N);if(W&&T.hasHighS())return!1;let{r:y,s:_}=T,c=X$(H),S=X.inv(_),u=X.create(c*S),b=X.create(y*S),g=$.BASE.multiplyUnsafe(u).add(P.multiplyUnsafe(b));if(g.is0())return!1;return X.create(g.x)===y}catch(P){return!1}}function k(D,H,N={}){let{prehash:Z}=O8(N,w);return H=q$(H,Z),h.fromBytes(D,"recovered").recoverPublicKey(H).toBytes()}return Object.freeze({keygen:B,getPublicKey:M,getSharedSecret:A,utils:z,lengths:j,Point:$,sign:Z$,verify:R,recoverPublicKey:k,Signature:h,hash:J})}function LJ($){let J={a:$.a,b:$.b,p:$.Fp.ORDER,n:$.n,h:$.h,Gx:$.Gx,Gy:$.Gy},q=$.Fp,Q=$.allowedPrivateKeyLengths?Array.from(new Set($.allowedPrivateKeyLengths.map((X)=>Math.ceil(X/2)))):void 0,G=g$(J.n,{BITS:$.nBitLength,allowedLengths:Q,modFromBytes:$.wrapPrivateKey}),Y={Fp:q,Fn:G,allowInfinityPoint:$.allowInfinityPoint,endo:$.endo,isTorsionFree:$.isTorsionFree,clearCofactor:$.clearCofactor,fromBytes:$.fromBytes,toBytes:$.toBytes};return{CURVE:J,curveOpts:Y}}function kJ($){let{CURVE:J,curveOpts:q}=LJ($),Q={hmac:$.hmac,randomBytes:$.randomBytes,lowS:$.lowS,bits2int:$.bits2int,bits2int_modN:$.bits2int_modN};return{CURVE:J,curveOpts:q,hash:$.hash,ecdsaOpts:Q}}function CJ($,J){let q=J.Point;return Object.assign({},J,{ProjectivePoint:q,CURVE:Object.assign({},$,_0(q.Fn.ORDER,q.Fn.BITS))})}function MQ($){let{CURVE:J,curveOpts:q,hash:Q,ecdsaOpts:G}=kJ($),Y=xJ(J,q),X=TJ(Y,Q,G);return CJ($,X)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function VQ($,J){let q=(Q)=>MQ({...$,hash:Q});return{...q(J),create:q}}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */var Q0={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},SJ={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]},PJ=BigInt(0),NQ=BigInt(1),A8=BigInt(2);function IJ($){let J=Q0.p,q=BigInt(3),Q=BigInt(6),G=BigInt(11),Y=BigInt(22),X=BigInt(23),K=BigInt(44),U=BigInt(88),B=$*$*$%J,M=B*B*$%J,A=V$(M,q,J)*M%J,z=V$(A,q,J)*M%J,j=V$(z,A8,J)*B%J,w=V$(j,G,J)*j%J,C=V$(w,Y,J)*w%J,E=V$(C,K,J)*C%J,m=V$(E,U,J)*E%J,p=V$(m,K,J)*C%J,h=V$(p,q,J)*M%J,a=V$(h,X,J)*w%J,X$=V$(a,Q,J)*B%J,z$=V$(X$,A8,J);if(!g0.eql(g0.sqr(z$),$))throw Error("Cannot find square root");return z$}var g0=g$(Q0.p,{sqrt:IJ}),HQ=VQ({...Q0,Fp:g0,lowS:!0,endo:SJ},I0),BQ={};function u0($,...J){let q=BQ[$];if(q===void 0){let Q=I0(P0($));q=j$(Q,Q),BQ[$]=q}return I0(j$(q,...J))}var x8=($)=>$.toBytes(!0).slice(1),J0=(()=>HQ.Point)(),w8=($)=>$%A8===PJ;function R8($){let{Fn:J,BASE:q}=J0,Q=u$(J,$),G=q.multiply(Q);return{scalar:w8(G.y)?Q:J.neg(Q),bytes:x8(G)}}function AQ($){let J=g0;if(!J.isValidNot0($))throw Error("invalid x: Fail if x ≥ p");let q=J.create($*$),Q=J.create(q*$+BigInt(7)),G=J.sqrt(Q);if(!w8(G))G=J.neg(G);let Y=J0.fromAffine({x:$,y:G});return Y.assertValidity(),Y}var B0=P$;function RQ(...$){return J0.Fn.create(B0(u0("BIP0340/challenge",...$)))}function OQ($){return R8($).bytes}function EJ($,J,q=d$(32)){let{Fn:Q}=J0,G=o("message",$),{bytes:Y,scalar:X}=R8(J),K=o("auxRand",q,32),U=Q.toBytes(X^B0(u0("BIP0340/aux",K))),B=u0("BIP0340/nonce",U,Y,G),{bytes:M,scalar:A}=R8(B),z=RQ(M,Y,G),j=new Uint8Array(64);if(j.set(M,0),j.set(Q.toBytes(Q.create(A+z*X)),32),!xQ(j,G,Y))throw Error("sign: Invalid signature produced");return j}function xQ($,J,q){let{Fn:Q,BASE:G}=J0,Y=o("signature",$,64),X=o("message",J),K=o("publicKey",q,32);try{let U=AQ(B0(K)),B=B0(Y.subarray(0,32));if(!M0(B,NQ,Q0.p))return!1;let M=B0(Y.subarray(32,64));if(!M0(M,NQ,Q0.n))return!1;let A=RQ(Q.toBytes(B),x8(U),X),z=G.multiplyUnsafe(M).add(U.multiplyUnsafe(Q.neg(A))),{x:j,y:w}=z.toAffine();if(z.is0()||!w8(w)||j!==B)return!1;return!0}catch(U){return!1}}var F0=(()=>{let q=(G=d$(48))=>{return b0(G,Q0.n)};HQ.utils.randomSecretKey;function Q(G){let Y=q(G);return{secretKey:Y,publicKey:OQ(Y)}}return{keygen:Q,getPublicKey:OQ,sign:EJ,verify:xQ,Point:J0,utils:{randomSecretKey:q,randomPrivateKey:q,taggedHash:u0,lift_x:AQ,pointToBytes:x8,numberToBytesBE:t$,bytesToNumberBE:P$,mod:M$},lengths:{secretKey:32,publicKey:32,publicKeyHasPrefix:!1,signature:64,seed:48}}})();var vJ=new TextEncoder,_J=new TextDecoder,T$=($)=>vJ.encode($),o$=($)=>_J.decode($),m0=($)=>Array.from($,(J)=>J.toString(16).padStart(2,"0")).join(""),O$=JSON.stringify,i$=JSON.parse,h0=($,J=Number.MAX_SAFE_INTEGER)=>$.split("").reduce((q,Q)=>q+Q.charCodeAt(0),0)%J;var T8="AES-GCM",bJ={},wQ="$",TQ=",",fJ=($)=>{let J=new Uint8Array($),q=32768,Q="";for(let G=0;G<J.length;G+=32768)Q+=String.fromCharCode(...J.subarray(G,G+32768));return btoa(Q)},yJ=($)=>Uint8Array.from(atob($),(J)=>J.charCodeAt(0)).buffer,O0=($)=>bJ[$]??=crypto.subtle.digest("SHA-1",T$($)).then((J)=>{let q=new Uint8Array(J),Q="";for(let G of q)Q+=G.toString(36);return Q}),LQ=async($,J,q)=>{let Q=await crypto.subtle.digest("SHA-256",T$(`${$}:${J}:${q}`));return crypto.subtle.importKey("raw",Q,{name:T8},!1,["encrypt","decrypt"])},kQ=async($,J)=>{let q=crypto.getRandomValues(new Uint8Array(12)),Q=await $,G=await crypto.subtle.encrypt({name:T8,iv:q},Q,T$(J));return`${q.join(TQ)}${wQ}${fJ(G)}`},CQ=async($,J)=>{let[q,Q]=J.split(wQ);if(!q||!Q)throw Error("Invalid encrypted payload format");let G=Uint8Array.from(q.split(TQ),Number),Y=await $,X=await crypto.subtle.decrypt({name:T8,iv:G},Y,yJ(Q));return o$(X)};var N$="GenosRTC",G0=($,J)=>Array.from({length:$},J);var q0=($)=>Array.from(crypto.getRandomValues(new Uint8Array($)),(J)=>"0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"[J%62]).join(""),F=typeof sessionStorage<"u"?sessionStorage.__genosrtcId??=q0(20):q0(20),v$=Promise.all.bind(Promise),SQ=typeof window<"u",{entries:PQ,fromEntries:c0,keys:a9}=Object,IQ=()=>{},x$=($)=>Error(`GenosRTC: ${$}`),H0=(...$)=>$.join("@"),EQ=($,J)=>{let q=[...$],Q=q.length,G=()=>{let Y=Math.sin(J++)*1e4;return Y-Math.floor(Y)};while(Q){let Y=Math.floor(G()*Q--);[q[Q],q[Y]]=[q[Y],q[Q]]}return q};var gJ=5000,vQ="icegatheringstatechange",_Q="offer",uJ="answer",FJ=[...G0(3,($,J)=>`stun:stun${J||""}.l.google.com:19302`),"stun:stun.cloudflare.com:3478"].map(($)=>({urls:$})),L8=($,{rtcConfig:J,rtcPolyfill:q,turnConfig:Q})=>{let G=new(q||RTCPeerConnection)({iceServers:[...FJ,...Q||[]],...J}),Y={},X=!1,K=!1,U,B=(z)=>Object.assign(z,{binaryType:"arraybuffer",bufferedAmountLowThreshold:65535,onmessage:(j)=>Y.data?.(j.data),onopen:()=>Y.connect?.(),onclose:()=>Y.close?.(),onerror:(j)=>!j?.error?.message?.includes("User-Initiated Abort")&&Y.error?.(j)}),M=()=>Promise.race([new Promise((z)=>{let j=()=>{if(G.iceGatheringState==="complete")G.removeEventListener(vQ,j),z()};G.addEventListener(vQ,j),j()}),new Promise((z)=>setTimeout(z,gJ))]).then(()=>({type:G.localDescription.type,sdp:G.localDescription.sdp.replace(/a=ice-options:trickle\s\n/g,"")}));if($?B(U=G.createDataChannel("data")):G.ondatachannel=({channel:z})=>B(U=z),G.onnegotiationneeded=async()=>{try{X=!0,await G.setLocalDescription(),Y.signal?.(await M())}catch(z){Y.error?.(z)}finally{X=!1}},G.onconnectionstatechange=()=>{if(["disconnected","failed","closed"].includes(G.connectionState))Y.close?.()},G.ontrack=(z)=>{Y.track?.(z.track,z.streams[0]),Y.stream?.(z.streams[0])},G.onremovestream=(z)=>Y.stream?.(z.stream),$&&!G.canTrickleIceCandidates)G.onnegotiationneeded();let A=()=>G.getSenders();return{created:Date.now(),connection:G,get channel(){return U},get isDead(){return G.connectionState==="closed"},async signal(z){if(U?.readyState==="open"&&!z.sdp?.includes("a=rtpmap"))return;try{if(z.type===_Q){if(X||G.signalingState!=="stable"&&!K){if($)return;await v$([G.setLocalDescription({type:"rollback"}),G.setRemoteDescription(z)])}else await G.setRemoteDescription(z);await G.setLocalDescription();let j=await M();return Y.signal?.(j),j}if(z.type===uJ){K=!0;try{await G.setRemoteDescription(z)}finally{K=!1}}}catch(j){Y.error?.(j)}},sendData:(z)=>{if(U?.readyState==="open")U.send(z)},destroy:()=>{U?.close(),G.close(),X=K=!1},setHandlers:(z)=>Object.assign(Y,z),offerPromise:$?new Promise((z)=>Y.signal=(j)=>j.type===_Q&&z(j)):Promise.resolve(),addStream:(z)=>z.getTracks().forEach((j)=>G.addTrack(j,z)),removeStream:(z)=>A().filter((j)=>z.getTracks().includes(j.track)).forEach((j)=>G.removeTrack(j)),addTrack:(z,j)=>G.addTrack(z,j),removeTrack:(z)=>{let j=A().find((w)=>w.track===z);if(j)G.removeTrack(j)},replaceTrack:(z,j)=>A().find((w)=>w.track===z)?.replaceTrack(j)}};var mJ=Object.getPrototypeOf(Uint8Array),l0=12,bQ=0,p0=bQ+l0,o0=p0+1,R0=o0+1,x0=R0+1,A0=16384-x0,d0=255,k8="bufferedamountlow",Y0=($)=>`@_${$}`,C8=100,hJ=3,cJ=200,fQ=($,J,q,Q)=>{let G=new Map,Y=new Map,X=new Map,K={},U={},B={},M={},A=new Map,z=(Z,W)=>{if(!A.has(Z))A.set(Z,new Set);A.get(Z).add(W)},j=(Z,W)=>A.get(Z)?.delete(W),w=(Z,...W)=>A.get(Z)?.forEach((x)=>x(...W)),C=(Z,W)=>{let x=Z?Array.isArray(Z)?Z:[Z]:G.keys();return Array.from(x,(O)=>{let T=G.get(O);if(!T)return console.warn(`${N$}: no peer with id ${O}`),null;return W(O,T)}).filter(Boolean)},E=(Z)=>{if(!G.has(Z))return;G.delete(Z),delete K[Z],delete U[Z],delete B[Z],delete M[Z],w("peer:leave",Z),J(Z)},m=(Z)=>new Promise((W,x)=>{let O=setTimeout(()=>{Z.removeEventListener(k8,T),x(Error(`${N$}: bufferLow timeout`))},5000);function T(){clearTimeout(O),Z.removeEventListener(k8,T),W()}Z.addEventListener(k8,T)}),p=(Z)=>{if(X.has(Z))return X.get(Z);if(!Z)throw x$("action type is required");let W=T$(Z);if(W.byteLength>l0)throw x$(`❌ "${Z}" exceeds ${l0} bytes. Use a shorter name.`);let x=new Uint8Array(l0).map((S,u)=>W[u]||0),O=0,T=new Map([["message",new Set],["progress",new Set]]),P=(S,u)=>T.get(S)?.add(u),y=(S,u)=>T.get(S)?.delete(u),_=async(S,u,b,g)=>{if(b&&typeof b!=="object")throw x$("meta must be object");if(S===void 0)throw x$("data cannot be undefined");let t=S instanceof Blob,s=t||S instanceof ArrayBuffer||S instanceof mJ,l=typeof S!=="string";if(b&&!s)throw x$("meta only allowed with binary");let $$=s?new Uint8Array(t?await S.arrayBuffer():S):T$(l?O$(S):S),G$=b?T$(O$(b)):null,Q$=Math.ceil($$.byteLength/A0)+(b?1:0)||1;if(Q$>C8)throw x$(`Message too large, exceeds max chunks ${C8}`);let T0=G0(Q$,(r$,B$)=>{let L$=B$===Q$-1,D$=b&&B$===0,_$=D$?G$:$$.subarray(b?(B$-1)*A0:B$*A0,b?B$*A0:(B$+1)*A0),w$=new Uint8Array(x0+_$.byteLength);return w$.set(x),w$.set([O],p0),w$.set([L$|D$<<1|s<<2|l<<3],o0),w$.set([Math.round((B$+1)/Q$*d0)],R0),w$.set(_$,x0),w$});return O=O+1&d0,v$(C(u,async(r$,B$)=>{let{channel:L$}=B$;for(let D$=0;D$<Q$;D$++){let _$=0;while(L$.bufferedAmount>L$.bufferedAmountLowThreshold){if(_$++>hJ)throw x$(`${N$}: send buffer full, max retries reached for peer ${r$}`);try{await m(L$)}catch(w$){console.warn(w$.message),await new Promise((L0)=>setTimeout(L0,cJ))}}if(!G.has(r$))break;B$.sendData(T0[D$]),g?.(T0[D$][R0]/d0,r$,b)}}))};Y.set(Z,{listeners:T,send:_});let c={send:_,on:P,off:y};return X.set(Z,c),c},h=(Z,W)=>{try{let x=new Uint8Array(W),O=o$(x.subarray(bQ,p0)).replace(/\x00/g,"");if(!Y.has(O))return console.warn(`${N$}: unregistered type (${O})`);let[T]=x.subarray(p0,o0),[P]=x.subarray(o0,R0),[y]=x.subarray(R0,x0),_=x.subarray(x0),c=Boolean(P&1),S=Boolean(P&2),u=Boolean(P&4),b=Boolean(P&8),g=Y.get(O),t=(K[Z]||={})[O]||={};if(t[T]?.chunks?.length>C8){console.warn(`${N$}: peer ${Z} sent too many chunks for nonce ${T}, ignoring.`);return}let s=t[T]||={chunks:[]};if(S)try{s.meta=i$(o$(_))}catch{console.warn(`${N$}: failed to parse meta from peer ${Z} for type ${O}`);return}else s.chunks.push(_);if(g.listeners.get("progress").forEach((G$)=>{try{G$(y/d0,Z,s.meta)}catch(Q$){console.error(Q$)}}),!c)return;let l=new Uint8Array(s.chunks.reduce((G$,Q$)=>G$+Q$.byteLength,0));s.chunks.reduce((G$,Q$)=>(l.set(Q$,G$),G$+Q$.byteLength),0),delete t[T];let $$;if(u)$$=l;else if(b)try{$$=i$(o$(l))}catch{console.warn(`${N$}: failed to parse JSON message data from peer ${Z} for type ${O}`);return}else $$=o$(l);g.listeners.get("message").forEach((G$)=>{try{G$($$,Z,s.meta)}catch(Q$){console.error(Q$)}})}catch(x){console.error(`${N$}: error handling data from peer ${Z}:`,x)}},a=async()=>{try{await H(""),await new Promise((Z)=>setTimeout(Z,99))}catch(Z){console.warn(`${N$}: error sending leave`,Z)}for(let[Z,W]of G){try{W.destroy()}catch{}G.delete(Z)}q()},{send:X$,on:z$}=p(Y0("ping")),{send:W$,on:q$}=p(Y0("pong")),{send:v,on:Z$}=p(Y0("signal")),{send:n,on:R}=p(Y0("stream")),{send:k,on:D}=p(Y0("track")),{send:H,on:N}=p(Y0("leave"));if($((Z,W)=>{let x=G.get(W);if(x===Z)return;if(x){let O=()=>{};x.setHandlers({data:O,stream:O,track:O,signal:O,close:O,error:O})}G.set(W,Z),Z.setHandlers({data:(O)=>h(W,O),stream:(O)=>{w("stream:add",O,W,B[W]),delete B[W]},track:(O,T)=>{w("track:add",O,T,W,M[W]),delete M[W]},signal:(O)=>v(O,W),close:()=>E(W),error:(O)=>{console.error(`${N$}: peer error for ${W}`,O),E(W)}}),w("peer:join",W,Q?.(W))}),z$("message",(Z,W)=>W$("",W)),q$("message",(Z,W)=>{U[W]?.(),delete U[W]}),Z$("message",(Z,W)=>G.get(W)?.signal(Z)),R("message",(Z,W)=>B[W]=Z),D("message",(Z,W)=>M[W]=Z),N("message",(Z,W)=>E(W)),SQ)addEventListener("beforeunload",a);return{on:z,off:j,channel:p,leave:a,ping:async(Z)=>{if(!Z)throw x$("ping() requires target peer ID");let W=Date.now();return X$("",Z),await new Promise((x)=>U[Z]=x),Date.now()-W},getPeers:()=>c0(Array.from(G,([Z,W])=>[Z,W.connection])),addStream:(Z,W,x)=>C(W,async(O,T)=>{if(x)await n(x,O);T.addStream(Z)}),removeStream:(Z,W)=>C(W,(x,O)=>O.removeStream(Z)),addTrack:(Z,W,x,O)=>C(x,async(T,P)=>{if(O)await k(O,T);P.addTrack(Z,W)}),removeTrack:(Z,W)=>C(W,(x,O)=>O.removeTrack(Z)),replaceTrack:(Z,W,x,O)=>C(x,async(T,P)=>{if(O)await k(O,T);P.replaceTrack(Z,W)})}};var dJ=5,lJ=10,pJ=2500,i0=57333,yQ=({init:$,subscribe:J,announce:q})=>{let Q={},G=!1,Y,X;return(K,U,B)=>{let{appId:M}=K;if(Q[M]?.[U])return Q[M][U];if(!K||!U||!M&&!K.firebaseApp)throw x$(!K?"config required":!U?"roomId required":"appId missing");let A=IQ;if(!G){let N=$(K);X=G0(dJ,()=>{try{return L8(!0,K)}catch{return null}}).filter(Boolean),Y=Array.isArray(N)?N:[N];let Z=setInterval(()=>{X=X.filter((W)=>{let x=Date.now()-W.created<i0;if(!x)W.destroy();return x})},i0);Q.offerCleanupTimer||=Z,G=!0}let z={},j={},w=new Map,C=new Map,E={},m=H0(N$,M,U),p=O0(m),h=O0(H0(m,F)),a=LQ(K.password||"",M,U),X$=(N)=>async(Z)=>({type:Z.type,sdp:await N(a,Z.sdp)}),z$=X$(CQ),W$=X$(kQ),q$=(N)=>{return setTimeout(()=>{if(!N.isDead&&!Object.values(j).includes(N))N.destroy()},i0),N},v=(N)=>{try{return q$(L8(N,K))}catch{return null}},Z$=(N,Z)=>{if(j[Z]===N)return;j[Z]?.destroy(),j[Z]=N,A(N,Z),z[Z]?.forEach((W)=>W!==N&&W.destroy()),delete z[Z]},n=(N,Z)=>{if(j[Z]===N)delete j[Z]},R=(N)=>async(Z,W,x)=>{let[O,T]=await v$([p,h]);if(Z!==O&&Z!==T)return;let{peerId:P,offer:y,answer:_,type:c}=typeof W==="string"?i$(W):W;if(P&&P!==F)C.set(P,Date.now());if(c&&P)E[P]=c;if(P===F||j[P])return;if(K.admit&&!K.admit(P))return;if(y){if(z[P]?.[N]&&F>P)return;let S=v(!1);if(!S)return;S.setHandlers({connect:()=>Z$(S,P),close:()=>n(S,P)});try{let u=await z$(y);if(S.isDead)return;let[b,g]=await v$([O0(H0(m,P)),S.signal(u).then(W$)]);x(b,O$({peerId:F,answer:g,...K.type&&{type:K.type}}))}catch{B?.({error:"decryption failed (offer)",appId:M,peerId:P,roomId:U})}}else if(_){let S=z[P]?.[N];if(!S||S.isDead)return;S.setHandlers({connect:()=>Z$(S,P),close:()=>n(S,P)});try{S.signal(await z$(_))}catch{B?.({error:"decryption failed (answer)",appId:M,peerId:P,roomId:U})}}else{let S=z[P]||=[];if(S.forEach((l,$$)=>{if(l&&(l.isDead||Date.now()-(l.dialedAt??l.created)>i0)){if(l.isDead)w.set(P,Date.now()+30000);l.destroy(),delete S[$$]}}),S[N]||S.filter(Boolean).length>=2||w.get(P)>Date.now())return;if(Object.values(z).reduce((l,$$)=>l+$$.filter((G$)=>G$&&!G$.isDead).length,0)>=lJ)return;let b=X.pop(),g=b?q$(b):v(!0);if(!g){w.set(P,Date.now()+30000);return}g.dialedAt=Date.now();let[t,{offer:s}]=await v$([O0(H0(m,P)),g.offerPromise.then(W$).then((l)=>({offer:l}))]);S[N]=g,g.setHandlers({connect:()=>Z$(g,P),close:()=>n(g,P)}),x(t,O$({peerId:F,offer:s,peer:g,...K.type&&{type:K.type}}))}},k=[],D=[];Y.forEach(async(N,Z)=>{let W=await N;if(!W)return;let[x,O]=await v$([p,h]);D[Z]=J(W,x,O,R(Z));let T=async()=>{let P=await q(W,x,O);k[Z]=setTimeout(T,typeof P==="number"?P:pJ)};T()}),Q[M]||={};let H=fQ((N)=>A=N,(N)=>delete j[N],()=>H.onCleanup?.(),(N)=>E[N]);return H.onCleanup=()=>{if(delete Q[M][U],k.forEach(clearTimeout),D.forEach((N)=>N?.()),Object.keys(Q).length===0)clearInterval(Q.offerCleanupTimer),delete Q.offerCleanupTimer},H._census=()=>{for(let Z of Object.keys(j))C.set(Z,Date.now());let N=Date.now()-120000;for(let[Z,W]of C)if(W<N)C.delete(Z);return[...C.keys()]},Q[M][U]=H}};var gQ=3333,r0={},uQ={},FQ=($,J)=>{let q={},Q=null,G=()=>{if(Q)clearTimeout(Q),Q=null;let Y=new WebSocket($);Y.onclose=()=>{r0[$]??=gQ,Q=setTimeout(G,r0[$]),r0[$]*=2},Y.onmessage=(X)=>J(X.data),q.socket=Y,q.url=Y.url,q.ready=new Promise((X)=>{Y.onopen=()=>{r0[$]=gQ,X(q)}}),q.send=(X)=>{if(Y.readyState===1)Y.send(X)}};return q.forceReconnect=G,G(),uQ[$]=q,q};if(typeof window<"u"){let $=()=>{log.info("⚡ [GenosRTC] Network event detected. Forcing reconnection…"),Object.values(uQ).forEach((J)=>{if(J.socket&&J.socket.readyState!==WebSocket.OPEN&&J.socket.readyState!==WebSocket.CONNECTING)J.forceReconnect()})};window.addEventListener("online",()=>{log.info("✅ Reconnected to the network."),$()}),window.addEventListener("offline",async()=>{log.info("❌ Disconnected from the network.")}),document.addEventListener("visibilitychange",()=>{if(document.visibilityState==="visible")$()})}var mQ=($)=>()=>c0(PQ($).map(([J,q])=>[J,q.socket])),hQ=($,J,q,Q)=>($.relayUrls??(Q?EQ(J,h0($.appId)):J)).slice(0,$.relayUrls?.length??$.relayRedundancy??q);var cQ=["wss://relay.primal.net","wss://ftp.halifax.rwth-aachen.de/nostr","wss://nostr.oxtr.dev","wss://nostr.sathoarder.com","wss://nostr.mom","wss://nos.lol","wss://nostr.vulpem.com","wss://nostr.data.haus","wss://relay.mostro.network","wss://relay.nostrdice.com"];var X0={},iJ=10,oQ="x",iQ="EVENT",rJ=/pow:\s*(\d+)\s*bits needed\.?/i,S8=new Set,rQ=F0.utils.randomSecretKey(),aJ=m0(F0.getPublicKey(rQ)),P8={},w0={},nJ={},aQ=()=>Math.floor(Date.now()/1000),nQ=($)=>nJ[$]??=h0($,1e4)+20000,a0=($)=>$.replace(/\/$/,""),sJ=($,J)=>{let[q,Q,G,Y]=i$(J);if(q===iQ)return w0[Q]?.(P8[Q],G.content);if(q==="NOTICE"||q==="OK"&&!G){if(+((q==="NOTICE"?Q:Y).match(rJ)?.[1]??0)>0){let K=a0($);S8.add(K),X0[K]?.close?.(),delete X0[K]}}},tJ=($)=>{let J=a0($);if(X0[J])return X0[J];let q=FQ(J,(Q)=>sJ(J,Q));return X0[J]=q},dQ=async($,J)=>{let q={kind:nQ($),content:J,pubkey:aJ,created_at:aQ(),tags:[[oQ,$]]},Q=T$(O$([0,q.pubkey,q.created_at,q.kind,q.tags,q.content])),G=new Uint8Array(await crypto.subtle.digest("SHA-256",Q)),Y=F0.sign(G,rQ);return O$([iQ,{...q,id:m0(G),sig:m0(Y)}])},lQ=($,J)=>{return P8[$]=J,O$(["REQ",$,{kinds:[nQ(J)],since:aQ(),["#"+oQ]:[J]}])},pQ=($)=>{return delete P8[$],O$(["CLOSE",$])},n0=yQ({init:($)=>{let q=($?.relayUrls?.length?$.relayUrls:null)??cQ;return hQ($,q,iJ,!1).map(tJ).map((G)=>G.ready.then(()=>G).catch(()=>null))},subscribe:($,J,q,Q)=>{let G=q0(64),Y=q0(64);return w0[G]=w0[Y]=(X,K)=>Q(X,K,async(U,B)=>{if(S8.has(a0($.url)))return;$.send(await dQ(U,B))}),$.send(lQ(G,J)),$.send(lQ(Y,q)),()=>{$.send(pQ(G)),$.send(pQ(Y)),delete w0[G],delete w0[Y]}},announce:async($,J)=>{if(S8.has(a0($.url)))return;$.send(await dQ(J,O$({peerId:F})))}}),sQ=mQ(X0);var eJ={cellSize:"auto",bridgesPerEdge:2,maxCellSize:50,targetCells:100,debug:!1},tQ=5000,$9=3000,Q9=30000,J9=2000,e0=($)=>{let J=String($||"").match(/cell-(\d+)/);return J?Number(J[1]):null},q9=($,J)=>{let q=e0($);if(q==null)return[];let Q=[];for(let G=1;G<J;G*=2){if(q-G>=0)Q.push(`cell-${q-G}`);if(q+G<J)Q.push(`cell-${q+G}`)}return Q},s0=($)=>`c${(e0($)||0).toString(36)}`,G9=($,J,q)=>{if($<=10)return Math.max(2,$);let G=10,Y=Math.ceil($/J);return Math.max(G,Math.min(q,Y))},Y9=($,J)=>{return Math.max(1,Math.ceil($/J))},eQ=($)=>{let J=0;for(let q=0;q<$.length;q++)J=Math.imul(J^$.charCodeAt(q),2654435761);return J>>>0},I8=($,J)=>{let q=0,Q=-1;for(let G=0;G<J;G++){let Y=eQ(`${$}:${G}`);if(Y>Q)Q=Y,q=G}return q};class t0{constructor($){this.peerId=$,this.joinedAt=Date.now(),this.lastSeen=Date.now(),this.rttSamples=[],this.stability=1,this.reconnects=0,this.isResponsive=!0,this.connectedCells=new Set}get uptime(){return Date.now()-this.joinedAt}get avgRtt(){if(this.rttSamples.length===0)return 1/0;return Math.round(this.rttSamples.reduce(($,J)=>$+J,0)/this.rttSamples.length)}get healthScore(){let $=this.avgRtt===1/0?0.5:Math.max(0,100-this.avgRtt)/100,J=Math.min(1,this.uptime/60000),q=this.stability,Q=this.isResponsive?1:0.3;return $*0.25+J*0.25+q*0.3+Q*0.2}get isStale(){return Date.now()-this.lastSeen>Q9}addRttSample($){if(this.rttSamples.push($),this.rttSamples.length>10)this.rttSamples.shift();this.lastSeen=Date.now(),this.isResponsive=!0}markReconnect(){this.reconnects++,this.stability=Math.max(0,1-this.reconnects*0.1)}markUnresponsive(){this.isResponsive=!1}markSeen(){this.lastSeen=Date.now()}addConnectedCell($){if($)this.connectedCells.add($)}}function X9($,J={},q={}){let Q={...eJ,...J},G=!!Q.debug,Y=(...V)=>G&&console.debug("[cells]",...V),X=Math.max(0,Q.bridgesPerEdge|0),K=Math.max(5,Q.maxCellSize|0),U=Math.max(10,Q.targetCells|0),B=Q.cellSize==="auto",M=B?2:Math.max(1,Q.cellSize|0),A={cellId:null,bridges:[],isBridge:!1},z=null,j=null,w=null,C=new Map,E=new Map,m=new Set,p=new Map,h=new Set,a=new Set,X$=0,z$=[],W$=new Map,q$=new Set,v=new Map,Z$=new Map,n=1,R=0,k=1,D=0,H=()=>{$$();let V=Y9(l().length,M);if(V!==k)k=V,D=Date.now();let L=Date.now()-D;if(V>n&&L>4000)n=V;else if(V<n&&L>30000)n=V;return n},N=()=>Math.min(150,Math.ceil(Math.log2(H()+1))*2+3),Z=(V)=>q9(V,H()),W=$.on?.bind($),x=$.off?.bind($);if(W)$.on=(V,L)=>String(V).startsWith("mesh:")?P(V,L):W(V,L);if(x)$.off=(V,L)=>String(V).startsWith("mesh:")?p.get(V)?.delete(L):x(V,L);let O=(V)=>(m.add(V),()=>m.delete(V)),T=(V,L,I)=>{if(a.has(I))return;if(a.add(I),a.size>tQ){let f=a.values().next().value;a.delete(f)}for(let f of m)try{f(V,L)}catch(d){Y("Error in deliver handler:",d)}},P=(V,L)=>{if(!p.has(V))p.set(V,new Set);return p.get(V).add(L),()=>p.get(V)?.delete(L)},y=(V,...L)=>{let I=p.get(V);if(I)for(let f of I)try{f(...L)}catch{}},_=(V)=>{try{return typeof V==="string"?JSON.parse(V):V}catch{return null}},c=()=>`${F}:${Date.now().toString(36)}:${(X$++&65535).toString(36)}`,S=()=>{if(h.size>tQ)h.delete(h.values().next().value)},u=(V,L,I=[])=>{if(!V||!L)return;if(C.set(V,{cell:L,isBridge:I.length>0,bridges:[...I]}),!E.has(V))E.set(V,new t0(V));let f=E.get(V);if(f.markSeen(),f.addConnectedCell(L),Z$.set(L,{lastSeen:Date.now(),peerId:V}),I.length>0)for(let d of Z(L))f.addConnectedCell(d)},b=(V)=>E.get(V),g=(V,L)=>{let I=E.get(V);if(I)I.addRttSample(L)},t=(V)=>{let L=B$(V);if(L.length===0)return null;let I=0,f=0;for(let e of L){let K$=E.get(e);if(K$&&!K$.isStale){if(I+=K$.healthScore,K$.isResponsive)f++}}let d=L.filter((e)=>{let K$=E.get(e);return K$&&!K$.isStale});return{cellId:V,memberCount:d.length,avgHealth:d.length>0?I/d.length:0,responsiveRatio:d.length>0?f/d.length:0}},s=()=>{let V=t(A.cellId);y("mesh:health",{...A,health:V})},l=()=>[...new Set([...$._census(),F])].sort(),$$=()=>{if(!B)return;let V=l().length,L=G9(V,U,K);if(L!==M)Y("cellSize changed:",M,"->",L),M=L},G$=(V,L)=>L.filter((I)=>I8(I,H())===V),Q$=(V,L)=>{if(X===0)return[];let I=e0(V),f=e0(L);if(I==null||f==null)return[];let d=l(),e=G$(I,d),K$=G$(f,d),J$=Math.min(I,f),a$=Math.max(I,f),z0=(r)=>eQ(`${r}@${J$}~${a$}`),H$=[...new Set([...e,...K$])].sort((r,Q8)=>z0(Q8)-z0(r));if(!H$.length)return[];let n$=new Set(e),Z0=[],i=(r)=>r&&!Z0.includes(r)&&Z0.push(r);i(H$.find((r)=>n$.has(r))),i(H$.find((r)=>!n$.has(r)));for(let r of H$){if(Z0.length>=Math.max(X,2))break;i(r)}return Z0},T0=(V,L)=>{if(X===0)return[];let I=Z(L),f=[];for(let d of I)if(Q$(L,d).includes(V))f.push(d);return f},r$=()=>{$$();let V=l(),L=I8(F,H()),I=H(),f=`cell-${L}`,d=T0(F,f),e=d.length>0;return Y("computeState",{self:F,myCell:f,isBridge:e,bridgeEdges:d,cellSize:M,rosterSize:V.length,totalCells:I,dynamicTTL:N()}),{cellId:f,isBridge:e,bridges:d,cellSize:M,dynamicTTL:N(),totalCells:I}},B$=(V)=>{let L=[],I=new Set(Object.keys($.getPeers?.()||{}));for(let[f,d]of C)if(d.cell===V){let e=E.get(f);if(I.has(f)&&(!e||!e.isStale))L.push(f)}return L.sort(),L},L$=()=>{if(!z)return;$8=v8(),E8=Date.now();let V={t:"state",id:c(),ttl:N(),data:{id:F,cell:A.cellId,bridges:A.bridges,health:E.get(F)?.healthScore||0.5,timestamp:Date.now()},origin:F,originCell:A.cellId},L=JSON.stringify(V);z.send(L),D$(j,L)},D$=(V,L)=>{let I=_(L);if(!I?.id||!I?.t)return;let f=h.has(I.id);if(!f)h.add(I.id),S();let{t:d,id:e,ttl:K$,data:J$,origin:a$,originCell:z0}=I,H$=A.cellId;if(d==="state"&&J$)u(J$.id,J$.cell,J$.bridges),y("mesh:peer-state",J$);if(d==="ping"&&J$?.pingId&&a$!==F){let i={t:"pong",id:c(),ttl:N(),data:{pingId:J$.pingId,receivedAt:Date.now()},origin:F,originCell:H$};z?.send(JSON.stringify(i))}if(d==="pong"&&J$?.pingId){let i=v.get(J$.pingId);if(i){clearTimeout(i.timeout);let r=Date.now()-i.start;g(i.peerId,r),i.resolve(r),v.delete(J$.pingId)}}if(d==="msg"&&a$!==F){if(z0===H$||X>0)T(J$,a$,e)}if(f)return;if(!A.isBridge)return;if((K$??0)<=0)return;let n$=(i,r,Q8=null)=>{if(!i)return;let YJ={t:d,id:e,ttl:Q8??(K$??N())-1,data:J$,origin:a$||F,originCell:z0||H$},_8=JSON.stringify(YJ);if(r?.length){let XJ=new Set(Object.keys($.getPeers?.()||{})),b8=r.filter((zJ)=>XJ.has(zJ));if(b8.length>0)i.send(_8,b8)}else i.send(_8)};if(V===j){for(let i of Z(H$))n$(_$(i),null);return}if(!Z(H$).map(s0).includes(V))return;n$(z,null);for(let i of Z(H$))if(s0(i)!==V)n$(_$(i),null)},_$=(V)=>{let L=s0(V);if(W$.has(V))return W$.get(V);let I=$.channel(L);if(W$.set(V,I),!q$.has(L))q$.add(L),I.on("message",(f)=>D$(L,f));return I},w$=()=>{if(!A.cellId)return;if(j=s0(A.cellId),z=$.channel(j),!q$.has(j))q$.add(j),z.on("message",(V)=>D$(j,V));if(A.isBridge)for(let V of Z(A.cellId))_$(V);if(z$.length)for(let V of z$.splice(0)){let L={t:"msg",id:c(),ttl:N(),data:V,origin:F,originCell:A.cellId},I=JSON.stringify(L);z.send(I),D$(j,I)}L$()},L0=(V)=>{if(!A.cellId)return!0;if(!l().includes(V))return!0;let I=`cell-${I8(V,H())}`;if(I===A.cellId)return!0;if(A.bridges.includes(I))return!0;return Z(A.cellId).includes(I)&&Q$(I,A.cellId).includes(V)},QJ=()=>{let V=$.getPeers?.()||{};for(let L of Object.keys(V))if(!L0(L))V[L].close?.()};q.admit=L0;let k0=()=>{let V=r$(),L=!A.cellId||A.cellId!==V.cellId||A.isBridge!==V.isBridge||JSON.stringify(A.bridges)!==JSON.stringify(V.bridges);if(A=V,u(F,V.cellId,V.bridges),L)w$();else L$();QJ(),y("mesh:state",V),s()},$8="",E8=0,v8=()=>{return`${A.cellId}:${A.isBridge}:${A.bridges.join(",")}`},JJ=()=>{if(w)return;w=setInterval(()=>{let V=H();if(V!==R){R=V,k0();return}let L=v8();if(L!==$8||Date.now()-E8>1e4)L$(),$8=L;for(let[I,f]of E)if(I!==F&&f.isStale)C.delete(I),E.delete(I),Y("Removed stale peer:",I)},J9)},qJ=()=>{if(w)clearInterval(w),w=null},GJ=(V)=>{return new Promise((L,I)=>{let f=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,d=Date.now(),e=setTimeout(()=>{v.delete(f);let J$=E.get(V);if(J$)J$.markUnresponsive();I(Error("Ping timeout"))},$9);v.set(f,{start:d,resolve:L,reject:I,timeout:e,peerId:V});let K$={t:"ping",id:c(),ttl:N(),data:{pingId:f,target:V},origin:F,originCell:A.cellId};z?.send(JSON.stringify(K$))})};if($.on?.("peer:join",(V)=>{if(!E.has(V))E.set(V,new t0(V));else E.get(V).markReconnect();k0()}),$.on?.("peer:leave",(V)=>{C.delete(V),k0()}),!E.has(F))E.set(F,new t0(F));return E.get(F).addConnectedCell(A.cellId||"cell-0"),k0(),JJ(),{send:(V)=>{if(!A.cellId||!z)return z$.push(V);let L={t:"msg",id:c(),ttl:N(),data:V,origin:F,originCell:A.cellId},I=JSON.stringify(L);z.send(I),D$(j,I)},on:(V,L)=>V==="message"?O(L):void 0,ping:GJ,getState:()=>({...A,cellSize:M,health:t(A.cellId),dynamicTTL:N(),totalCells:H(),knownCells:Z$.size}),getMetrics:b,getCellHealth:t,getPeerInfo:()=>new Map(C),getStableRoster:()=>l(),getKnownCells:()=>new Map(Z$),getCellSize:()=>M,destroy:()=>{qJ(),v.forEach((V)=>clearTimeout(V.timeout)),v.clear(),a.clear(),Z$.clear()}}}function $J($,J,q){let Q={},G=n0({...$,admit:(U)=>Q.admit?.(U)??!0},J,q),Y=$.overlay||{},X=X9(G,Y,Q),K=new Map;return{on:(U,B)=>G.on(U,B),off:(U,B)=>G.off?.(U,B),channel:(U)=>{if(K.has(U))return K.get(U);let B=G.channel(U),M={send:(A,z)=>{X.send({_ch:U,_d:A,_t:z})},on:(A,z)=>{if(A==="message")X.on("message",(j,w)=>{if(j?._ch===U)z(j._d,w)}),B.on(A,z);else B.on(A,z)},off:(A,z)=>B.off?.(A,z),_original:B};return K.set(U,M),M},get id(){return G.id},get peers(){return G.peers},getPeers:()=>G.getPeers?.()||{},mesh:X,_room:G,getState:()=>X.getState(),getMetrics:(U)=>X.getMetrics(U),getCellHealth:(U)=>X.getCellHealth(U),getPeerInfo:()=>X.getPeerInfo(),ping:(U)=>X.ping(U),leave:()=>{X.destroy(),K.clear(),G.leave()},destroy:()=>{X.destroy(),K.clear()}}}var wq=($,J,q)=>$?.cells||$?.overlay?$J($,J,q):n0($,J,q);export{F as selfId,wq as join,sQ as getRelaySockets};
2
+ var F$=typeof globalThis==="object"&&"crypto"in globalThis?globalThis.crypto:void 0;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function m$($){return $ instanceof Uint8Array||ArrayBuffer.isView($)&&$.constructor.name==="Uint8Array"}function U0($){if(!Number.isSafeInteger($)||$<0)throw Error("positive integer expected, got "+$)}function A$($,...J){if(!m$($))throw Error("Uint8Array expected");if(J.length>0&&!J.includes($.length))throw Error("Uint8Array expected of length "+J+", got length="+$.length)}function C0($){if(typeof $!=="function"||typeof $.create!=="function")throw Error("Hash should be wrapped by utils.createHasher");U0($.outputLen),U0($.blockLen)}function s$($,J=!0){if($.destroyed)throw Error("Hash instance has been destroyed");if(J&&$.finished)throw Error("Hash#digest() has already been called")}function y8($,J){A$($);let q=J.outputLen;if($.length<q)throw Error("digestInto() expects output buffer of length at least "+q)}function h$(...$){for(let J=0;J<$.length;J++)$[J].fill(0)}function S0($){return new DataView($.buffer,$.byteOffset,$.byteLength)}function R$($,J){return $<<32-J|$>>>J}var g8=(()=>typeof Uint8Array.from([]).toHex==="function"&&typeof Uint8Array.fromHex==="function")(),ZJ=Array.from({length:256},($,J)=>J.toString(16).padStart(2,"0"));function C$($){if(A$($),g8)return $.toHex();let J="";for(let q=0;q<$.length;q++)J+=ZJ[$[q]];return J}var k$={_0:48,_9:57,A:65,F:70,a:97,f:102};function f8($){if($>=k$._0&&$<=k$._9)return $-k$._0;if($>=k$.A&&$<=k$.F)return $-(k$.A-10);if($>=k$.a&&$<=k$.f)return $-(k$.a-10);return}function c$($){if(typeof $!=="string")throw Error("hex string expected, got "+typeof $);if(g8)return Uint8Array.fromHex($);let J=$.length,q=J/2;if(J%2)throw Error("hex string expected, got unpadded hex of length "+J);let Q=new Uint8Array(q);for(let G=0,Y=0;G<q;G++,Y+=2){let X=f8($.charCodeAt(Y)),K=f8($.charCodeAt(Y+1));if(X===void 0||K===void 0){let U=$[Y]+$[Y+1];throw Error('hex string expected, got non-hex character "'+U+'" at index '+Y)}Q[G]=X*16+K}return Q}function P0($){if(typeof $!=="string")throw Error("string expected");return new Uint8Array(new TextEncoder().encode($))}function K0($){if(typeof $==="string")$=P0($);return A$($),$}function j$(...$){let J=0;for(let Q=0;Q<$.length;Q++){let G=$[Q];A$(G),J+=G.length}let q=new Uint8Array(J);for(let Q=0,G=0;Q<$.length;Q++){let Y=$[Q];q.set(Y,G),G+=Y.length}return q}class j0{}function u8($){let J=(Q)=>$().update(K0(Q)).digest(),q=$();return J.outputLen=q.outputLen,J.blockLen=q.blockLen,J.create=()=>$(),J}function d$($=32){if(F$&&typeof F$.getRandomValues==="function")return F$.getRandomValues(new Uint8Array($));if(F$&&typeof F$.randomBytes==="function")return Uint8Array.from(F$.randomBytes($));throw Error("crypto.getRandomValues must be defined")}function UJ($,J,q,Q){if(typeof $.setBigUint64==="function")return $.setBigUint64(J,q,Q);let G=BigInt(32),Y=BigInt(4294967295),X=Number(q>>G&Y),K=Number(q&Y),U=Q?4:0,B=Q?0:4;$.setUint32(J+U,X,Q),$.setUint32(J+B,K,Q)}function F8($,J,q){return $&J^~$&q}function m8($,J,q){return $&J^$&q^J&q}class J8 extends j0{constructor($,J,q,Q){super();this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=$,this.outputLen=J,this.padOffset=q,this.isLE=Q,this.buffer=new Uint8Array($),this.view=S0(this.buffer)}update($){s$(this),$=K0($),A$($);let{view:J,buffer:q,blockLen:Q}=this,G=$.length;for(let Y=0;Y<G;){let X=Math.min(Q-this.pos,G-Y);if(X===Q){let K=S0($);for(;Q<=G-Y;Y+=Q)this.process(K,Y);continue}if(q.set($.subarray(Y,Y+X),this.pos),this.pos+=X,Y+=X,this.pos===Q)this.process(J,0),this.pos=0}return this.length+=$.length,this.roundClean(),this}digestInto($){s$(this),y8($,this),this.finished=!0;let{buffer:J,view:q,blockLen:Q,isLE:G}=this,{pos:Y}=this;if(J[Y++]=128,h$(this.buffer.subarray(Y)),this.padOffset>Q-Y)this.process(q,0),Y=0;for(let M=Y;M<Q;M++)J[M]=0;UJ(q,Q-8,BigInt(this.length*8),G),this.process(q,0);let X=S0($),K=this.outputLen;if(K%4)throw Error("_sha2: outputLen should be aligned to 32bit");let U=K/4,B=this.get();if(U>B.length)throw Error("_sha2: outputLen bigger than state");for(let M=0;M<U;M++)X.setUint32(4*M,B[M],G)}digest(){let{buffer:$,outputLen:J}=this;this.digestInto($);let q=$.slice(0,J);return this.destroy(),q}_cloneInto($){$||($=new this.constructor),$.set(...this.get());let{blockLen:J,buffer:q,length:Q,finished:G,destroyed:Y,pos:X}=this;if($.destroyed=Y,$.finished=G,$.length=Q,$.pos=X,Q%J)$.buffer.set(q);return $}clone(){return this._cloneInto()}}var S$=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var KJ=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),b$=new Uint32Array(64);class h8 extends J8{constructor($=32){super(64,$,8,!1);this.A=S$[0]|0,this.B=S$[1]|0,this.C=S$[2]|0,this.D=S$[3]|0,this.E=S$[4]|0,this.F=S$[5]|0,this.G=S$[6]|0,this.H=S$[7]|0}get(){let{A:$,B:J,C:q,D:Q,E:G,F:Y,G:X,H:K}=this;return[$,J,q,Q,G,Y,X,K]}set($,J,q,Q,G,Y,X,K){this.A=$|0,this.B=J|0,this.C=q|0,this.D=Q|0,this.E=G|0,this.F=Y|0,this.G=X|0,this.H=K|0}process($,J){for(let M=0;M<16;M++,J+=4)b$[M]=$.getUint32(J,!1);for(let M=16;M<64;M++){let A=b$[M-15],z=b$[M-2],j=R$(A,7)^R$(A,18)^A>>>3,T=R$(z,17)^R$(z,19)^z>>>10;b$[M]=T+b$[M-7]+j+b$[M-16]|0}let{A:q,B:Q,C:G,D:Y,E:X,F:K,G:U,H:B}=this;for(let M=0;M<64;M++){let A=R$(X,6)^R$(X,11)^R$(X,25),z=B+A+F8(X,K,U)+KJ[M]+b$[M]|0,T=(R$(q,2)^R$(q,13)^R$(q,22))+m8(q,Q,G)|0;B=U,U=K,K=X,X=Y+z|0,Y=G,G=Q,Q=q,q=z+T|0}q=q+this.A|0,Q=Q+this.B|0,G=G+this.C|0,Y=Y+this.D|0,X=X+this.E|0,K=K+this.F|0,U=U+this.G|0,B=B+this.H|0,this.set(q,Q,G,Y,X,K,U,B)}roundClean(){h$(b$)}destroy(){this.set(0,0,0,0,0,0,0,0),h$(this.buffer)}}var I0=u8(()=>new h8);class q8 extends j0{constructor($,J){super();this.finished=!1,this.destroyed=!1,C0($);let q=K0(J);if(this.iHash=$.create(),typeof this.iHash.update!=="function")throw Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let Q=this.blockLen,G=new Uint8Array(Q);G.set(q.length>Q?$.create().update(q).digest():q);for(let Y=0;Y<G.length;Y++)G[Y]^=54;this.iHash.update(G),this.oHash=$.create();for(let Y=0;Y<G.length;Y++)G[Y]^=106;this.oHash.update(G),h$(G)}update($){return s$(this),this.iHash.update($),this}digestInto($){s$(this),A$($,this.outputLen),this.finished=!0,this.iHash.digestInto($),this.oHash.update($),this.oHash.digestInto($),this.destroy()}digest(){let $=new Uint8Array(this.oHash.outputLen);return this.digestInto($),$}_cloneInto($){$||($=Object.create(Object.getPrototypeOf(this),{}));let{oHash:J,iHash:q,finished:Q,destroyed:G,blockLen:Y,outputLen:X}=this;return $=$,$.finished=Q,$.destroyed=G,$.blockLen=Y,$.outputLen=X,$.oHash=J._cloneInto($.oHash),$.iHash=q._cloneInto($.iHash),$}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}var G8=($,J,q)=>new q8($,J).update(q).digest();G8.create=($,J)=>new q8($,J);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */var z8=BigInt(0),X8=BigInt(1);function W0($,J=""){if(typeof $!=="boolean"){let q=J&&`"${J}"`;throw Error(q+"expected boolean, got type="+typeof $)}return $}function f$($,J,q=""){let Q=m$($),G=$?.length,Y=J!==void 0;if(!Q||Y&&G!==J){let X=q&&`"${q}" `,K=Y?` of length ${J}`:"",U=Q?`length=${G}`:`type=${typeof $}`;throw Error(X+"expected Uint8Array"+K+", got "+U)}return $}function D0($){let J=$.toString(16);return J.length&1?"0"+J:J}function c8($){if(typeof $!=="string")throw Error("hex string expected, got "+typeof $);return $===""?z8:BigInt("0x"+$)}function P$($){return c8(C$($))}function Z8($){return A$($),c8(C$(Uint8Array.from($).reverse()))}function t$($,J){return c$($.toString(16).padStart(J*2,"0"))}function U8($,J){return t$($,J).reverse()}function o($,J,q){let Q;if(typeof J==="string")try{Q=c$(J)}catch(Y){throw Error($+" must be hex string or Uint8Array, cause: "+Y)}else if(m$(J))Q=Uint8Array.from(J);else throw Error($+" must be hex string or Uint8Array");let G=Q.length;if(typeof q==="number"&&G!==q)throw Error($+" of length "+q+" expected, got "+G);return Q}var Y8=($)=>typeof $==="bigint"&&z8<=$;function M0($,J,q){return Y8($)&&Y8(J)&&Y8(q)&&J<=$&&$<q}function d8($,J,q,Q){if(!M0(J,q,Q))throw Error("expected valid "+$+": "+q+" <= n < "+Q+", got "+J)}function E0($){let J;for(J=0;$>z8;$>>=X8,J+=1);return J}var y$=($)=>(X8<<BigInt($))-X8;function l8($,J,q){if(typeof $!=="number"||$<2)throw Error("hashLen must be a number");if(typeof J!=="number"||J<2)throw Error("qByteLen must be a number");if(typeof q!=="function")throw Error("hmacFn must be a function");let Q=(j)=>new Uint8Array(j),G=(j)=>Uint8Array.of(j),Y=Q($),X=Q($),K=0,U=()=>{Y.fill(1),X.fill(0),K=0},B=(...j)=>q(X,Y,...j),M=(j=Q(0))=>{if(X=B(G(0),j),Y=B(),j.length===0)return;X=B(G(1),j),Y=B()},A=()=>{if(K++>=1000)throw Error("drbg: tried 1000 values");let j=0,T=[];while(j<J){Y=B();let C=Y.slice();T.push(C),j+=Y.length}return j$(...T)};return(j,T)=>{U(),M(j);let C=void 0;while(!(C=T(A())))M();return U(),C}}function V0($,J,q={}){if(!$||typeof $!=="object")throw Error("expected valid options object");function Q(G,Y,X){let K=$[G];if(X&&K===void 0)return;let U=typeof K;if(U!==Y||K===null)throw Error(`param "${G}" is invalid: expected ${Y}, got ${U}`)}Object.entries(J).forEach(([G,Y])=>Q(G,Y,!1)),Object.entries(q).forEach(([G,Y])=>Q(G,Y,!0))}function K8($){let J=new WeakMap;return(q,...Q)=>{let G=J.get(q);if(G!==void 0)return G;let Y=$(q,...Q);return J.set(q,Y),Y}}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */var U$=BigInt(0),Y$=BigInt(1),l$=BigInt(2),i8=BigInt(3),r8=BigInt(4),a8=BigInt(5),jJ=BigInt(7),n8=BigInt(8),WJ=BigInt(9),s8=BigInt(16);function M$($,J){let q=$%J;return q>=U$?q:J+q}function V$($,J,q){let Q=$;while(J-- >U$)Q*=Q,Q%=q;return Q}function p8($,J){if($===U$)throw Error("invert: expected non-zero number");if(J<=U$)throw Error("invert: expected positive modulus, got "+J);let q=M$($,J),Q=J,G=U$,Y=Y$,X=Y$,K=U$;while(q!==U$){let B=Q/q,M=Q%q,A=G-X*B,z=Y-K*B;Q=q,q=M,G=X,Y=K,X=A,K=z}if(Q!==Y$)throw Error("invert: does not exist");return M$(G,J)}function j8($,J,q){if(!$.eql($.sqr(J),q))throw Error("Cannot find square root")}function t8($,J){let q=($.ORDER+Y$)/r8,Q=$.pow(J,q);return j8($,Q,J),Q}function DJ($,J){let q=($.ORDER-a8)/n8,Q=$.mul(J,l$),G=$.pow(Q,q),Y=$.mul(J,G),X=$.mul($.mul(Y,l$),G),K=$.mul(Y,$.sub(X,$.ONE));return j8($,K,J),K}function MJ($){let J=g$($),q=e8($),Q=q(J,J.neg(J.ONE)),G=q(J,Q),Y=q(J,J.neg(Q)),X=($+jJ)/s8;return(K,U)=>{let B=K.pow(U,X),M=K.mul(B,Q),A=K.mul(B,G),z=K.mul(B,Y),j=K.eql(K.sqr(M),U),T=K.eql(K.sqr(A),U);B=K.cmov(B,M,j),M=K.cmov(z,A,T);let C=K.eql(K.sqr(M),U),E=K.cmov(B,M,C);return j8(K,E,U),E}}function e8($){if($<i8)throw Error("sqrt is not defined for small field");let J=$-Y$,q=0;while(J%l$===U$)J/=l$,q++;let Q=l$,G=g$($);while(o8(G,Q)===1)if(Q++>1000)throw Error("Cannot find square root: probably non-prime P");if(q===1)return t8;let Y=G.pow(Q,J),X=(J+Y$)/l$;return function(U,B){if(U.is0(B))return B;if(o8(U,B)!==1)throw Error("Cannot find square root");let M=q,A=U.mul(U.ONE,Y),z=U.pow(B,J),j=U.pow(B,X);while(!U.eql(z,U.ONE)){if(U.is0(z))return U.ZERO;let T=1,C=U.sqr(z);while(!U.eql(C,U.ONE))if(T++,C=U.sqr(C),T===M)throw Error("Cannot find square root");let E=Y$<<BigInt(M-T-1),m=U.pow(A,E);M=T,A=U.sqr(m),z=U.mul(z,A),j=U.mul(j,m)}return j}}function VJ($){if($%r8===i8)return t8;if($%n8===a8)return DJ;if($%s8===WJ)return MJ($);return e8($)}var NJ=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function W8($){let J={ORDER:"bigint",MASK:"bigint",BYTES:"number",BITS:"number"},q=NJ.reduce((Q,G)=>{return Q[G]="function",Q},J);return V0($,q),$}function BJ($,J,q){if(q<U$)throw Error("invalid exponent, negatives unsupported");if(q===U$)return $.ONE;if(q===Y$)return J;let Q=$.ONE,G=J;while(q>U$){if(q&Y$)Q=$.mul(Q,G);G=$.sqr(G),q>>=Y$}return Q}function v0($,J,q=!1){let Q=Array(J.length).fill(q?$.ZERO:void 0),G=J.reduce((X,K,U)=>{if($.is0(K))return X;return Q[U]=X,$.mul(X,K)},$.ONE),Y=$.inv(G);return J.reduceRight((X,K,U)=>{if($.is0(K))return X;return Q[U]=$.mul(X,Q[U]),$.mul(X,K)},Y),Q}function o8($,J){let q=($.ORDER-Y$)/l$,Q=$.pow(J,q),G=$.eql(Q,$.ONE),Y=$.eql(Q,$.ZERO),X=$.eql(Q,$.neg($.ONE));if(!G&&!Y&&!X)throw Error("invalid Legendre symbol result");return G?1:Y?0:-1}function _0($,J){if(J!==void 0)U0(J);let q=J!==void 0?J:$.toString(2).length,Q=Math.ceil(q/8);return{nBitLength:q,nByteLength:Q}}function g$($,J,q=!1,Q={}){if($<=U$)throw Error("invalid field: expected ORDER > 0, got "+$);let G=void 0,Y=void 0,X=!1,K=void 0;if(typeof J==="object"&&J!=null){if(Q.sqrt||q)throw Error("cannot specify opts in two arguments");let z=J;if(z.BITS)G=z.BITS;if(z.sqrt)Y=z.sqrt;if(typeof z.isLE==="boolean")q=z.isLE;if(typeof z.modFromBytes==="boolean")X=z.modFromBytes;K=z.allowedLengths}else{if(typeof J==="number")G=J;if(Q.sqrt)Y=Q.sqrt}let{nBitLength:U,nByteLength:B}=_0($,G);if(B>2048)throw Error("invalid field: expected ORDER of <= 2048 bytes");let M,A=Object.freeze({ORDER:$,isLE:q,BITS:U,BYTES:B,MASK:y$(U),ZERO:U$,ONE:Y$,allowedLengths:K,create:(z)=>M$(z,$),isValid:(z)=>{if(typeof z!=="bigint")throw Error("invalid field element: expected bigint, got "+typeof z);return U$<=z&&z<$},is0:(z)=>z===U$,isValidNot0:(z)=>!A.is0(z)&&A.isValid(z),isOdd:(z)=>(z&Y$)===Y$,neg:(z)=>M$(-z,$),eql:(z,j)=>z===j,sqr:(z)=>M$(z*z,$),add:(z,j)=>M$(z+j,$),sub:(z,j)=>M$(z-j,$),mul:(z,j)=>M$(z*j,$),pow:(z,j)=>BJ(A,z,j),div:(z,j)=>M$(z*p8(j,$),$),sqrN:(z)=>z*z,addN:(z,j)=>z+j,subN:(z,j)=>z-j,mulN:(z,j)=>z*j,inv:(z)=>p8(z,$),sqrt:Y||((z)=>{if(!M)M=VJ($);return M(A,z)}),toBytes:(z)=>q?U8(z,B):t$(z,B),fromBytes:(z,j=!0)=>{if(K){if(!K.includes(z.length)||z.length>B)throw Error("Field.fromBytes: expected "+K+" bytes, got "+z.length);let C=new Uint8Array(B);C.set(z,q?0:C.length-z.length),z=C}if(z.length!==B)throw Error("Field.fromBytes: expected "+B+" bytes, got "+z.length);let T=q?Z8(z):P$(z);if(X)T=M$(T,$);if(!j){if(!A.isValid(T))throw Error("invalid field element: outside of range 0..ORDER")}return T},invertBatch:(z)=>v0(A,z),cmov:(z,j,T)=>T?j:z});return Object.freeze(A)}function $Q($){if(typeof $!=="bigint")throw Error("field order must be bigint");let J=$.toString(2).length;return Math.ceil(J/8)}function D8($){let J=$Q($);return J+Math.ceil(J/2)}function b0($,J,q=!1){let Q=$.length,G=$Q(J),Y=D8(J);if(Q<16||Q<Y||Q>1024)throw Error("expected "+Y+"-1024 bytes of input, got "+Q);let X=q?Z8($):P$($),K=M$(X,J-Y$)+Y$;return q?U8(K,G):t$(K,G)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */var e$=BigInt(0),p$=BigInt(1);function N0($,J){let q=J.negate();return $?q:J}function f0($,J){let q=v0($.Fp,J.map((Q)=>Q.Z));return J.map((Q,G)=>$.fromAffine(Q.toAffine(q[G])))}function GQ($,J){if(!Number.isSafeInteger($)||$<=0||$>J)throw Error("invalid window size, expected [1.."+J+"], got W="+$)}function M8($,J){GQ($,J);let q=Math.ceil(J/$)+1,Q=2**($-1),G=2**$,Y=y$($),X=BigInt($);return{windows:q,windowSize:Q,mask:Y,maxNumber:G,shiftBy:X}}function QQ($,J,q){let{windowSize:Q,mask:G,maxNumber:Y,shiftBy:X}=q,K=Number($&G),U=$>>X;if(K>Q)K-=Y,U+=p$;let B=J*Q,M=B+Math.abs(K)-1,A=K===0,z=K<0,j=J%2!==0;return{nextN:U,offset:M,isZero:A,isNeg:z,isNegF:j,offsetF:B}}function OJ($,J){if(!Array.isArray($))throw Error("array expected");$.forEach((q,Q)=>{if(!(q instanceof J))throw Error("invalid point at index "+Q)})}function HJ($,J){if(!Array.isArray($))throw Error("array of scalars expected");$.forEach((q,Q)=>{if(!J.isValid(q))throw Error("invalid scalar at index "+Q)})}var V8=new WeakMap,YQ=new WeakMap;function N8($){return YQ.get($)||1}function JQ($){if($!==e$)throw Error("invalid wNAF")}class B8{constructor($,J){this.BASE=$.BASE,this.ZERO=$.ZERO,this.Fn=$.Fn,this.bits=J}_unsafeLadder($,J,q=this.ZERO){let Q=$;while(J>e$){if(J&p$)q=q.add(Q);Q=Q.double(),J>>=p$}return q}precomputeWindow($,J){let{windows:q,windowSize:Q}=M8(J,this.bits),G=[],Y=$,X=Y;for(let K=0;K<q;K++){X=Y,G.push(X);for(let U=1;U<Q;U++)X=X.add(Y),G.push(X);Y=X.double()}return G}wNAF($,J,q){if(!this.Fn.isValid(q))throw Error("invalid scalar");let Q=this.ZERO,G=this.BASE,Y=M8($,this.bits);for(let X=0;X<Y.windows;X++){let{nextN:K,offset:U,isZero:B,isNeg:M,isNegF:A,offsetF:z}=QQ(q,X,Y);if(q=K,B)G=G.add(N0(A,J[z]));else Q=Q.add(N0(M,J[U]))}return JQ(q),{p:Q,f:G}}wNAFUnsafe($,J,q,Q=this.ZERO){let G=M8($,this.bits);for(let Y=0;Y<G.windows;Y++){if(q===e$)break;let{nextN:X,offset:K,isZero:U,isNeg:B}=QQ(q,Y,G);if(q=X,U)continue;else{let M=J[K];Q=Q.add(B?M.negate():M)}}return JQ(q),Q}getPrecomputes($,J,q){let Q=V8.get(J);if(!Q){if(Q=this.precomputeWindow(J,$),$!==1){if(typeof q==="function")Q=q(Q);V8.set(J,Q)}}return Q}cached($,J,q){let Q=N8($);return this.wNAF(Q,this.getPrecomputes(Q,$,q),J)}unsafe($,J,q,Q){let G=N8($);if(G===1)return this._unsafeLadder($,J,Q);return this.wNAFUnsafe(G,this.getPrecomputes(G,$,q),J,Q)}createCache($,J){GQ(J,this.bits),YQ.set($,J),V8.delete($)}hasCache($){return N8($)!==1}}function XQ($,J,q,Q){let G=J,Y=$.ZERO,X=$.ZERO;while(q>e$||Q>e$){if(q&p$)Y=Y.add(G);if(Q&p$)X=X.add(G);G=G.double(),q>>=p$,Q>>=p$}return{p1:Y,p2:X}}function zQ($,J,q,Q){OJ(q,$),HJ(Q,J);let G=q.length,Y=Q.length;if(G!==Y)throw Error("arrays of points and scalars must have equal length");let X=$.ZERO,K=E0(BigInt(G)),U=1;if(K>12)U=K-3;else if(K>4)U=K-2;else if(K>0)U=2;let B=y$(U),M=Array(Number(B)+1).fill(X),A=Math.floor((J.BITS-1)/U)*U,z=X;for(let j=A;j>=0;j-=U){M.fill(X);for(let C=0;C<Y;C++){let E=Q[C],m=Number(E>>BigInt(j)&B);M[m]=M[m].add(q[C])}let T=X;for(let C=M.length-1,E=X;C>0;C--)E=E.add(M[C]),T=T.add(E);if(z=z.add(T),j!==0)for(let C=0;C<U;C++)z=z.double()}return z}function qQ($,J,q){if(J){if(J.ORDER!==$)throw Error("Field.ORDER must match order: Fp == p, Fn == n");return W8(J),J}else return g$($,{isLE:q})}function ZQ($,J,q={},Q){if(Q===void 0)Q=$==="edwards";if(!J||typeof J!=="object")throw Error(`expected valid ${$} CURVE object`);for(let U of["p","n","h"]){let B=J[U];if(!(typeof B==="bigint"&&B>e$))throw Error(`CURVE.${U} must be positive bigint`)}let G=qQ(J.p,q.Fp,Q),Y=qQ(J.n,q.Fn,Q),K=["Gx","Gy","a",$==="weierstrass"?"b":"d"];for(let U of K)if(!G.isValid(J[U]))throw Error(`CURVE.${U} must be valid field element of CURVE.Fp`);return J=Object.freeze(Object.assign({},J)),{CURVE:J,Fp:G,Fn:Y}}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */var UQ=($,J)=>($+($>=0?J:-J)/jQ)/J;function AJ($,J,q){let[[Q,G],[Y,X]]=J,K=UQ(X*$,q),U=UQ(-G*$,q),B=$-K*Q-U*Y,M=-K*G-U*X,A=B<E$,z=M<E$;if(A)B=-B;if(z)M=-M;let j=y$(Math.ceil(E0(q)/2))+$0;if(B<E$||B>=j||M<E$||M>=j)throw Error("splitScalar (endomorphism): failed, k="+$);return{k1neg:A,k1:B,k2neg:z,k2:M}}function H8($){if(!["compact","recovered","der"].includes($))throw Error('Signature format must be "compact", "recovered", or "der"');return $}function O8($,J){let q={};for(let Q of Object.keys(J))q[Q]=$[Q]===void 0?J[Q]:$[Q];if(W0(q.lowS,"lowS"),W0(q.prehash,"prehash"),q.format!==void 0)H8(q.format);return q}class KQ extends Error{constructor($=""){super($)}}var I$={Err:KQ,_tlv:{encode:($,J)=>{let{Err:q}=I$;if($<0||$>256)throw new q("tlv.encode: wrong tag");if(J.length&1)throw new q("tlv.encode: unpadded data");let Q=J.length/2,G=D0(Q);if(G.length/2&128)throw new q("tlv.encode: long form length too big");let Y=Q>127?D0(G.length/2|128):"";return D0($)+Y+G+J},decode($,J){let{Err:q}=I$,Q=0;if($<0||$>256)throw new q("tlv.encode: wrong tag");if(J.length<2||J[Q++]!==$)throw new q("tlv.decode: wrong tlv");let G=J[Q++],Y=!!(G&128),X=0;if(!Y)X=G;else{let U=G&127;if(!U)throw new q("tlv.decode(long): indefinite length not supported");if(U>4)throw new q("tlv.decode(long): byte length is too big");let B=J.subarray(Q,Q+U);if(B.length!==U)throw new q("tlv.decode: length bytes not complete");if(B[0]===0)throw new q("tlv.decode(long): zero leftmost byte");for(let M of B)X=X<<8|M;if(Q+=U,X<128)throw new q("tlv.decode(long): not minimal encoding")}let K=J.subarray(Q,Q+X);if(K.length!==X)throw new q("tlv.decode: wrong value length");return{v:K,l:J.subarray(Q+X)}}},_int:{encode($){let{Err:J}=I$;if($<E$)throw new J("integer: negative integers are not allowed");let q=D0($);if(Number.parseInt(q[0],16)&8)q="00"+q;if(q.length&1)throw new J("unexpected DER parsing assertion: unpadded hex");return q},decode($){let{Err:J}=I$;if($[0]&128)throw new J("invalid signature integer: negative");if($[0]===0&&!($[1]&128))throw new J("invalid signature integer: unnecessary leading zero");return P$($)}},toSig($){let{Err:J,_int:q,_tlv:Q}=I$,G=o("signature",$),{v:Y,l:X}=Q.decode(48,G);if(X.length)throw new J("invalid signature: left bytes after parsing");let{v:K,l:U}=Q.decode(2,Y),{v:B,l:M}=Q.decode(2,U);if(M.length)throw new J("invalid signature: left bytes after parsing");return{r:q.decode(K),s:q.decode(B)}},hexFromSig($){let{_tlv:J,_int:q}=I$,Q=J.encode(2,q.encode($.r)),G=J.encode(2,q.encode($.s)),Y=Q+G;return J.encode(48,Y)}},E$=BigInt(0),$0=BigInt(1),jQ=BigInt(2),y0=BigInt(3),RJ=BigInt(4);function u$($,J){let{BYTES:q}=$,Q;if(typeof J==="bigint")Q=J;else{let G=o("private key",J);try{Q=$.fromBytes(G)}catch(Y){throw Error(`invalid private key: expected ui8a of size ${q}, got ${typeof J}`)}}if(!$.isValidNot0(Q))throw Error("invalid private key: out of range [1..N-1]");return Q}function xJ($,J={}){let q=ZQ("weierstrass",$,J),{Fp:Q,Fn:G}=q,Y=q.CURVE,{h:X,n:K}=Y;V0(J,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object",wrapPrivateKey:"boolean"});let{endo:U}=J;if(U){if(!Q.is0(Y.a)||typeof U.beta!=="bigint"||!Array.isArray(U.basises))throw Error('invalid endo: expected "beta": bigint and "basises": array')}let B=DQ(Q,G);function M(){if(!Q.isOdd)throw Error("compression is not supported: Field does not have .isOdd()")}function A(R,k,D){let{x:H,y:N}=k.toAffine(),Z=Q.toBytes(H);if(W0(D,"isCompressed"),D){M();let W=!Q.isOdd(N);return j$(WQ(W),Z)}else return j$(Uint8Array.of(4),Z,Q.toBytes(N))}function z(R){f$(R,void 0,"Point");let{publicKey:k,publicKeyUncompressed:D}=B,H=R.length,N=R[0],Z=R.subarray(1);if(H===k&&(N===2||N===3)){let W=Q.fromBytes(Z);if(!Q.isValid(W))throw Error("bad point: is not on curve, wrong x");let x=C(W),O;try{O=Q.sqrt(x)}catch(y){let _=y instanceof Error?": "+y.message:"";throw Error("bad point: is not on curve, sqrt error"+_)}M();let w=Q.isOdd(O);if((N&1)===1!==w)O=Q.neg(O);return{x:W,y:O}}else if(H===D&&N===4){let W=Q.BYTES,x=Q.fromBytes(Z.subarray(0,W)),O=Q.fromBytes(Z.subarray(W,W*2));if(!E(x,O))throw Error("bad point: is not on curve");return{x,y:O}}else throw Error(`bad point: got length ${H}, expected compressed=${k} or uncompressed=${D}`)}let j=J.toBytes||A,T=J.fromBytes||z;function C(R){let k=Q.sqr(R),D=Q.mul(k,R);return Q.add(Q.add(D,Q.mul(R,Y.a)),Y.b)}function E(R,k){let D=Q.sqr(k),H=C(R);return Q.eql(D,H)}if(!E(Y.Gx,Y.Gy))throw Error("bad curve params: generator point");let m=Q.mul(Q.pow(Y.a,y0),RJ),p=Q.mul(Q.sqr(Y.b),BigInt(27));if(Q.is0(Q.add(m,p)))throw Error("bad curve params: a or b");function h(R,k,D=!1){if(!Q.isValid(k)||D&&Q.is0(k))throw Error(`bad point coordinate ${R}`);return k}function a(R){if(!(R instanceof v))throw Error("ProjectivePoint expected")}function X$(R){if(!U||!U.basises)throw Error("no endo");return AJ(R,U.basises,G.ORDER)}let z$=K8((R,k)=>{let{X:D,Y:H,Z:N}=R;if(Q.eql(N,Q.ONE))return{x:D,y:H};let Z=R.is0();if(k==null)k=Z?Q.ONE:Q.inv(N);let W=Q.mul(D,k),x=Q.mul(H,k),O=Q.mul(N,k);if(Z)return{x:Q.ZERO,y:Q.ZERO};if(!Q.eql(O,Q.ONE))throw Error("invZ was invalid");return{x:W,y:x}}),W$=K8((R)=>{if(R.is0()){if(J.allowInfinityPoint&&!Q.is0(R.Y))return;throw Error("bad point: ZERO")}let{x:k,y:D}=R.toAffine();if(!Q.isValid(k)||!Q.isValid(D))throw Error("bad point: x or y not field elements");if(!E(k,D))throw Error("bad point: equation left != right");if(!R.isTorsionFree())throw Error("bad point: not in prime-order subgroup");return!0});function q$(R,k,D,H,N){return D=new v(Q.mul(D.X,R),D.Y,D.Z),k=N0(H,k),D=N0(N,D),k.add(D)}class v{constructor(R,k,D){this.X=h("x",R),this.Y=h("y",k,!0),this.Z=h("z",D),Object.freeze(this)}static CURVE(){return Y}static fromAffine(R){let{x:k,y:D}=R||{};if(!R||!Q.isValid(k)||!Q.isValid(D))throw Error("invalid affine point");if(R instanceof v)throw Error("projective point not allowed");if(Q.is0(k)&&Q.is0(D))return v.ZERO;return new v(k,D,Q.ONE)}static fromBytes(R){let k=v.fromAffine(T(f$(R,void 0,"point")));return k.assertValidity(),k}static fromHex(R){return v.fromBytes(o("pointHex",R))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(R=8,k=!0){if(n.createCache(this,R),!k)this.multiply(y0);return this}assertValidity(){W$(this)}hasEvenY(){let{y:R}=this.toAffine();if(!Q.isOdd)throw Error("Field doesn't support isOdd");return!Q.isOdd(R)}equals(R){a(R);let{X:k,Y:D,Z:H}=this,{X:N,Y:Z,Z:W}=R,x=Q.eql(Q.mul(k,W),Q.mul(N,H)),O=Q.eql(Q.mul(D,W),Q.mul(Z,H));return x&&O}negate(){return new v(this.X,Q.neg(this.Y),this.Z)}double(){let{a:R,b:k}=Y,D=Q.mul(k,y0),{X:H,Y:N,Z}=this,W=Q.ZERO,x=Q.ZERO,O=Q.ZERO,w=Q.mul(H,H),P=Q.mul(N,N),y=Q.mul(Z,Z),_=Q.mul(H,N);return _=Q.add(_,_),O=Q.mul(H,Z),O=Q.add(O,O),W=Q.mul(R,O),x=Q.mul(D,y),x=Q.add(W,x),W=Q.sub(P,x),x=Q.add(P,x),x=Q.mul(W,x),W=Q.mul(_,W),O=Q.mul(D,O),y=Q.mul(R,y),_=Q.sub(w,y),_=Q.mul(R,_),_=Q.add(_,O),O=Q.add(w,w),w=Q.add(O,w),w=Q.add(w,y),w=Q.mul(w,_),x=Q.add(x,w),y=Q.mul(N,Z),y=Q.add(y,y),w=Q.mul(y,_),W=Q.sub(W,w),O=Q.mul(y,P),O=Q.add(O,O),O=Q.add(O,O),new v(W,x,O)}add(R){a(R);let{X:k,Y:D,Z:H}=this,{X:N,Y:Z,Z:W}=R,x=Q.ZERO,O=Q.ZERO,w=Q.ZERO,P=Y.a,y=Q.mul(Y.b,y0),_=Q.mul(k,N),c=Q.mul(D,Z),S=Q.mul(H,W),u=Q.add(k,D),b=Q.add(N,Z);u=Q.mul(u,b),b=Q.add(_,c),u=Q.sub(u,b),b=Q.add(k,H);let g=Q.add(N,W);return b=Q.mul(b,g),g=Q.add(_,S),b=Q.sub(b,g),g=Q.add(D,H),x=Q.add(Z,W),g=Q.mul(g,x),x=Q.add(c,S),g=Q.sub(g,x),w=Q.mul(P,b),x=Q.mul(y,S),w=Q.add(x,w),x=Q.sub(c,w),w=Q.add(c,w),O=Q.mul(x,w),c=Q.add(_,_),c=Q.add(c,_),S=Q.mul(P,S),b=Q.mul(y,b),c=Q.add(c,S),S=Q.sub(_,S),S=Q.mul(P,S),b=Q.add(b,S),_=Q.mul(c,b),O=Q.add(O,_),_=Q.mul(g,b),x=Q.mul(u,x),x=Q.sub(x,_),_=Q.mul(u,c),w=Q.mul(g,w),w=Q.add(w,_),new v(x,O,w)}subtract(R){return this.add(R.negate())}is0(){return this.equals(v.ZERO)}multiply(R){let{endo:k}=J;if(!G.isValidNot0(R))throw Error("invalid scalar: out of range");let D,H,N=(Z)=>n.cached(this,Z,(W)=>f0(v,W));if(k){let{k1neg:Z,k1:W,k2neg:x,k2:O}=X$(R),{p:w,f:P}=N(W),{p:y,f:_}=N(O);H=P.add(_),D=q$(k.beta,w,y,Z,x)}else{let{p:Z,f:W}=N(R);D=Z,H=W}return f0(v,[D,H])[0]}multiplyUnsafe(R){let{endo:k}=J,D=this;if(!G.isValid(R))throw Error("invalid scalar: out of range");if(R===E$||D.is0())return v.ZERO;if(R===$0)return D;if(n.hasCache(this))return this.multiply(R);if(k){let{k1neg:H,k1:N,k2neg:Z,k2:W}=X$(R),{p1:x,p2:O}=XQ(v,D,N,W);return q$(k.beta,x,O,H,Z)}else return n.unsafe(D,R)}multiplyAndAddUnsafe(R,k,D){let H=this.multiplyUnsafe(k).add(R.multiplyUnsafe(D));return H.is0()?void 0:H}toAffine(R){return z$(this,R)}isTorsionFree(){let{isTorsionFree:R}=J;if(X===$0)return!0;if(R)return R(v,this);return n.unsafe(this,K).is0()}clearCofactor(){let{clearCofactor:R}=J;if(X===$0)return this;if(R)return R(v,this);return this.multiplyUnsafe(X)}isSmallOrder(){return this.multiplyUnsafe(X).is0()}toBytes(R=!0){return W0(R,"isCompressed"),this.assertValidity(),j(v,this,R)}toHex(R=!0){return C$(this.toBytes(R))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}get px(){return this.X}get py(){return this.X}get pz(){return this.Z}toRawBytes(R=!0){return this.toBytes(R)}_setWindowSize(R){this.precompute(R)}static normalizeZ(R){return f0(v,R)}static msm(R,k){return zQ(v,G,R,k)}static fromPrivateKey(R){return v.BASE.multiply(u$(G,R))}}v.BASE=new v(Y.Gx,Y.Gy,Q.ONE),v.ZERO=new v(Q.ZERO,Q.ONE,Q.ZERO),v.Fp=Q,v.Fn=G;let Z$=G.BITS,n=new B8(v,J.endo?Math.ceil(Z$/2):Z$);return v.BASE.precompute(8),v}function WQ($){return Uint8Array.of($?2:3)}function DQ($,J){return{secretKey:J.BYTES,publicKey:1+$.BYTES,publicKeyUncompressed:1+2*$.BYTES,publicKeyHasPrefix:!0,signature:2*J.BYTES}}function TJ($,J={}){let{Fn:q}=$,Q=J.randomBytes||d$,G=Object.assign(DQ($.Fp,q),{seed:D8(q.ORDER)});function Y(j){try{return!!u$(q,j)}catch(T){return!1}}function X(j,T){let{publicKey:C,publicKeyUncompressed:E}=G;try{let m=j.length;if(T===!0&&m!==C)return!1;if(T===!1&&m!==E)return!1;return!!$.fromBytes(j)}catch(m){return!1}}function K(j=Q(G.seed)){return b0(f$(j,G.seed,"seed"),q.ORDER)}function U(j,T=!0){return $.BASE.multiply(u$(q,j)).toBytes(T)}function B(j){let T=K(j);return{secretKey:T,publicKey:U(T)}}function M(j){if(typeof j==="bigint")return!1;if(j instanceof $)return!0;let{secretKey:T,publicKey:C,publicKeyUncompressed:E}=G;if(q.allowedLengths||T===C)return;let m=o("key",j).length;return m===C||m===E}function A(j,T,C=!0){if(M(j)===!0)throw Error("first arg must be private key");if(M(T)===!1)throw Error("second arg must be public key");let E=u$(q,j);return $.fromHex(T).multiply(E).toBytes(C)}return Object.freeze({getPublicKey:U,getSharedSecret:A,keygen:B,Point:$,utils:{isValidSecretKey:Y,isValidPublicKey:X,randomSecretKey:K,isValidPrivateKey:Y,randomPrivateKey:K,normPrivateKeyToScalar:(j)=>u$(q,j),precompute(j=8,T=$.BASE){return T.precompute(j,!1)}},lengths:G})}function wJ($,J,q={}){C0(J),V0(q,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"});let Q=q.randomBytes||d$,G=q.hmac||((D,...H)=>G8(J,D,j$(...H))),{Fp:Y,Fn:X}=$,{ORDER:K,BITS:U}=X,{keygen:B,getPublicKey:M,getSharedSecret:A,utils:z,lengths:j}=TJ($,q),T={prehash:!1,lowS:typeof q.lowS==="boolean"?q.lowS:!1,format:void 0,extraEntropy:!1},C="compact";function E(D){let H=K>>$0;return D>H}function m(D,H){if(!X.isValidNot0(H))throw Error(`invalid signature ${D}: out of range 1..Point.Fn.ORDER`);return H}function p(D,H){H8(H);let N=j.signature,Z=H==="compact"?N:H==="recovered"?N+1:void 0;return f$(D,Z,`${H} signature`)}class h{constructor(D,H,N){if(this.r=m("r",D),this.s=m("s",H),N!=null)this.recovery=N;Object.freeze(this)}static fromBytes(D,H=C){p(D,H);let N;if(H==="der"){let{r:O,s:w}=I$.toSig(f$(D));return new h(O,w)}if(H==="recovered")N=D[0],H="compact",D=D.subarray(1);let Z=X.BYTES,W=D.subarray(0,Z),x=D.subarray(Z,Z*2);return new h(X.fromBytes(W),X.fromBytes(x),N)}static fromHex(D,H){return this.fromBytes(c$(D),H)}addRecoveryBit(D){return new h(this.r,this.s,D)}recoverPublicKey(D){let H=Y.ORDER,{r:N,s:Z,recovery:W}=this;if(W==null||![0,1,2,3].includes(W))throw Error("recovery id invalid");if(K*jQ<H&&W>1)throw Error("recovery id is ambiguous for h>1 curve");let O=W===2||W===3?N+K:N;if(!Y.isValid(O))throw Error("recovery id 2 or 3 invalid");let w=Y.toBytes(O),P=$.fromBytes(j$(WQ((W&1)===0),w)),y=X.inv(O),_=X$(o("msgHash",D)),c=X.create(-_*y),S=X.create(Z*y),u=$.BASE.multiplyUnsafe(c).add(P.multiplyUnsafe(S));if(u.is0())throw Error("point at infinify");return u.assertValidity(),u}hasHighS(){return E(this.s)}toBytes(D=C){if(H8(D),D==="der")return c$(I$.hexFromSig(this));let H=X.toBytes(this.r),N=X.toBytes(this.s);if(D==="recovered"){if(this.recovery==null)throw Error("recovery bit must be present");return j$(Uint8Array.of(this.recovery),H,N)}return j$(H,N)}toHex(D){return C$(this.toBytes(D))}assertValidity(){}static fromCompact(D){return h.fromBytes(o("sig",D),"compact")}static fromDER(D){return h.fromBytes(o("sig",D),"der")}normalizeS(){return this.hasHighS()?new h(this.r,X.neg(this.s),this.recovery):this}toDERRawBytes(){return this.toBytes("der")}toDERHex(){return C$(this.toBytes("der"))}toCompactRawBytes(){return this.toBytes("compact")}toCompactHex(){return C$(this.toBytes("compact"))}}let a=q.bits2int||function(H){if(H.length>8192)throw Error("input is too large");let N=P$(H),Z=H.length*8-U;return Z>0?N>>BigInt(Z):N},X$=q.bits2int_modN||function(H){return X.create(a(H))},z$=y$(U);function W$(D){return d8("num < 2^"+U,D,E$,z$),X.toBytes(D)}function q$(D,H){return f$(D,void 0,"message"),H?f$(J(D),void 0,"prehashed message"):D}function v(D,H,N){if(["recovered","canonical"].some((S)=>(S in N)))throw Error("sign() legacy options not supported");let{lowS:Z,prehash:W,extraEntropy:x}=O8(N,T);D=q$(D,W);let O=X$(D),w=u$(X,H),P=[W$(w),W$(O)];if(x!=null&&x!==!1){let S=x===!0?Q(j.secretKey):x;P.push(o("extraEntropy",S))}let y=j$(...P),_=O;function c(S){let u=a(S);if(!X.isValidNot0(u))return;let b=X.inv(u),g=$.BASE.multiply(u).toAffine(),t=X.create(g.x);if(t===E$)return;let s=X.create(b*X.create(_+t*w));if(s===E$)return;let l=(g.x===t?0:2)|Number(g.y&$0),$$=s;if(Z&&E(s))$$=X.neg(s),l^=1;return new h(t,$$,l)}return{seed:y,k2sig:c}}function Z$(D,H,N={}){D=o("message",D);let{seed:Z,k2sig:W}=v(D,H,N);return l8(J.outputLen,X.BYTES,G)(Z,W)}function n(D){let H=void 0,N=typeof D==="string"||m$(D),Z=!N&&D!==null&&typeof D==="object"&&typeof D.r==="bigint"&&typeof D.s==="bigint";if(!N&&!Z)throw Error("invalid signature, expected Uint8Array, hex string or Signature instance");if(Z)H=new h(D.r,D.s);else if(N){try{H=h.fromBytes(o("sig",D),"der")}catch(W){if(!(W instanceof I$.Err))throw W}if(!H)try{H=h.fromBytes(o("sig",D),"compact")}catch(W){return!1}}if(!H)return!1;return H}function R(D,H,N,Z={}){let{lowS:W,prehash:x,format:O}=O8(Z,T);if(N=o("publicKey",N),H=q$(o("message",H),x),"strict"in Z)throw Error("options.strict was renamed to lowS");let w=O===void 0?n(D):h.fromBytes(o("sig",D),O);if(w===!1)return!1;try{let P=$.fromBytes(N);if(W&&w.hasHighS())return!1;let{r:y,s:_}=w,c=X$(H),S=X.inv(_),u=X.create(c*S),b=X.create(y*S),g=$.BASE.multiplyUnsafe(u).add(P.multiplyUnsafe(b));if(g.is0())return!1;return X.create(g.x)===y}catch(P){return!1}}function k(D,H,N={}){let{prehash:Z}=O8(N,T);return H=q$(H,Z),h.fromBytes(D,"recovered").recoverPublicKey(H).toBytes()}return Object.freeze({keygen:B,getPublicKey:M,getSharedSecret:A,utils:z,lengths:j,Point:$,sign:Z$,verify:R,recoverPublicKey:k,Signature:h,hash:J})}function LJ($){let J={a:$.a,b:$.b,p:$.Fp.ORDER,n:$.n,h:$.h,Gx:$.Gx,Gy:$.Gy},q=$.Fp,Q=$.allowedPrivateKeyLengths?Array.from(new Set($.allowedPrivateKeyLengths.map((X)=>Math.ceil(X/2)))):void 0,G=g$(J.n,{BITS:$.nBitLength,allowedLengths:Q,modFromBytes:$.wrapPrivateKey}),Y={Fp:q,Fn:G,allowInfinityPoint:$.allowInfinityPoint,endo:$.endo,isTorsionFree:$.isTorsionFree,clearCofactor:$.clearCofactor,fromBytes:$.fromBytes,toBytes:$.toBytes};return{CURVE:J,curveOpts:Y}}function kJ($){let{CURVE:J,curveOpts:q}=LJ($),Q={hmac:$.hmac,randomBytes:$.randomBytes,lowS:$.lowS,bits2int:$.bits2int,bits2int_modN:$.bits2int_modN};return{CURVE:J,curveOpts:q,hash:$.hash,ecdsaOpts:Q}}function CJ($,J){let q=J.Point;return Object.assign({},J,{ProjectivePoint:q,CURVE:Object.assign({},$,_0(q.Fn.ORDER,q.Fn.BITS))})}function MQ($){let{CURVE:J,curveOpts:q,hash:Q,ecdsaOpts:G}=kJ($),Y=xJ(J,q),X=wJ(Y,Q,G);return CJ($,X)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function VQ($,J){let q=(Q)=>MQ({...$,hash:Q});return{...q(J),create:q}}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */var Q0={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},SJ={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]},PJ=BigInt(0),NQ=BigInt(1),A8=BigInt(2);function IJ($){let J=Q0.p,q=BigInt(3),Q=BigInt(6),G=BigInt(11),Y=BigInt(22),X=BigInt(23),K=BigInt(44),U=BigInt(88),B=$*$*$%J,M=B*B*$%J,A=V$(M,q,J)*M%J,z=V$(A,q,J)*M%J,j=V$(z,A8,J)*B%J,T=V$(j,G,J)*j%J,C=V$(T,Y,J)*T%J,E=V$(C,K,J)*C%J,m=V$(E,U,J)*E%J,p=V$(m,K,J)*C%J,h=V$(p,q,J)*M%J,a=V$(h,X,J)*T%J,X$=V$(a,Q,J)*B%J,z$=V$(X$,A8,J);if(!g0.eql(g0.sqr(z$),$))throw Error("Cannot find square root");return z$}var g0=g$(Q0.p,{sqrt:IJ}),HQ=VQ({...Q0,Fp:g0,lowS:!0,endo:SJ},I0),BQ={};function u0($,...J){let q=BQ[$];if(q===void 0){let Q=I0(P0($));q=j$(Q,Q),BQ[$]=q}return I0(j$(q,...J))}var x8=($)=>$.toBytes(!0).slice(1),J0=(()=>HQ.Point)(),T8=($)=>$%A8===PJ;function R8($){let{Fn:J,BASE:q}=J0,Q=u$(J,$),G=q.multiply(Q);return{scalar:T8(G.y)?Q:J.neg(Q),bytes:x8(G)}}function AQ($){let J=g0;if(!J.isValidNot0($))throw Error("invalid x: Fail if x ≥ p");let q=J.create($*$),Q=J.create(q*$+BigInt(7)),G=J.sqrt(Q);if(!T8(G))G=J.neg(G);let Y=J0.fromAffine({x:$,y:G});return Y.assertValidity(),Y}var B0=P$;function RQ(...$){return J0.Fn.create(B0(u0("BIP0340/challenge",...$)))}function OQ($){return R8($).bytes}function EJ($,J,q=d$(32)){let{Fn:Q}=J0,G=o("message",$),{bytes:Y,scalar:X}=R8(J),K=o("auxRand",q,32),U=Q.toBytes(X^B0(u0("BIP0340/aux",K))),B=u0("BIP0340/nonce",U,Y,G),{bytes:M,scalar:A}=R8(B),z=RQ(M,Y,G),j=new Uint8Array(64);if(j.set(M,0),j.set(Q.toBytes(Q.create(A+z*X)),32),!xQ(j,G,Y))throw Error("sign: Invalid signature produced");return j}function xQ($,J,q){let{Fn:Q,BASE:G}=J0,Y=o("signature",$,64),X=o("message",J),K=o("publicKey",q,32);try{let U=AQ(B0(K)),B=B0(Y.subarray(0,32));if(!M0(B,NQ,Q0.p))return!1;let M=B0(Y.subarray(32,64));if(!M0(M,NQ,Q0.n))return!1;let A=RQ(Q.toBytes(B),x8(U),X),z=G.multiplyUnsafe(M).add(U.multiplyUnsafe(Q.neg(A))),{x:j,y:T}=z.toAffine();if(z.is0()||!T8(T)||j!==B)return!1;return!0}catch(U){return!1}}var F0=(()=>{let q=(G=d$(48))=>{return b0(G,Q0.n)};HQ.utils.randomSecretKey;function Q(G){let Y=q(G);return{secretKey:Y,publicKey:OQ(Y)}}return{keygen:Q,getPublicKey:OQ,sign:EJ,verify:xQ,Point:J0,utils:{randomSecretKey:q,randomPrivateKey:q,taggedHash:u0,lift_x:AQ,pointToBytes:x8,numberToBytesBE:t$,bytesToNumberBE:P$,mod:M$},lengths:{secretKey:32,publicKey:32,publicKeyHasPrefix:!1,signature:64,seed:48}}})();var vJ=new TextEncoder,_J=new TextDecoder,w$=($)=>vJ.encode($),o$=($)=>_J.decode($),m0=($)=>Array.from($,(J)=>J.toString(16).padStart(2,"0")).join(""),O$=JSON.stringify,i$=JSON.parse,h0=($,J=Number.MAX_SAFE_INTEGER)=>$.split("").reduce((q,Q)=>q+Q.charCodeAt(0),0)%J;var w8="AES-GCM",bJ={},TQ="$",wQ=",",fJ=($)=>{let J=new Uint8Array($),q=32768,Q="";for(let G=0;G<J.length;G+=32768)Q+=String.fromCharCode(...J.subarray(G,G+32768));return btoa(Q)},yJ=($)=>Uint8Array.from(atob($),(J)=>J.charCodeAt(0)).buffer,O0=($)=>bJ[$]??=crypto.subtle.digest("SHA-1",w$($)).then((J)=>{let q=new Uint8Array(J),Q="";for(let G of q)Q+=G.toString(36);return Q}),LQ=async($,J,q)=>{let Q=await crypto.subtle.digest("SHA-256",w$(`${$}:${J}:${q}`));return crypto.subtle.importKey("raw",Q,{name:w8},!1,["encrypt","decrypt"])},kQ=async($,J)=>{let q=crypto.getRandomValues(new Uint8Array(12)),Q=await $,G=await crypto.subtle.encrypt({name:w8,iv:q},Q,w$(J));return`${q.join(wQ)}${TQ}${fJ(G)}`},CQ=async($,J)=>{let[q,Q]=J.split(TQ);if(!q||!Q)throw Error("Invalid encrypted payload format");let G=Uint8Array.from(q.split(wQ),Number),Y=await $,X=await crypto.subtle.decrypt({name:w8,iv:G},Y,yJ(Q));return o$(X)};var N$="GenosRTC",G0=($,J)=>Array.from({length:$},J);var q0=($)=>Array.from(crypto.getRandomValues(new Uint8Array($)),(J)=>"0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"[J%62]).join(""),F=typeof sessionStorage<"u"?sessionStorage.__genosrtcId??=q0(20):q0(20),v$=Promise.all.bind(Promise),SQ=typeof window<"u",{entries:PQ,fromEntries:c0,keys:a9}=Object,IQ=()=>{},x$=($)=>Error(`GenosRTC: ${$}`),H0=(...$)=>$.join("@"),EQ=($,J)=>{let q=[...$],Q=q.length,G=()=>{let Y=Math.sin(J++)*1e4;return Y-Math.floor(Y)};while(Q){let Y=Math.floor(G()*Q--);[q[Q],q[Y]]=[q[Y],q[Q]]}return q};var gJ=5000,vQ="icegatheringstatechange",_Q="offer",uJ="answer",FJ=[...G0(3,($,J)=>`stun:stun${J||""}.l.google.com:19302`),"stun:stun.cloudflare.com:3478"].map(($)=>({urls:$})),L8=($,{rtcConfig:J,rtcPolyfill:q,turnConfig:Q})=>{let G=new(q||RTCPeerConnection)({iceServers:[...FJ,...Q||[]],...J}),Y={},X=!1,K=!1,U,B=(z)=>Object.assign(z,{binaryType:"arraybuffer",bufferedAmountLowThreshold:65535,onmessage:(j)=>Y.data?.(j.data),onopen:()=>Y.connect?.(),onclose:()=>Y.close?.(),onerror:(j)=>!j?.error?.message?.includes("User-Initiated Abort")&&Y.error?.(j)}),M=()=>Promise.race([new Promise((z)=>{let j=()=>{if(G.iceGatheringState==="complete")G.removeEventListener(vQ,j),z()};G.addEventListener(vQ,j),j()}),new Promise((z)=>setTimeout(z,gJ))]).then(()=>({type:G.localDescription.type,sdp:G.localDescription.sdp.replace(/a=ice-options:trickle\s\n/g,"")}));if($?B(U=G.createDataChannel("data")):G.ondatachannel=({channel:z})=>B(U=z),G.onnegotiationneeded=async()=>{try{X=!0,await G.setLocalDescription(),Y.signal?.(await M())}catch(z){Y.error?.(z)}finally{X=!1}},G.onconnectionstatechange=()=>{if(["disconnected","failed","closed"].includes(G.connectionState))Y.close?.()},G.ontrack=(z)=>{Y.track?.(z.track,z.streams[0]),Y.stream?.(z.streams[0])},G.onremovestream=(z)=>Y.stream?.(z.stream),$&&!G.canTrickleIceCandidates)G.onnegotiationneeded();let A=()=>G.getSenders();return{created:Date.now(),connection:G,get channel(){return U},get isDead(){return G.connectionState==="closed"},async signal(z){if(U?.readyState==="open"&&!z.sdp?.includes("a=rtpmap"))return;try{if(z.type===_Q){if(X||G.signalingState!=="stable"&&!K){if($)return;await v$([G.setLocalDescription({type:"rollback"}),G.setRemoteDescription(z)])}else await G.setRemoteDescription(z);await G.setLocalDescription();let j=await M();return Y.signal?.(j),j}if(z.type===uJ){K=!0;try{await G.setRemoteDescription(z)}finally{K=!1}}}catch(j){Y.error?.(j)}},sendData:(z)=>{if(U?.readyState==="open")U.send(z)},destroy:()=>{U?.close(),G.close(),X=K=!1},setHandlers:(z)=>Object.assign(Y,z),offerPromise:$?new Promise((z)=>Y.signal=(j)=>j.type===_Q&&z(j)):Promise.resolve(),addStream:(z)=>z.getTracks().forEach((j)=>G.addTrack(j,z)),removeStream:(z)=>A().filter((j)=>z.getTracks().includes(j.track)).forEach((j)=>G.removeTrack(j)),addTrack:(z,j)=>G.addTrack(z,j),removeTrack:(z)=>{let j=A().find((T)=>T.track===z);if(j)G.removeTrack(j)},replaceTrack:(z,j)=>A().find((T)=>T.track===z)?.replaceTrack(j)}};var mJ=Object.getPrototypeOf(Uint8Array),l0=12,bQ=0,p0=bQ+l0,o0=p0+1,R0=o0+1,x0=R0+1,A0=16384-x0,d0=255,k8="bufferedamountlow",Y0=($)=>`@_${$}`,C8=100,hJ=3,cJ=200,fQ=($,J,q,Q)=>{let G=new Map,Y=new Map,X=new Map,K={},U={},B={},M={},A=new Map,z=(Z,W)=>{if(!A.has(Z))A.set(Z,new Set);A.get(Z).add(W)},j=(Z,W)=>A.get(Z)?.delete(W),T=(Z,...W)=>A.get(Z)?.forEach((x)=>x(...W)),C=(Z,W)=>{let x=Z?Array.isArray(Z)?Z:[Z]:G.keys();return Array.from(x,(O)=>{let w=G.get(O);if(!w)return console.warn(`${N$}: no peer with id ${O}`),null;return W(O,w)}).filter(Boolean)},E=(Z)=>{if(!G.has(Z))return;G.delete(Z),delete K[Z],delete U[Z],delete B[Z],delete M[Z],T("peer:leave",Z),J(Z)},m=(Z)=>new Promise((W,x)=>{let O=setTimeout(()=>{Z.removeEventListener(k8,w),x(Error(`${N$}: bufferLow timeout`))},5000);function w(){clearTimeout(O),Z.removeEventListener(k8,w),W()}Z.addEventListener(k8,w)}),p=(Z)=>{if(X.has(Z))return X.get(Z);if(!Z)throw x$("action type is required");let W=w$(Z);if(W.byteLength>l0)throw x$(`❌ "${Z}" exceeds ${l0} bytes. Use a shorter name.`);let x=new Uint8Array(l0).map((S,u)=>W[u]||0),O=0,w=new Map([["message",new Set],["progress",new Set]]),P=(S,u)=>w.get(S)?.add(u),y=(S,u)=>w.get(S)?.delete(u),_=async(S,u,b,g)=>{if(b&&typeof b!=="object")throw x$("meta must be object");if(S===void 0)throw x$("data cannot be undefined");let t=S instanceof Blob,s=t||S instanceof ArrayBuffer||S instanceof mJ,l=typeof S!=="string";if(b&&!s)throw x$("meta only allowed with binary");let $$=s?new Uint8Array(t?await S.arrayBuffer():S):w$(l?O$(S):S),G$=b?w$(O$(b)):null,Q$=Math.ceil($$.byteLength/A0)+(b?1:0)||1;if(Q$>C8)throw x$(`Message too large, exceeds max chunks ${C8}`);let w0=G0(Q$,(r$,B$)=>{let L$=B$===Q$-1,D$=b&&B$===0,_$=D$?G$:$$.subarray(b?(B$-1)*A0:B$*A0,b?B$*A0:(B$+1)*A0),T$=new Uint8Array(x0+_$.byteLength);return T$.set(x),T$.set([O],p0),T$.set([L$|D$<<1|s<<2|l<<3],o0),T$.set([Math.round((B$+1)/Q$*d0)],R0),T$.set(_$,x0),T$});return O=O+1&d0,v$(C(u,async(r$,B$)=>{let{channel:L$}=B$;for(let D$=0;D$<Q$;D$++){let _$=0;while(L$.bufferedAmount>L$.bufferedAmountLowThreshold){if(_$++>hJ)throw x$(`${N$}: send buffer full, max retries reached for peer ${r$}`);try{await m(L$)}catch(T$){console.warn(T$.message),await new Promise((L0)=>setTimeout(L0,cJ))}}if(!G.has(r$))break;B$.sendData(w0[D$]),g?.(w0[D$][R0]/d0,r$,b)}}))};Y.set(Z,{listeners:w,send:_});let c={send:_,on:P,off:y};return X.set(Z,c),c},h=(Z,W)=>{try{let x=new Uint8Array(W),O=o$(x.subarray(bQ,p0)).replace(/\x00/g,"");if(!Y.has(O))return console.warn(`${N$}: unregistered type (${O})`);let[w]=x.subarray(p0,o0),[P]=x.subarray(o0,R0),[y]=x.subarray(R0,x0),_=x.subarray(x0),c=Boolean(P&1),S=Boolean(P&2),u=Boolean(P&4),b=Boolean(P&8),g=Y.get(O),t=(K[Z]||={})[O]||={};if(t[w]?.chunks?.length>C8){console.warn(`${N$}: peer ${Z} sent too many chunks for nonce ${w}, ignoring.`);return}let s=t[w]||={chunks:[]};if(S)try{s.meta=i$(o$(_))}catch{console.warn(`${N$}: failed to parse meta from peer ${Z} for type ${O}`);return}else s.chunks.push(_);if(g.listeners.get("progress").forEach((G$)=>{try{G$(y/d0,Z,s.meta)}catch(Q$){console.error(Q$)}}),!c)return;let l=new Uint8Array(s.chunks.reduce((G$,Q$)=>G$+Q$.byteLength,0));s.chunks.reduce((G$,Q$)=>(l.set(Q$,G$),G$+Q$.byteLength),0),delete t[w];let $$;if(u)$$=l;else if(b)try{$$=i$(o$(l))}catch{console.warn(`${N$}: failed to parse JSON message data from peer ${Z} for type ${O}`);return}else $$=o$(l);g.listeners.get("message").forEach((G$)=>{try{G$($$,Z,s.meta)}catch(Q$){console.error(Q$)}})}catch(x){console.error(`${N$}: error handling data from peer ${Z}:`,x)}},a=async()=>{try{await H(""),await new Promise((Z)=>setTimeout(Z,99))}catch(Z){console.warn(`${N$}: error sending leave`,Z)}for(let[Z,W]of G){try{W.destroy()}catch{}G.delete(Z)}q()},{send:X$,on:z$}=p(Y0("ping")),{send:W$,on:q$}=p(Y0("pong")),{send:v,on:Z$}=p(Y0("signal")),{send:n,on:R}=p(Y0("stream")),{send:k,on:D}=p(Y0("track")),{send:H,on:N}=p(Y0("leave"));if($((Z,W)=>{let x=G.get(W);if(x===Z)return;if(x){let O=()=>{};x.setHandlers({data:O,stream:O,track:O,signal:O,close:O,error:O})}G.set(W,Z),Z.setHandlers({data:(O)=>h(W,O),stream:(O)=>{T("stream:add",O,W,B[W]),delete B[W]},track:(O,w)=>{T("track:add",O,w,W,M[W]),delete M[W]},signal:(O)=>v(O,W),close:()=>E(W),error:(O)=>{console.error(`${N$}: peer error for ${W}`,O),E(W)}}),T("peer:join",W,Q?.(W))}),z$("message",(Z,W)=>W$("",W)),q$("message",(Z,W)=>{U[W]?.(),delete U[W]}),Z$("message",(Z,W)=>G.get(W)?.signal(Z)),R("message",(Z,W)=>B[W]=Z),D("message",(Z,W)=>M[W]=Z),N("message",(Z,W)=>E(W)),SQ)addEventListener("beforeunload",a);return{on:z,off:j,channel:p,leave:a,ping:async(Z)=>{if(!Z)throw x$("ping() requires target peer ID");let W=Date.now();return X$("",Z),await new Promise((x)=>U[Z]=x),Date.now()-W},getPeers:()=>c0(Array.from(G,([Z,W])=>[Z,W.connection])),addStream:(Z,W,x)=>C(W,async(O,w)=>{if(x)await n(x,O);w.addStream(Z)}),removeStream:(Z,W)=>C(W,(x,O)=>O.removeStream(Z)),addTrack:(Z,W,x,O)=>C(x,async(w,P)=>{if(O)await k(O,w);P.addTrack(Z,W)}),removeTrack:(Z,W)=>C(W,(x,O)=>O.removeTrack(Z)),replaceTrack:(Z,W,x,O)=>C(x,async(w,P)=>{if(O)await k(O,w);P.replaceTrack(Z,W)})}};var dJ=5,lJ=10,pJ=2500,i0=57333,yQ=({init:$,subscribe:J,announce:q})=>{let Q={},G=!1,Y,X;return(K,U,B)=>{let{appId:M}=K;if(Q[M]?.[U])return Q[M][U];if(!K||!U||!M&&!K.firebaseApp)throw x$(!K?"config required":!U?"roomId required":"appId missing");let A=IQ;if(!G){let N=$(K);X=G0(dJ,()=>{try{return L8(!0,K)}catch{return null}}).filter(Boolean),Y=Array.isArray(N)?N:[N];let Z=setInterval(()=>{X=X.filter((W)=>{let x=Date.now()-W.created<i0;if(!x)W.destroy();return x})},i0);Q.offerCleanupTimer||=Z,G=!0}let z={},j={},T=new Map,C=new Map,E={},m=H0(N$,M,U),p=O0(m),h=O0(H0(m,F)),a=LQ(K.password||"",M,U),X$=(N)=>async(Z)=>({type:Z.type,sdp:await N(a,Z.sdp)}),z$=X$(CQ),W$=X$(kQ),q$=(N)=>{return setTimeout(()=>{if(!N.isDead&&!Object.values(j).includes(N))N.destroy()},i0),N},v=(N)=>{try{return q$(L8(N,K))}catch{return null}},Z$=(N,Z)=>{if(j[Z]===N)return;j[Z]?.destroy(),j[Z]=N,A(N,Z),z[Z]?.forEach((W)=>W!==N&&W.destroy()),delete z[Z]},n=(N,Z)=>{if(j[Z]===N)delete j[Z]},R=(N)=>async(Z,W,x)=>{let[O,w]=await v$([p,h]);if(Z!==O&&Z!==w)return;let{peerId:P,offer:y,answer:_,type:c}=typeof W==="string"?i$(W):W;if(P&&P!==F)C.set(P,Date.now());if(c&&P)E[P]=c;if(P===F||j[P])return;if(K.admit&&!K.admit(P))return;if(y){if(z[P]?.[N]&&F>P)return;let S=v(!1);if(!S)return;S.setHandlers({connect:()=>Z$(S,P),close:()=>n(S,P)});try{let u=await z$(y);if(S.isDead)return;let[b,g]=await v$([O0(H0(m,P)),S.signal(u).then(W$)]);x(b,O$({peerId:F,answer:g,...K.type&&{type:K.type}}))}catch{B?.({error:"decryption failed (offer)",appId:M,peerId:P,roomId:U})}}else if(_){let S=z[P]?.[N];if(!S||S.isDead)return;S.setHandlers({connect:()=>Z$(S,P),close:()=>n(S,P)});try{S.signal(await z$(_))}catch{B?.({error:"decryption failed (answer)",appId:M,peerId:P,roomId:U})}}else{let S=z[P]||=[];if(S.forEach((l,$$)=>{if(l&&(l.isDead||Date.now()-(l.dialedAt??l.created)>i0)){if(l.isDead)T.set(P,Date.now()+30000);l.destroy(),delete S[$$]}}),S[N]||S.filter(Boolean).length>=2||T.get(P)>Date.now())return;if(Object.values(z).reduce((l,$$)=>l+$$.filter((G$)=>G$&&!G$.isDead).length,0)>=lJ)return;let b=X.pop(),g=b?q$(b):v(!0);if(!g){T.set(P,Date.now()+30000);return}g.dialedAt=Date.now();let[t,{offer:s}]=await v$([O0(H0(m,P)),g.offerPromise.then(W$).then((l)=>({offer:l}))]);S[N]=g,g.setHandlers({connect:()=>Z$(g,P),close:()=>n(g,P)}),x(t,O$({peerId:F,offer:s,peer:g,...K.type&&{type:K.type}}))}},k=[],D=[];Y.forEach(async(N,Z)=>{let W=await N;if(!W)return;let[x,O]=await v$([p,h]);D[Z]=J(W,x,O,R(Z));let w=async()=>{let P=await q(W,x,O);k[Z]=setTimeout(w,typeof P==="number"?P:pJ)};w()}),Q[M]||={};let H=fQ((N)=>A=N,(N)=>delete j[N],()=>H.onCleanup?.(),(N)=>E[N]);return H.onCleanup=()=>{if(delete Q[M][U],k.forEach(clearTimeout),D.forEach((N)=>N?.()),Object.keys(Q).length===0)clearInterval(Q.offerCleanupTimer),delete Q.offerCleanupTimer},H._census=()=>{for(let Z of Object.keys(j))C.set(Z,Date.now());let N=Date.now()-120000;for(let[Z,W]of C)if(W<N)C.delete(Z);return[...C.keys()]},Q[M][U]=H}};var gQ=3333,r0={},uQ={},FQ=($,J)=>{let q={},Q=null,G=()=>{if(Q)clearTimeout(Q),Q=null;let Y=new WebSocket($);Y.onclose=()=>{r0[$]??=gQ,Q=setTimeout(G,r0[$]),r0[$]*=2},Y.onmessage=(X)=>J(X.data),q.socket=Y,q.url=Y.url,q.ready=new Promise((X)=>{Y.onopen=()=>{r0[$]=gQ,X(q)}}),q.send=(X)=>{if(Y.readyState===1)Y.send(X)}};return q.forceReconnect=G,G(),uQ[$]=q,q};if(typeof window<"u"){let $=()=>{log.info("⚡ [GenosRTC] Network event detected. Forcing reconnection…"),Object.values(uQ).forEach((J)=>{if(J.socket&&J.socket.readyState!==WebSocket.OPEN&&J.socket.readyState!==WebSocket.CONNECTING)J.forceReconnect()})};window.addEventListener("online",()=>{log.info("✅ Reconnected to the network."),$()}),window.addEventListener("offline",async()=>{log.info("❌ Disconnected from the network.")}),document.addEventListener("visibilitychange",()=>{if(document.visibilityState==="visible")$()})}var mQ=($)=>()=>c0(PQ($).map(([J,q])=>[J,q.socket])),hQ=($,J,q,Q)=>($.relayUrls??(Q?EQ(J,h0($.appId)):J)).slice(0,$.relayUrls?.length??$.relayRedundancy??q);var cQ=["wss://relay.primal.net","wss://ftp.halifax.rwth-aachen.de/nostr","wss://nostr.oxtr.dev","wss://nostr.sathoarder.com","wss://nostr.mom","wss://nos.lol","wss://nostr.vulpem.com","wss://nostr.data.haus"];var X0={},iJ=10,oQ="x",iQ="EVENT",rJ=/pow:\s*(\d+)\s*bits needed\.?/i,S8=new Set,rQ=F0.utils.randomSecretKey(),aJ=m0(F0.getPublicKey(rQ)),P8={},T0={},nJ={},aQ=()=>Math.floor(Date.now()/1000),nQ=($)=>nJ[$]??=h0($,1e4)+20000,a0=($)=>$.replace(/\/$/,""),sJ=($,J)=>{let[q,Q,G,Y]=i$(J);if(q===iQ)return T0[Q]?.(P8[Q],G.content);if(q==="NOTICE"||q==="OK"&&!G){if(+((q==="NOTICE"?Q:Y).match(rJ)?.[1]??0)>0){let K=a0($);S8.add(K),X0[K]?.close?.(),delete X0[K]}}},tJ=($)=>{let J=a0($);if(X0[J])return X0[J];let q=FQ(J,(Q)=>sJ(J,Q));return X0[J]=q},dQ=async($,J)=>{let q={kind:nQ($),content:J,pubkey:aJ,created_at:aQ(),tags:[[oQ,$]]},Q=w$(O$([0,q.pubkey,q.created_at,q.kind,q.tags,q.content])),G=new Uint8Array(await crypto.subtle.digest("SHA-256",Q)),Y=F0.sign(G,rQ);return O$([iQ,{...q,id:m0(G),sig:m0(Y)}])},lQ=($,J)=>{return P8[$]=J,O$(["REQ",$,{kinds:[nQ(J)],since:aQ(),["#"+oQ]:[J]}])},pQ=($)=>{return delete P8[$],O$(["CLOSE",$])},n0=yQ({init:($)=>{let q=($?.relayUrls?.length?$.relayUrls:null)??cQ;return hQ($,q,iJ,!1).map(tJ).map((G)=>G.ready.then(()=>G).catch(()=>null))},subscribe:($,J,q,Q)=>{let G=q0(64),Y=q0(64);return T0[G]=T0[Y]=(X,K)=>Q(X,K,async(U,B)=>{if(S8.has(a0($.url)))return;$.send(await dQ(U,B))}),$.send(lQ(G,J)),$.send(lQ(Y,q)),()=>{$.send(pQ(G)),$.send(pQ(Y)),delete T0[G],delete T0[Y]}},announce:async($,J)=>{if(S8.has(a0($.url)))return;$.send(await dQ(J,O$({peerId:F})))}}),sQ=mQ(X0);var eJ={cellSize:"auto",bridgesPerEdge:2,maxCellSize:50,targetCells:100,debug:!1},tQ=5000,$9=3000,Q9=30000,J9=2000,e0=($)=>{let J=String($||"").match(/cell-(\d+)/);return J?Number(J[1]):null},q9=($,J)=>{let q=e0($);if(q==null)return[];let Q=[];for(let G=1;G<J;G*=2){if(q-G>=0)Q.push(`cell-${q-G}`);if(q+G<J)Q.push(`cell-${q+G}`)}return Q},s0=($)=>`c${(e0($)||0).toString(36)}`,G9=($,J,q)=>{if($<=10)return Math.max(2,$);let G=10,Y=Math.ceil($/J);return Math.max(G,Math.min(q,Y))},Y9=($,J)=>{return Math.max(1,Math.ceil($/J))},eQ=($)=>{let J=0;for(let q=0;q<$.length;q++)J=Math.imul(J^$.charCodeAt(q),2654435761);return J>>>0},I8=($,J)=>{let q=0,Q=-1;for(let G=0;G<J;G++){let Y=eQ(`${$}:${G}`);if(Y>Q)Q=Y,q=G}return q};class t0{constructor($){this.peerId=$,this.joinedAt=Date.now(),this.lastSeen=Date.now(),this.rttSamples=[],this.stability=1,this.reconnects=0,this.isResponsive=!0,this.connectedCells=new Set}get uptime(){return Date.now()-this.joinedAt}get avgRtt(){if(this.rttSamples.length===0)return 1/0;return Math.round(this.rttSamples.reduce(($,J)=>$+J,0)/this.rttSamples.length)}get healthScore(){let $=this.avgRtt===1/0?0.5:Math.max(0,100-this.avgRtt)/100,J=Math.min(1,this.uptime/60000),q=this.stability,Q=this.isResponsive?1:0.3;return $*0.25+J*0.25+q*0.3+Q*0.2}get isStale(){return Date.now()-this.lastSeen>Q9}addRttSample($){if(this.rttSamples.push($),this.rttSamples.length>10)this.rttSamples.shift();this.lastSeen=Date.now(),this.isResponsive=!0}markReconnect(){this.reconnects++,this.stability=Math.max(0,1-this.reconnects*0.1)}markUnresponsive(){this.isResponsive=!1}markSeen(){this.lastSeen=Date.now()}addConnectedCell($){if($)this.connectedCells.add($)}}function X9($,J={},q={}){let Q={...eJ,...J},G=!!Q.debug,Y=(...V)=>G&&console.debug("[cells]",...V),X=Math.max(0,Q.bridgesPerEdge|0),K=Math.max(5,Q.maxCellSize|0),U=Math.max(10,Q.targetCells|0),B=Q.cellSize==="auto",M=B?2:Math.max(1,Q.cellSize|0),A={cellId:null,bridges:[],isBridge:!1},z=null,j=null,T=null,C=new Map,E=new Map,m=new Set,p=new Map,h=new Set,a=new Set,X$=0,z$=[],W$=new Map,q$=new Set,v=new Map,Z$=new Map,n=1,R=0,k=1,D=0,H=()=>{$$();let V=Y9(l().length,M);if(V!==k)k=V,D=Date.now();let L=Date.now()-D;if(V>n&&L>4000)n=V;else if(V<n&&L>30000)n=V;return n},N=()=>Math.min(150,Math.ceil(Math.log2(H()+1))*2+3),Z=(V)=>q9(V,H()),W=$.on?.bind($),x=$.off?.bind($);if(W)$.on=(V,L)=>String(V).startsWith("mesh:")?P(V,L):W(V,L);if(x)$.off=(V,L)=>String(V).startsWith("mesh:")?p.get(V)?.delete(L):x(V,L);let O=(V)=>(m.add(V),()=>m.delete(V)),w=(V,L,I)=>{if(a.has(I))return;if(a.add(I),a.size>tQ){let f=a.values().next().value;a.delete(f)}for(let f of m)try{f(V,L)}catch(d){Y("Error in deliver handler:",d)}},P=(V,L)=>{if(!p.has(V))p.set(V,new Set);return p.get(V).add(L),()=>p.get(V)?.delete(L)},y=(V,...L)=>{let I=p.get(V);if(I)for(let f of I)try{f(...L)}catch{}},_=(V)=>{try{return typeof V==="string"?JSON.parse(V):V}catch{return null}},c=()=>`${F}:${Date.now().toString(36)}:${(X$++&65535).toString(36)}`,S=()=>{if(h.size>tQ)h.delete(h.values().next().value)},u=(V,L,I=[])=>{if(!V||!L)return;if(C.set(V,{cell:L,isBridge:I.length>0,bridges:[...I]}),!E.has(V))E.set(V,new t0(V));let f=E.get(V);if(f.markSeen(),f.addConnectedCell(L),Z$.set(L,{lastSeen:Date.now(),peerId:V}),I.length>0)for(let d of Z(L))f.addConnectedCell(d)},b=(V)=>E.get(V),g=(V,L)=>{let I=E.get(V);if(I)I.addRttSample(L)},t=(V)=>{let L=B$(V);if(L.length===0)return null;let I=0,f=0;for(let e of L){let K$=E.get(e);if(K$&&!K$.isStale){if(I+=K$.healthScore,K$.isResponsive)f++}}let d=L.filter((e)=>{let K$=E.get(e);return K$&&!K$.isStale});return{cellId:V,memberCount:d.length,avgHealth:d.length>0?I/d.length:0,responsiveRatio:d.length>0?f/d.length:0}},s=()=>{let V=t(A.cellId);y("mesh:health",{...A,health:V})},l=()=>[...new Set([...$._census(),F])].sort(),$$=()=>{if(!B)return;let V=l().length,L=G9(V,U,K);if(L!==M)Y("cellSize changed:",M,"->",L),M=L},G$=(V,L)=>L.filter((I)=>I8(I,H())===V),Q$=(V,L)=>{if(X===0)return[];let I=e0(V),f=e0(L);if(I==null||f==null)return[];let d=l(),e=G$(I,d),K$=G$(f,d),J$=Math.min(I,f),a$=Math.max(I,f),z0=(r)=>eQ(`${r}@${J$}~${a$}`),H$=[...new Set([...e,...K$])].sort((r,Q8)=>z0(Q8)-z0(r));if(!H$.length)return[];let n$=new Set(e),Z0=[],i=(r)=>r&&!Z0.includes(r)&&Z0.push(r);i(H$.find((r)=>n$.has(r))),i(H$.find((r)=>!n$.has(r)));for(let r of H$){if(Z0.length>=Math.max(X,2))break;i(r)}return Z0},w0=(V,L)=>{if(X===0)return[];let I=Z(L),f=[];for(let d of I)if(Q$(L,d).includes(V))f.push(d);return f},r$=()=>{$$();let V=l(),L=I8(F,H()),I=H(),f=`cell-${L}`,d=w0(F,f),e=d.length>0;return Y("computeState",{self:F,myCell:f,isBridge:e,bridgeEdges:d,cellSize:M,rosterSize:V.length,totalCells:I,dynamicTTL:N()}),{cellId:f,isBridge:e,bridges:d,cellSize:M,dynamicTTL:N(),totalCells:I}},B$=(V)=>{let L=[],I=new Set(Object.keys($.getPeers?.()||{}));for(let[f,d]of C)if(d.cell===V){let e=E.get(f);if(I.has(f)&&(!e||!e.isStale))L.push(f)}return L.sort(),L},L$=()=>{if(!z)return;$8=v8(),E8=Date.now();let V={t:"state",id:c(),ttl:N(),data:{id:F,cell:A.cellId,bridges:A.bridges,health:E.get(F)?.healthScore||0.5,timestamp:Date.now()},origin:F,originCell:A.cellId},L=JSON.stringify(V);z.send(L),D$(j,L)},D$=(V,L)=>{let I=_(L);if(!I?.id||!I?.t)return;let f=h.has(I.id);if(!f)h.add(I.id),S();let{t:d,id:e,ttl:K$,data:J$,origin:a$,originCell:z0}=I,H$=A.cellId;if(d==="state"&&J$)u(J$.id,J$.cell,J$.bridges),y("mesh:peer-state",J$);if(d==="ping"&&J$?.pingId&&a$!==F){let i={t:"pong",id:c(),ttl:N(),data:{pingId:J$.pingId,receivedAt:Date.now()},origin:F,originCell:H$};z?.send(JSON.stringify(i))}if(d==="pong"&&J$?.pingId){let i=v.get(J$.pingId);if(i){clearTimeout(i.timeout);let r=Date.now()-i.start;g(i.peerId,r),i.resolve(r),v.delete(J$.pingId)}}if(d==="msg"&&a$!==F){if(z0===H$||X>0)w(J$,a$,e)}if(f)return;if(!A.isBridge)return;if((K$??0)<=0)return;let n$=(i,r,Q8=null)=>{if(!i)return;let YJ={t:d,id:e,ttl:Q8??(K$??N())-1,data:J$,origin:a$||F,originCell:z0||H$},_8=JSON.stringify(YJ);if(r?.length){let XJ=new Set(Object.keys($.getPeers?.()||{})),b8=r.filter((zJ)=>XJ.has(zJ));if(b8.length>0)i.send(_8,b8)}else i.send(_8)};if(V===j){for(let i of Z(H$))n$(_$(i),null);return}if(!Z(H$).map(s0).includes(V))return;n$(z,null);for(let i of Z(H$))if(s0(i)!==V)n$(_$(i),null)},_$=(V)=>{let L=s0(V);if(W$.has(V))return W$.get(V);let I=$.channel(L);if(W$.set(V,I),!q$.has(L))q$.add(L),I.on("message",(f)=>D$(L,f));return I},T$=()=>{if(!A.cellId)return;if(j=s0(A.cellId),z=$.channel(j),!q$.has(j))q$.add(j),z.on("message",(V)=>D$(j,V));if(A.isBridge)for(let V of Z(A.cellId))_$(V);if(z$.length)for(let V of z$.splice(0)){let L={t:"msg",id:c(),ttl:N(),data:V,origin:F,originCell:A.cellId},I=JSON.stringify(L);z.send(I),D$(j,I)}L$()},L0=(V)=>{if(!A.cellId)return!0;if(!l().includes(V))return!0;let I=`cell-${I8(V,H())}`;if(I===A.cellId)return!0;if(A.bridges.includes(I))return!0;return Z(A.cellId).includes(I)&&Q$(I,A.cellId).includes(V)},QJ=()=>{let V=$.getPeers?.()||{};for(let L of Object.keys(V))if(!L0(L))V[L].close?.()};q.admit=L0;let k0=()=>{let V=r$(),L=!A.cellId||A.cellId!==V.cellId||A.isBridge!==V.isBridge||JSON.stringify(A.bridges)!==JSON.stringify(V.bridges);if(A=V,u(F,V.cellId,V.bridges),L)T$();else L$();QJ(),y("mesh:state",V),s()},$8="",E8=0,v8=()=>{return`${A.cellId}:${A.isBridge}:${A.bridges.join(",")}`},JJ=()=>{if(T)return;T=setInterval(()=>{let V=H();if(V!==R){R=V,k0();return}let L=v8();if(L!==$8||Date.now()-E8>1e4)L$(),$8=L;for(let[I,f]of E)if(I!==F&&f.isStale)C.delete(I),E.delete(I),Y("Removed stale peer:",I)},J9)},qJ=()=>{if(T)clearInterval(T),T=null},GJ=(V)=>{return new Promise((L,I)=>{let f=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,d=Date.now(),e=setTimeout(()=>{v.delete(f);let J$=E.get(V);if(J$)J$.markUnresponsive();I(Error("Ping timeout"))},$9);v.set(f,{start:d,resolve:L,reject:I,timeout:e,peerId:V});let K$={t:"ping",id:c(),ttl:N(),data:{pingId:f,target:V},origin:F,originCell:A.cellId};z?.send(JSON.stringify(K$))})};if($.on?.("peer:join",(V)=>{if(!E.has(V))E.set(V,new t0(V));else E.get(V).markReconnect();k0()}),$.on?.("peer:leave",(V)=>{C.delete(V),k0()}),!E.has(F))E.set(F,new t0(F));return E.get(F).addConnectedCell(A.cellId||"cell-0"),k0(),JJ(),{send:(V)=>{if(!A.cellId||!z)return z$.push(V);let L={t:"msg",id:c(),ttl:N(),data:V,origin:F,originCell:A.cellId},I=JSON.stringify(L);z.send(I),D$(j,I)},on:(V,L)=>V==="message"?O(L):void 0,ping:GJ,getState:()=>({...A,cellSize:M,health:t(A.cellId),dynamicTTL:N(),totalCells:H(),knownCells:Z$.size}),getMetrics:b,getCellHealth:t,getPeerInfo:()=>new Map(C),getStableRoster:()=>l(),getKnownCells:()=>new Map(Z$),getCellSize:()=>M,destroy:()=>{qJ(),v.forEach((V)=>clearTimeout(V.timeout)),v.clear(),a.clear(),Z$.clear()}}}function $J($,J,q){let Q={},G=n0({...$,admit:(U)=>Q.admit?.(U)??!0},J,q),Y=$.overlay||{},X=X9(G,Y,Q),K=new Map;return{on:(U,B)=>G.on(U,B),off:(U,B)=>G.off?.(U,B),channel:(U)=>{if(K.has(U))return K.get(U);let B=G.channel(U),M={send:(A,z)=>{X.send({_ch:U,_d:A,_t:z})},on:(A,z)=>{if(A==="message")X.on("message",(j,T)=>{if(j?._ch===U)z(j._d,T)}),B.on(A,z);else B.on(A,z)},off:(A,z)=>B.off?.(A,z),_original:B};return K.set(U,M),M},get id(){return G.id},get peers(){return G.peers},getPeers:()=>G.getPeers?.()||{},mesh:X,_room:G,getState:()=>X.getState(),getMetrics:(U)=>X.getMetrics(U),getCellHealth:(U)=>X.getCellHealth(U),getPeerInfo:()=>X.getPeerInfo(),ping:(U)=>X.ping(U),leave:()=>{X.destroy(),K.clear(),G.leave()},destroy:()=>{X.destroy(),K.clear()}}}var Tq=($,J,q)=>$?.cells||$?.overlay?$J($,J,q):n0($,J,q);export{F as selfId,Tq as join,sQ as getRelaySockets};
Binary file