helia 5.0.1 → 5.1.0-dff82ec

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/dist/index.min.js CHANGED
@@ -1,22 +1,22 @@
1
1
  (function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.Helia = factory()}(typeof self !== 'undefined' ? self : this, function () {
2
- "use strict";var Helia=(()=>{var jb=Object.create;var ol=Object.defineProperty;var Zb=Object.getOwnPropertyDescriptor;var Jb=Object.getOwnPropertyNames;var ex=Object.getPrototypeOf,tx=Object.prototype.hasOwnProperty;var lt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Xe=(r,e)=>{for(var t in e)ol(r,t,{get:e[t],enumerable:!0})},f4=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Jb(e))!tx.call(r,o)&&o!==t&&ol(r,o,{get:()=>e[o],enumerable:!(n=Zb(e,o))||n.enumerable});return r};var kt=(r,e,t)=>(t=r!=null?jb(ex(r)):{},f4(e||!r||!r.__esModule?ol(t,"default",{value:r,enumerable:!0}):t,r)),rx=r=>f4(ol({},"__esModule",{value:!0}),r);var y6=lt(is=>{"use strict";var sS="[object ArrayBuffer]",Un=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===sS}static toArrayBuffer(e){return this.isArrayBuffer(e)?e:e.byteLength===e.buffer.byteLength||e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:this.toUint8Array(e.buffer).slice(e.byteOffset,e.byteOffset+e.byteLength).buffer}static toUint8Array(e){return this.toView(e,Uint8Array)}static toView(e,t){if(e.constructor===t)return e;if(this.isArrayBuffer(e))return new t(e);if(this.isArrayBufferView(e))return new t(e.buffer,e.byteOffset,e.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}static isBufferSource(e){return this.isArrayBufferView(e)||this.isArrayBuffer(e)}static isArrayBufferView(e){return ArrayBuffer.isView(e)||e&&this.isArrayBuffer(e.buffer)}static isEqual(e,t){let n=r.toUint8Array(e),o=r.toUint8Array(t);if(n.length!==o.byteLength)return!1;for(let i=0;i<n.length;i++)if(n[i]!==o[i])return!1;return!0}static concat(...e){let t;Array.isArray(e[0])&&!(e[1]instanceof Function)||Array.isArray(e[0])&&e[1]instanceof Function?t=e[0]:e[e.length-1]instanceof Function?t=e.slice(0,e.length-1):t=e;let n=0;for(let s of t)n+=s.byteLength;let o=new Uint8Array(n),i=0;for(let s of t){let a=this.toUint8Array(s);o.set(a,i),i+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},n2="string",aS=/^[0-9a-f]+$/i,cS=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,lS=/^[a-zA-Z0-9-_]+$/,Xl=class{static fromString(e){let t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let o=0;o<t.length;o++)n[o]=t.charCodeAt(o);return n.buffer}static toString(e){let t=Un.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return decodeURIComponent(escape(n))}},Tr=class{static toString(e,t=!1){let n=Un.toArrayBuffer(e),o=new DataView(n),i="";for(let s=0;s<n.byteLength;s+=2){let a=o.getUint16(s,t);i+=String.fromCharCode(a)}return i}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let i=0;i<e.length;i++)o.setUint16(i*2,e.charCodeAt(i),t);return n}},jl=class r{static isHex(e){return typeof e===n2&&aS.test(e)}static isBase64(e){return typeof e===n2&&cS.test(e)}static isBase64Url(e){return typeof e===n2&&lS.test(e)}static ToString(e,t="utf8"){let n=Un.toUint8Array(e);switch(t.toLowerCase()){case"utf8":return this.ToUtf8String(n);case"binary":return this.ToBinary(n);case"hex":return this.ToHex(n);case"base64":return this.ToBase64(n);case"base64url":return this.ToBase64Url(n);case"utf16le":return Tr.toString(n,!0);case"utf16":case"utf16be":return Tr.toString(n);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromString(e,t="utf8"){if(!e)return new ArrayBuffer(0);switch(t.toLowerCase()){case"utf8":return this.FromUtf8String(e);case"binary":return this.FromBinary(e);case"hex":return this.FromHex(e);case"base64":return this.FromBase64(e);case"base64url":return this.FromBase64Url(e);case"utf16le":return Tr.fromString(e,!0);case"utf16":case"utf16be":return Tr.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Un.toUint8Array(e);if(typeof btoa<"u"){let n=this.ToString(t,"binary");return btoa(n)}else return Buffer.from(t).toString("base64")}static FromBase64(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64(t))throw new TypeError("Argument 'base64Text' is not Base64 encoded");return typeof atob<"u"?this.FromBinary(atob(t)):new Uint8Array(Buffer.from(t,"base64")).buffer}static FromBase64Url(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64Url(t))throw new TypeError("Argument 'base64url' is not Base64Url encoded");return this.FromBase64(this.Base64Padding(t.replace(/\-/g,"+").replace(/\_/g,"/")))}static ToBase64Url(e){return this.ToBase64(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}static FromUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.FromBinary(e);case"utf8":return Xl.fromString(e);case"utf16":case"utf16be":return Tr.fromString(e);case"utf16le":case"usc2":return Tr.fromString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.ToBinary(e);case"utf8":return Xl.toString(e);case"utf16":case"utf16be":return Tr.toString(e);case"utf16le":case"usc2":return Tr.toString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromBinary(e){let t=e.length,n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);return n.buffer}static ToBinary(e){let t=Un.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Un.toUint8Array(e),n="",o=t.length;for(let i=0;i<o;i++){let s=t[i];s<16&&(n+="0"),n+=s.toString(16)}return n}static FromHex(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isHex(t))throw new TypeError("Argument 'hexString' is not HEX encoded");t.length%2&&(t=`0${t}`);let n=new Uint8Array(t.length/2);for(let o=0;o<t.length;o=o+2){let i=t.slice(o,o+2);n[o/2]=parseInt(i,16)}return n.buffer}static ToUtf16String(e,t=!1){return Tr.toString(e,t)}static FromUtf16String(e,t=!1){return Tr.fromString(e,t)}static Base64Padding(e){let t=4-e.length%4;if(t<4)for(let n=0;n<t;n++)e+="=";return e}static formatString(e){return e?.replace(/[\n\r\t ]/g,"")||""}};jl.DEFAULT_UTF8_ENCODING="utf8";function uS(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let i in o)t[i]=o[i]}return t}function dS(...r){let e=r.map(o=>o.byteLength).reduce((o,i)=>o+i),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let i of o)t[n++]=i}),t.buffer}function fS(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<r.byteLength;o++)if(t[o]!==n[o])return!1;return!0}is.BufferSourceConverter=Un;is.Convert=jl;is.assign=uS;is.combine=dS;is.isEqual=fS});var O8=lt((Qa,zu)=>{(function(r,e){"use strict";var t={version:"3.0.0",x86:{},x64:{},inputValidation:!0};function n(h){if(!Array.isArray(h)&&!ArrayBuffer.isView(h))return!1;for(var p=0;p<h.length;p++)if(!Number.isInteger(h[p])||h[p]<0||h[p]>255)return!1;return!0}function o(h,p){return(h&65535)*p+(((h>>>16)*p&65535)<<16)}function i(h,p){return h<<p|h>>>32-p}function s(h){return h^=h>>>16,h=o(h,2246822507),h^=h>>>13,h=o(h,3266489909),h^=h>>>16,h}function a(h,p){h=[h[0]>>>16,h[0]&65535,h[1]>>>16,h[1]&65535],p=[p[0]>>>16,p[0]&65535,p[1]>>>16,p[1]&65535];var m=[0,0,0,0];return m[3]+=h[3]+p[3],m[2]+=m[3]>>>16,m[3]&=65535,m[2]+=h[2]+p[2],m[1]+=m[2]>>>16,m[2]&=65535,m[1]+=h[1]+p[1],m[0]+=m[1]>>>16,m[1]&=65535,m[0]+=h[0]+p[0],m[0]&=65535,[m[0]<<16|m[1],m[2]<<16|m[3]]}function c(h,p){h=[h[0]>>>16,h[0]&65535,h[1]>>>16,h[1]&65535],p=[p[0]>>>16,p[0]&65535,p[1]>>>16,p[1]&65535];var m=[0,0,0,0];return m[3]+=h[3]*p[3],m[2]+=m[3]>>>16,m[3]&=65535,m[2]+=h[2]*p[3],m[1]+=m[2]>>>16,m[2]&=65535,m[2]+=h[3]*p[2],m[1]+=m[2]>>>16,m[2]&=65535,m[1]+=h[1]*p[3],m[0]+=m[1]>>>16,m[1]&=65535,m[1]+=h[2]*p[2],m[0]+=m[1]>>>16,m[1]&=65535,m[1]+=h[3]*p[1],m[0]+=m[1]>>>16,m[1]&=65535,m[0]+=h[0]*p[3]+h[1]*p[2]+h[2]*p[1]+h[3]*p[0],m[0]&=65535,[m[0]<<16|m[1],m[2]<<16|m[3]]}function l(h,p){return p%=64,p===32?[h[1],h[0]]:p<32?[h[0]<<p|h[1]>>>32-p,h[1]<<p|h[0]>>>32-p]:(p-=32,[h[1]<<p|h[0]>>>32-p,h[0]<<p|h[1]>>>32-p])}function d(h,p){return p%=64,p===0?h:p<32?[h[0]<<p|h[1]>>>32-p,h[1]<<p]:[h[1]<<p-32,0]}function u(h,p){return[h[0]^p[0],h[1]^p[1]]}function f(h){return h=u(h,[0,h[0]>>>1]),h=c(h,[4283543511,3981806797]),h=u(h,[0,h[0]>>>1]),h=c(h,[3301882366,444984403]),h=u(h,[0,h[0]>>>1]),h}t.x86.hash32=function(h,p){if(t.inputValidation&&!n(h))return e;p=p||0;for(var m=h.length%4,g=h.length-m,y=p,b=0,w=3432918353,x=461845907,T=0;T<g;T=T+4)b=h[T]|h[T+1]<<8|h[T+2]<<16|h[T+3]<<24,b=o(b,w),b=i(b,15),b=o(b,x),y^=b,y=i(y,13),y=o(y,5)+3864292196;switch(b=0,m){case 3:b^=h[T+2]<<16;case 2:b^=h[T+1]<<8;case 1:b^=h[T],b=o(b,w),b=i(b,15),b=o(b,x),y^=b}return y^=h.length,y=s(y),y>>>0},t.x86.hash128=function(h,p){if(t.inputValidation&&!n(h))return e;p=p||0;for(var m=h.length%16,g=h.length-m,y=p,b=p,w=p,x=p,T=0,k=0,v=0,S=0,I=597399067,$=2869860233,N=951274213,M=2716044179,B=0;B<g;B=B+16)T=h[B]|h[B+1]<<8|h[B+2]<<16|h[B+3]<<24,k=h[B+4]|h[B+5]<<8|h[B+6]<<16|h[B+7]<<24,v=h[B+8]|h[B+9]<<8|h[B+10]<<16|h[B+11]<<24,S=h[B+12]|h[B+13]<<8|h[B+14]<<16|h[B+15]<<24,T=o(T,I),T=i(T,15),T=o(T,$),y^=T,y=i(y,19),y+=b,y=o(y,5)+1444728091,k=o(k,$),k=i(k,16),k=o(k,N),b^=k,b=i(b,17),b+=w,b=o(b,5)+197830471,v=o(v,N),v=i(v,17),v=o(v,M),w^=v,w=i(w,15),w+=x,w=o(w,5)+2530024501,S=o(S,M),S=i(S,18),S=o(S,I),x^=S,x=i(x,13),x+=y,x=o(x,5)+850148119;switch(T=0,k=0,v=0,S=0,m){case 15:S^=h[B+14]<<16;case 14:S^=h[B+13]<<8;case 13:S^=h[B+12],S=o(S,M),S=i(S,18),S=o(S,I),x^=S;case 12:v^=h[B+11]<<24;case 11:v^=h[B+10]<<16;case 10:v^=h[B+9]<<8;case 9:v^=h[B+8],v=o(v,N),v=i(v,17),v=o(v,M),w^=v;case 8:k^=h[B+7]<<24;case 7:k^=h[B+6]<<16;case 6:k^=h[B+5]<<8;case 5:k^=h[B+4],k=o(k,$),k=i(k,16),k=o(k,N),b^=k;case 4:T^=h[B+3]<<24;case 3:T^=h[B+2]<<16;case 2:T^=h[B+1]<<8;case 1:T^=h[B],T=o(T,I),T=i(T,15),T=o(T,$),y^=T}return y^=h.length,b^=h.length,w^=h.length,x^=h.length,y+=b,y+=w,y+=x,b+=y,w+=y,x+=y,y=s(y),b=s(b),w=s(w),x=s(x),y+=b,y+=w,y+=x,b+=y,w+=y,x+=y,("00000000"+(y>>>0).toString(16)).slice(-8)+("00000000"+(b>>>0).toString(16)).slice(-8)+("00000000"+(w>>>0).toString(16)).slice(-8)+("00000000"+(x>>>0).toString(16)).slice(-8)},t.x64.hash128=function(h,p){if(t.inputValidation&&!n(h))return e;p=p||0;for(var m=h.length%16,g=h.length-m,y=[0,p],b=[0,p],w=[0,0],x=[0,0],T=[2277735313,289559509],k=[1291169091,658871167],v=0;v<g;v=v+16)w=[h[v+4]|h[v+5]<<8|h[v+6]<<16|h[v+7]<<24,h[v]|h[v+1]<<8|h[v+2]<<16|h[v+3]<<24],x=[h[v+12]|h[v+13]<<8|h[v+14]<<16|h[v+15]<<24,h[v+8]|h[v+9]<<8|h[v+10]<<16|h[v+11]<<24],w=c(w,T),w=l(w,31),w=c(w,k),y=u(y,w),y=l(y,27),y=a(y,b),y=a(c(y,[0,5]),[0,1390208809]),x=c(x,k),x=l(x,33),x=c(x,T),b=u(b,x),b=l(b,31),b=a(b,y),b=a(c(b,[0,5]),[0,944331445]);switch(w=[0,0],x=[0,0],m){case 15:x=u(x,d([0,h[v+14]],48));case 14:x=u(x,d([0,h[v+13]],40));case 13:x=u(x,d([0,h[v+12]],32));case 12:x=u(x,d([0,h[v+11]],24));case 11:x=u(x,d([0,h[v+10]],16));case 10:x=u(x,d([0,h[v+9]],8));case 9:x=u(x,[0,h[v+8]]),x=c(x,k),x=l(x,33),x=c(x,T),b=u(b,x);case 8:w=u(w,d([0,h[v+7]],56));case 7:w=u(w,d([0,h[v+6]],48));case 6:w=u(w,d([0,h[v+5]],40));case 5:w=u(w,d([0,h[v+4]],32));case 4:w=u(w,d([0,h[v+3]],24));case 3:w=u(w,d([0,h[v+2]],16));case 2:w=u(w,d([0,h[v+1]],8));case 1:w=u(w,[0,h[v]]),w=c(w,T),w=l(w,31),w=c(w,k),y=u(y,w)}return y=u(y,[0,h.length]),b=u(b,[0,h.length]),y=a(y,b),b=a(b,y),y=f(y),b=f(b),y=a(y,b),b=a(b,y),("00000000"+(y[0]>>>0).toString(16)).slice(-8)+("00000000"+(y[1]>>>0).toString(16)).slice(-8)+("00000000"+(b[0]>>>0).toString(16)).slice(-8)+("00000000"+(b[1]>>>0).toString(16)).slice(-8)},typeof Qa<"u"?(typeof zu<"u"&&zu.exports&&(Qa=zu.exports=t),Qa.murmurHash3=t):typeof define=="function"&&define.amd?define([],function(){return t}):(t._murmurHash3=r.murmurHash3,t.noConflict=function(){return r.murmurHash3=t._murmurHash3,t._murmurHash3=e,t.noConflict=e,t},r.murmurHash3=t)})(Qa)});var Gu=lt((uM,M8)=>{M8.exports=O8()});var q8=lt((kU,k2)=>{"use strict";var sA=Object.prototype.hasOwnProperty,Vt="~";function ec(){}Object.create&&(ec.prototype=Object.create(null),new ec().__proto__||(Vt=!1));function aA(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function H8(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new aA(t,n||r,o),s=Vt?Vt+e:e;return r._events[s]?r._events[s].fn?r._events[s]=[r._events[s],i]:r._events[s].push(i):(r._events[s]=i,r._eventsCount++),r}function r1(r,e){--r._eventsCount===0?r._events=new ec:delete r._events[e]}function Bt(){this._events=new ec,this._eventsCount=0}Bt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)sA.call(t,n)&&e.push(Vt?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Bt.prototype.listeners=function(e){var t=Vt?Vt+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,i=n.length,s=new Array(i);o<i;o++)s[o]=n[o].fn;return s};Bt.prototype.listenerCount=function(e){var t=Vt?Vt+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Bt.prototype.emit=function(e,t,n,o,i,s){var a=Vt?Vt+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,d,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,i),!0;case 6:return c.fn.call(c.context,t,n,o,i,s),!0}for(u=1,d=new Array(l-1);u<l;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var f=c.length,h;for(u=0;u<f;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,n);break;case 4:c[u].fn.call(c[u].context,t,n,o);break;default:if(!d)for(h=1,d=new Array(l-1);h<l;h++)d[h-1]=arguments[h];c[u].fn.apply(c[u].context,d)}}return!0};Bt.prototype.on=function(e,t,n){return H8(this,e,t,n,!1)};Bt.prototype.once=function(e,t,n){return H8(this,e,t,n,!0)};Bt.prototype.removeListener=function(e,t,n,o){var i=Vt?Vt+e:e;if(!this._events[i])return this;if(!t)return r1(this,i),this;var s=this._events[i];if(s.fn)s.fn===t&&(!o||s.once)&&(!n||s.context===n)&&r1(this,i);else{for(var a=0,c=[],l=s.length;a<l;a++)(s[a].fn!==t||o&&!s[a].once||n&&s[a].context!==n)&&c.push(s[a]);c.length?this._events[i]=c.length===1?c[0]:c:r1(this,i)}return this};Bt.prototype.removeAllListeners=function(e){var t;return e?(t=Vt?Vt+e:e,this._events[t]&&r1(this,t)):(this._events=new ec,this._eventsCount=0),this};Bt.prototype.off=Bt.prototype.removeListener;Bt.prototype.addListener=Bt.prototype.on;Bt.prefixed=Vt;Bt.EventEmitter=Bt;typeof k2<"u"&&(k2.exports=Bt)});var N2=lt((jU,Y8)=>{Y8.exports=function(r){if(!r)throw Error("hashlru must have a max value, of type number, greater than 0");var e=0,t=Object.create(null),n=Object.create(null);function o(i,s){t[i]=s,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(i){return t[i]!==void 0||n[i]!==void 0},remove:function(i){t[i]!==void 0&&(t[i]=void 0),n[i]!==void 0&&(n[i]=void 0)},get:function(i){var s=t[i];if(s!==void 0)return s;if((s=n[i])!==void 0)return o(i,s),s},set:function(i,s){t[i]!==void 0?t[i]=s:o(i,s)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var Ng=lt(hc=>{(function(){var r,e,t,n,o,i,s,a;a=function(c){var l,d,u,f;return l=(c&255<<24)>>>24,d=(c&255<<16)>>>16,u=(c&65280)>>>8,f=c&255,[l,d,u,f].join(".")},s=function(c){var l,d,u,f,h,p;for(l=[],u=f=0;f<=3&&c.length!==0;u=++f){if(u>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}p=e(c),h=p[0],d=p[1],c=c.substring(d),l.push(h)}if(c.length!==0)throw new Error("Invalid IP");switch(l.length){case 1:if(l[0]>4294967295)throw new Error("Invalid IP");return l[0]>>>0;case 2:if(l[0]>255||l[1]>16777215)throw new Error("Invalid IP");return(l[0]<<24|l[1])>>>0;case 3:if(l[0]>255||l[1]>255||l[2]>65535)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2])>>>0;case 4:if(l[0]>255||l[1]>255||l[2]>255||l[3]>255)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2]<<8|l[3])>>>0;default:throw new Error("Invalid IP")}},t=function(c){return c.charCodeAt(0)},n=t("0"),i=t("a"),o=t("A"),e=function(c){var l,d,u,f,h;for(f=0,l=10,d="9",u=0,c.length>1&&c[u]==="0"&&(c[u+1]==="x"||c[u+1]==="X"?(u+=2,l=16):"0"<=c[u+1]&&c[u+1]<="9"&&(u++,l=8,d="7")),h=u;u<c.length;){if("0"<=c[u]&&c[u]<=d)f=f*l+(t(c[u])-n)>>>0;else if(l===16)if("a"<=c[u]&&c[u]<="f")f=f*l+(10+t(c[u])-i)>>>0;else if("A"<=c[u]&&c[u]<="F")f=f*l+(10+t(c[u])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");u++}if(u===h)throw new Error("empty octet");return[f,u]},r=function(){function c(l,d){var u,f,h,p;if(typeof l!="string")throw new Error("Missing `net' parameter");if(d||(p=l.split("/",2),l=p[0],d=p[1]),d||(d=32),typeof d=="string"&&d.indexOf(".")>-1){try{this.maskLong=s(d)}catch(m){throw u=m,new Error("Invalid mask: "+d)}for(f=h=32;h>=0;f=--h)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(d||d===0)this.bitmask=parseInt(d,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(s(l)&this.maskLong)>>>0}catch(m){throw u=m,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+d);this.size=Math.pow(2,32-this.bitmask),this.base=a(this.netLong),this.mask=a(this.maskLong),this.hostmask=a(~this.maskLong),this.first=this.bitmask<=30?a(this.netLong+1):this.base,this.last=this.bitmask<=30?a(this.netLong+this.size-2):a(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?a(this.netLong+this.size-1):void 0}return c.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new c(l)),l instanceof c?this.contains(l.base)&&this.contains(l.broadcast||l.last):(s(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},c.prototype.next=function(l){return l==null&&(l=1),new c(a(this.netLong+this.size*l),this.mask)},c.prototype.forEach=function(l){var d,u,f;for(f=s(this.first),u=s(this.last),d=0;f<=u;)l(a(f),f,d),d++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),hc.ip2long=s,hc.long2ip=a,hc.Netmask=r}).call(hc)});var rd=lt((tW,em)=>{var eW=function(){typeof em<"u"&&(em.exports=m);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,i=864e13,s=4294967296,a=1e6,c="000000000",l=Math.trunc||function(S){var I=S-S%1;return I==0&&(S<0||S===0&&1/S!=1/0)?-0:I},d=m.prototype,u=(m.fromDate=function(S){return new m(+S)},m.fromInt64BE=x(0,1,2,3,0,4),m.fromInt64LE=x(3,2,1,0,4,0),m.fromString=function(N){var I,$=new m,N=(N+="").replace(/^\s*[+\-]?\d+/,function(B){var B=+B,D=1970+(B-1970)%400;return $.year=B-D,D}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(M,B,D){return B<0&&(D*=-1),I=6e4*(60*+B+ +D),""}).replace(/\.\d+$/,function(M){return $.nano=+(M+c).substr(1,9),""}).split(/\D+/);if(1<N.length?N[1]--:N[1]=0,$.time=I=Date.UTC.apply(Date,N)-(I||0),isNaN(I))throw new TypeError("Invalid Date");return g($)},m.fromTimeT=function(S){return b(S,0)},d.year=0,d.time=0,d.nano=0,d.addNano=function(S){return this.nano+=+S||0,this},d.getNano=function(){var S=g(this);return(S.time%1e3*a+ +S.nano+1e9)%1e9},d.getTimeT=function(){var I=g(this),S=Math.floor(I.time/1e3),I=I.year;return I&&(S+=I*t*r/e),S},d.getYear=function(){return this.toDate().getUTCFullYear()+this.year},d.toDate=function(){return y(g(this).time)},d.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},d.toString=function(S){var I=this,$=I.toDate(),N={H:function(){return k($.getUTCHours())},L:function(){return v($.getUTCMilliseconds(),3)},M:function(){return k($.getUTCMinutes())},N:function(){return v(I.getNano(),9)},S:function(){return k($.getUTCSeconds())},Y:function(){var M=I.getYear();return 999999<M?"+"+M:9999<M?"+"+v(M,6):0<=M?v(M,4):-999999<=M?"-"+v(-M,6):M},a:function(){return h[$.getUTCDay()]},b:function(){return f[$.getUTCMonth()]},d:function(){return k($.getUTCDate())},e:function(){return function(M){return(9<M?"":" ")+(0|M)}($.getUTCDate())},m:function(){return k($.getUTCMonth()+1)}};return function M(B){return B.replace(/%./g,function(D){var _=D[1],L=p[_],_=N[_];return L?M(L):_?_():D})}(S||u)},d.writeInt64BE=w(0,1,2,3,0,4),d.writeInt64LE=w(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],h=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],p={"%":"%",F:"%Y-%m-%d",n:`
3
- `,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return m;function m(S,I,$){var N=this;if(!(N instanceof m))return new m(S,I,$);N.time=+S||0,N.nano=+I||0,N.year=+$||0,g(N)}function g(S){var I,$,N,M=S.year,B=S.time,D=S.nano,L=((D<0||a<=D)&&(D-=($=Math.floor(D/a))*a,B+=$,$=1),M%e);return(B<-i||i<B||L)&&((I=l(B/o))&&(M+=I*e,B-=I*o),(N=y(B)).setUTCFullYear(L+N.getUTCFullYear()),N=(B=+N)+(I=l((M-=L)/e))*o,I&&-i<=N&&N<=i&&(M-=I*e,B=N),$=1),$&&(S.year=M,S.time=B,S.nano=D),S}function y(S){var I=new Date(0);return I.setTime(S),I}function b(M,N){M=+M||0;var $=l((N=(N|0)*s)/n)+l(M/n),N=N%n+M%n,M=l(N/n);return M&&($+=M,N-=M*n),new m(1e3*N,0,$*e)}function w(S,I,$,N,M,B){return function(L,_){var R=g(this);L=L||new Array(8),T(L,_|=0);var P=Math.floor(R.time/1e3),R=R.year*(t*r/e),A=l(R/s)+l(P/s),R=R%s+P%s,P=Math.floor(R/s);return P&&(A+=P,R-=P*s),D(L,_+M,A),D(L,_+B,R),L};function D(L,_,A){L[_+S]=A>>24&255,L[_+I]=A>>16&255,L[_+$]=A>>8&255,L[_+N]=255&A}}function x(S,I,$,N,M,B){return function(L,_){T(L,_|=0);var A=D(L,_+M);return b(D(L,_+B),A)};function D(L,_){return 16777216*L[_+S]+(L[_+I]<<16|L[_+$]<<8|L[_+N])}}function T(S,I){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<I+8)throw new RangeError("Out of range")}function k(S){return(9<S?"":"0")+(0|S)}function v(S,I){return(c+(0|S)).substr(-I)}}()});var Q9=lt((UJ,Y9)=>{function KT(){return!!(typeof window<"u"&&typeof window.process=="object"&&window.process.type==="renderer"||typeof process<"u"&&typeof process.versions=="object"&&process.versions.electron||typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Electron")>=0)}Y9.exports=KT});var $y=lt((Aoe,Fy)=>{"use strict";Fy.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var zy=lt((qy,Wy)=>{"use strict";var Df=$y(),{hasOwnProperty:Vy}=Object.prototype,{propertyIsEnumerable:_k}=Object,Xs=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),Ik=qy,Ky={concatArrays:!1,ignoreUndefined:!1},Lf=r=>{let e=[];for(let t in r)Vy.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)_k.call(r,n)&&e.push(n)}return e};function js(r){return Array.isArray(r)?Tk(r):Df(r)?kk(r):r}function Tk(r){let e=r.slice(0,0);return Lf(r).forEach(t=>{Xs(e,t,js(r[t]))}),e}function kk(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return Lf(r).forEach(t=>{Xs(e,t,js(r[t]))}),e}var Hy=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?Xs(r,o,h3(r[o],e[o],n)):Xs(r,o,js(e[o])))}),r),Ck=(r,e,t)=>{let n=r.slice(0,0),o=0;return[r,e].forEach(i=>{let s=[];for(let a=0;a<i.length;a++)Vy.call(i,a)&&(s.push(String(a)),i===r?Xs(n,o++,i[a]):Xs(n,o++,js(i[a])));n=Hy(n,i,Lf(i).filter(a=>!s.includes(a)),t)}),n};function h3(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?Ck(r,e,t):!Df(e)||!Df(r)?js(e):Hy(r,e,Lf(e),t)}Wy.exports=function(...r){let e=h3(js(Ky),this!==Ik&&this||{},Ky),t={_:{}};for(let n of r)if(n!==void 0){if(!Df(n))throw new TypeError("`"+n+"` is not an Option Object");t=h3(t,{_:n},e)}return t._}});var Qy=lt((Ioe,Yy)=>{"use strict";function Pk(r){return r>=55296&&r<=56319}function Rk(r){return r>=56320&&r<=57343}Yy.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,i=0,s,a,c=0;c<o;c+=1){if(s=t.charCodeAt(c),a=t[c],Pk(s)&&Rk(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),i+=e(a),i===n)return t.slice(0,c+1);if(i>n)return t.slice(0,c-a.length+1)}return t}});var jy=lt((Toe,Xy)=>{"use strict";function Dk(r){return r>=55296&&r<=56319}function Lk(r){return r>=56320&&r<=57343}Xy.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,i=null,s=0;s<t;s++)o=e.charCodeAt(s),Lk(o)?i!=null&&Dk(i)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),i=o;return n}});var Jy=lt((koe,Zy)=>{"use strict";var Nk=Qy(),Bk=jy();Zy.exports=Nk.bind(null,Bk)});var rw=lt((Coe,tw)=>{"use strict";var Ok=Jy(),Mk=/[\/\?<>\\:\*\|"]/g,Uk=/[\x00-\x1f\x80-\x9f]/g,Fk=/^\.+$/,$k=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,Kk=/[\. ]+$/;function ew(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(Mk,e).replace(Uk,e).replace(Fk,e).replace($k,e).replace(Kk,e);return Ok(t,255)}tw.exports=function(r,e){var t=e&&e.replacement||"",n=ew(r,t);return t===""?n:ew(n,"")}});var Kw=lt(rh=>{"use strict";Object.defineProperty(rh,"__esModule",{value:!0});var D3=class{constructor(){this.pullQueue=[],this.pushQueue=[],this.eventHandlers={},this.isPaused=!1,this.isStopped=!1}push(e){if(this.isStopped)return;let t={value:e,done:!1};if(this.pullQueue.length){let n=this.pullQueue.shift();n&&n.resolve(t)}else this.pushQueue.push(Promise.resolve(t)),this.highWaterMark!==void 0&&this.pushQueue.length>=this.highWaterMark&&!this.isPaused&&(this.isPaused=!0,this.eventHandlers.highWater?this.eventHandlers.highWater():console&&console.warn(`EventIterator queue reached ${this.pushQueue.length} items`))}stop(){if(!this.isStopped){this.isStopped=!0,this.remove();for(let e of this.pullQueue)e.resolve({value:void 0,done:!0});this.pullQueue.length=0}}fail(e){if(!this.isStopped)if(this.isStopped=!0,this.remove(),this.pullQueue.length){for(let t of this.pullQueue)t.reject(e);this.pullQueue.length=0}else{let t=Promise.reject(e);t.catch(()=>{}),this.pushQueue.push(t)}}remove(){Promise.resolve().then(()=>{this.removeCallback&&this.removeCallback()})}[Symbol.asyncIterator](){return{next:e=>{let t=this.pushQueue.shift();return t?(this.lowWaterMark!==void 0&&this.pushQueue.length<=this.lowWaterMark&&this.isPaused&&(this.isPaused=!1,this.eventHandlers.lowWater&&this.eventHandlers.lowWater()),t):this.isStopped?Promise.resolve({value:void 0,done:!0}):new Promise((n,o)=>{this.pullQueue.push({resolve:n,reject:o})})},return:()=>(this.isStopped=!0,this.pushQueue.length=0,this.remove(),Promise.resolve({value:void 0,done:!0}))}}},th=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new D3;o.highWaterMark=t,o.lowWaterMark=n,o.removeCallback=e({push:i=>o.push(i),stop:()=>o.stop(),fail:i=>o.fail(i),on:(i,s)=>{o.eventHandlers[i]=s}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};rh.EventIterator=th;rh.default=th});var Vw=lt(Zc=>{"use strict";Object.defineProperty(Zc,"__esModule",{value:!0});var L3=Kw();Zc.EventIterator=L3.EventIterator;function FC(r,e,t){return new L3.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}Zc.subscribe=FC;Zc.default=L3.EventIterator});var Cb=lt((a1e,kb)=>{function Ur(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._timer=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}kb.exports=Ur;Ur.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};Ur.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};Ur.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.push(r),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(0,this._errors.length-1),t=this._cachedTimeouts.slice(-1);else return!1;var n=this;return this._timer=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t),this._options.unref&&this._timer.unref(),!0};Ur.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};Ur.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};Ur.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};Ur.prototype.start=Ur.prototype.try;Ur.prototype.errors=function(){return this._errors};Ur.prototype.attempts=function(){return this._attempts};Ur.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var o=this._errors[n],i=o.message,s=(r[i]||0)+1;r[i]=s,s>=t&&(e=o,t=s)}return e}});var Pb=lt(Bi=>{var cP=Cb();Bi.operation=function(r){var e=Bi.timeouts(r);return new cP(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};Bi.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],o=0;o<e.retries;o++)n.push(this.createTimeout(o,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(o,e)),n.sort(function(i,s){return i-s}),n};Bi.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*Math.max(e.minTimeout,1)*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};Bi.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var o=0;o<t.length;o++){var i=t[o],s=r[i];r[i]=function(c){var l=Bi.operation(e),d=Array.prototype.slice.call(arguments,1),u=d.pop();d.push(function(f){l.retry(f)||(f&&(arguments[0]=l.mainError()),u.apply(this,arguments))}),l.attempt(function(){c.apply(r,d)})}.bind(r,s),r[i].options=e}}});var Db=lt((l1e,Rb)=>{Rb.exports=Pb()});var PP={};Xe(PP,{DEFAULT_SESSION_MAX_PROVIDERS:()=>X2,DEFAULT_SESSION_MIN_PROVIDERS:()=>Q2,InsufficientProvidersError:()=>cc,NoRoutersAvailableError:()=>Ro,UnknownCodecError:()=>uc,UnknownHashAlgorithmError:()=>lc,createHelia:()=>kP,libp2pDefaults:()=>sh});var h4=Symbol.for("@libp2p/connection");var ln=Symbol.for("@libp2p/content-routing");var Yo=Symbol.for("@libp2p/peer-discovery");var il=Symbol.for("@libp2p/peer-id");function sl(r){return!!r?.[il]}var un=Symbol.for("@libp2p/peer-routing");var io="keep-alive";var dn=Symbol.for("@libp2p/transport");var so;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(so||(so={}));var mt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},al=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},cl=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},C=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},kn=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},la=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}};var ll=class extends Error{static name="ConnectionClosingError";constructor(e="The connection is closing"){super(e),this.name="ConnectionClosingError"}},Mi=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},Ui=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},fn=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},ul=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}},Qo=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Me=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},Fi=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},hn=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},dl=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},ao=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Cn=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},de=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},fl=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},Fr=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},$r=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Pn=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},hl=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},$i=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},pl=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},co=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},Kr=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var K=(r,...e)=>{try{[...e]}catch{}};var Ee=class extends EventTarget{#e=new Map;constructor(){super(),K(1/0,this)}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:i})=>i!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new CustomEvent(e,t))}};function ml(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function bt(...r){let e=[];for(let t of r)ml(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStart!=null&&await t.beforeStart()})),await Promise.all(e.map(async t=>{await t.start()})),await Promise.all(e.map(async t=>{t.afterStart!=null&&await t.afterStart()}))}async function Ct(...r){let e=[];for(let t of r)ml(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStop!=null&&await t.beforeStop()})),await Promise.all(e.map(async t=>{await t.stop()})),await Promise.all(e.map(async t=>{t.afterStop!=null&&await t.afterStop()}))}var _e=Symbol.for("@libp2p/service-capabilities"),Vr=Symbol.for("@libp2p/service-dependencies");function he(r){let e=new globalThis.AbortController;function t(){e.abort();for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}for(let i of r){if(i?.aborted===!0){t();break}i?.addEventListener!=null&&i.addEventListener("abort",t)}function n(){for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}function J(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var gl=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||e-1&e)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){let e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}},Ki=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new gl(this.hwm),this.tail=this.head,this.size=0}calculateSize(e){return e?.byteLength!=null?e.byteLength:1}push(e){if(e?.value!=null&&(this.size+=this.calculateSize(e.value)),!this.head.push(e)){let t=this.head;this.head=t.next=new gl(2*this.head.buffer.length),this.head.push(e)}}shift(){let e=this.tail.shift();if(e===void 0&&this.tail.next!=null){let t=this.tail.next;this.tail.next=null,this.tail=t,e=this.tail.shift()}return e?.value!=null&&(this.size-=this.calculateSize(e.value)),e}isEmpty(){return this.head.isEmpty()}};var $h=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function Pt(r={}){return nx(t=>{let n=t.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},r)}function nx(r,e){e=e??{};let t=e.onEnd,n=new Ki,o,i,s,a=J(),c=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((g,y)=>{i=b=>{i=null,n.push(b);try{g(r(n))}catch(w){y(w)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=J()})}},l=g=>i!=null?i(g):(n.push(g),o),d=g=>(n=new Ki,i!=null?i({error:g}):(n.push({error:g}),o)),u=g=>{if(s)return o;if(e?.objectMode!==!0&&g?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:g})},f=g=>s?o:(s=!0,g!=null?d(g):l({done:!0})),h=()=>(n=new Ki,f(),{done:!0}),p=g=>(f(g),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:h,throw:p,push:u,end:f,get readableLength(){return n.size},onEmpty:async g=>{let y=g?.signal;if(y?.throwIfAborted(),n.isEmpty())return;let b,w;y!=null&&(b=new Promise((x,T)=>{w=()=>{T(new $h)},y.addEventListener("abort",w)}));try{await Promise.race([a.promise,b])}finally{w!=null&&y!=null&&y?.removeEventListener("abort",w)}}},t==null)return o;let m=o;return o={[Symbol.asyncIterator](){return this},next(){return m.next()},throw(g){return m.throw(g),t!=null&&(t(g),t=void 0),{done:!0}},return(){return m.return(),t!=null&&(t(),t=void 0),{done:!0}},push:u,end(g){return m.end(g),t!=null&&(t(g),t=void 0),o},get readableLength(){return m.readableLength},onEmpty:g=>m.onEmpty(g)},o}var Kh=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function dr(r,e,t,n){let o=new Kh(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((i,s)=>{function a(){t?.removeEventListener("abort",d),r.removeEventListener(e,c),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let c=u=>{try{if(n?.filter?.(u)===!1)return}catch(f){a(),s(f);return}a(),i(u)},l=u=>{a(),s(u.detail)},d=()=>{a(),s(o)};t?.addEventListener("abort",d),r.addEventListener(e,c),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}var yl=class extends Error{remainingPoints;msBeforeNext;consumedPoints;isFirstInDuration;constructor(e="Rate limit exceeded",t){super(e),this.name="RateLimitError",this.remainingPoints=t.remainingPoints,this.msBeforeNext=t.msBeforeNext,this.consumedPoints=t.consumedPoints,this.isFirstInDuration=t.isFirstInDuration}},wl=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var bl=class extends Error{type;code;constructor(e,t,n){super(e??"The operation was aborted"),this.type="aborted",this.name=n??"AbortError",this.code=t??"ABORT_ERR"}};async function ke(r,e,t){if(e==null)return r;if(e.aborted)return Promise.reject(new bl(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new bl(t?.errorMessage,t?.errorCode,t?.errorName);try{return await Promise.race([r,new Promise((i,s)=>{n=()=>{s(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var xl=class{deferred;signal;constructor(e){this.signal=e,this.deferred=J(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new mt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function ox(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var El=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=ox(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,K(1/0,this.controller.signal),this.onAbort=this.onAbort.bind(this)}abort(e){this.controller.abort(e)}onAbort(){this.recipients.reduce((t,n)=>t&&n.signal?.aborted===!0,!0)&&(this.controller.abort(new mt),this.cleanup())}async join(e={}){let t=new xl(e.signal);return this.recipients.push(t),e.signal?.addEventListener("abort",this.onAbort),t.deferred.promise}async run(){this.status="running",this.timeline.started=Date.now();try{this.controller.signal.throwIfAborted();let e=await ke(this.fn({...this.options??{},signal:this.controller.signal}),this.controller.signal);this.recipients.forEach(t=>{t.deferred.resolve(e)}),this.status="complete"}catch(e){this.recipients.forEach(t=>{t.deferred.reject(e)}),this.status="errored"}finally{this.timeline.finished=Date.now(),this.cleanup()}}cleanup(){this.recipients.forEach(e=>{e.cleanup(),e.signal?.removeEventListener("abort",this.onAbort)})}};var fr=class extends Ee{concurrency;maxSize;queue;pending;sort;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.sort=e.sort,this.queue=[]}tryToStartAnother(){if(this.size===0)return queueMicrotask(()=>{this.safeDispatchEvent("empty")}),this.running===0&&queueMicrotask(()=>{this.safeDispatchEvent("idle")}),!1;if(this.pending<this.concurrency){let e;for(let t of this.queue)if(t.status==="queued"){e=t;break}return e==null?!1:(this.safeDispatchEvent("active"),this.pending++,e.run().finally(()=>{for(let t=0;t<this.queue.length;t++)if(this.queue[t]===e){this.queue.splice(t,1);break}this.pending--,this.tryToStartAnother(),this.safeDispatchEvent("next")}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new wl;let n=new El(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("completed",{detail:o}),this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let i=0;i<this.queue.length;i++)if(this.queue[i]===n){this.queue.splice(i,1);break}}throw this.safeDispatchEvent("error",{detail:o}),this.safeDispatchEvent("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new mt)}),this.clear()}async onEmpty(e){this.size!==0&&await dr(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await dr(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await dr(this,"idle",e?.signal)}get size(){return this.queue.length}get queued(){return this.queue.length-this.pending}get running(){return this.pending}async*toGenerator(e){e?.signal?.throwIfAborted();let t=Pt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},i=c=>{n(c.detail)},s=()=>{n()},a=()=>{n(new mt("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("error",i),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",i),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",a),n()}}};var Ut=class extends fr{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function ix(r){return r[Symbol.asyncIterator]!=null}function sx(r){if(ix(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Yt=sx;function re(r=0){return new Uint8Array(r)}function Ge(r=0){return new Uint8Array(r)}var ax=Math.pow(2,7),cx=Math.pow(2,14),lx=Math.pow(2,21),Vh=Math.pow(2,28),Hh=Math.pow(2,35),qh=Math.pow(2,42),Wh=Math.pow(2,49),Te=128,Rt=127;function pe(r){if(r<ax)return 1;if(r<cx)return 2;if(r<lx)return 3;if(r<Vh)return 4;if(r<Hh)return 5;if(r<qh)return 6;if(r<Wh)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function zh(r,e,t=0){switch(pe(r)){case 8:e[t++]=r&255|Te,r/=128;case 7:e[t++]=r&255|Te,r/=128;case 6:e[t++]=r&255|Te,r/=128;case 5:e[t++]=r&255|Te,r/=128;case 4:e[t++]=r&255|Te,r>>>=7;case 3:e[t++]=r&255|Te,r>>>=7;case 2:e[t++]=r&255|Te,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function ux(r,e,t=0){switch(pe(r)){case 8:e.set(t++,r&255|Te),r/=128;case 7:e.set(t++,r&255|Te),r/=128;case 6:e.set(t++,r&255|Te),r/=128;case 5:e.set(t++,r&255|Te),r/=128;case 4:e.set(t++,r&255|Te),r>>>=7;case 3:e.set(t++,r&255|Te),r>>>=7;case 2:e.set(t++,r&255|Te),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function Gh(r,e){let t=r[e],n=0;if(n+=t&Rt,t<Te||(t=r[e+1],n+=(t&Rt)<<7,t<Te)||(t=r[e+2],n+=(t&Rt)<<14,t<Te)||(t=r[e+3],n+=(t&Rt)<<21,t<Te)||(t=r[e+4],n+=(t&Rt)*Vh,t<Te)||(t=r[e+5],n+=(t&Rt)*Hh,t<Te)||(t=r[e+6],n+=(t&Rt)*qh,t<Te)||(t=r[e+7],n+=(t&Rt)*Wh,t<Te))return n;throw new RangeError("Could not decode varint")}function dx(r,e){let t=r.get(e),n=0;if(n+=t&Rt,t<Te||(t=r.get(e+1),n+=(t&Rt)<<7,t<Te)||(t=r.get(e+2),n+=(t&Rt)<<14,t<Te)||(t=r.get(e+3),n+=(t&Rt)<<21,t<Te)||(t=r.get(e+4),n+=(t&Rt)*Vh,t<Te)||(t=r.get(e+5),n+=(t&Rt)*Hh,t<Te)||(t=r.get(e+6),n+=(t&Rt)*qh,t<Te)||(t=r.get(e+7),n+=(t&Rt)*Wh,t<Te))return n;throw new RangeError("Could not decode varint")}function Ve(r,e,t=0){return e==null&&(e=Ge(pe(r))),e instanceof Uint8Array?zh(r,e,t):ux(r,e,t)}function Ft(r,e=0){return r instanceof Uint8Array?Gh(r,e):dx(r,e)}function Re(r,e){e==null&&(e=r.reduce((o,i)=>o+i.length,0));let t=Ge(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}function te(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var m4=Symbol.for("@achingbrain/uint8arraylist");function p4(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let o=t+n.byteLength;if(e<o)return{buf:n,index:e-t};t=o}throw new RangeError("index is out of bounds")}function vl(r){return!!r?.[m4]}var ce=class r{bufs;length;[m4]=!0;constructor(...e){this.bufs=[],this.length=0,e.length>0&&this.appendAll(e)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...e){this.appendAll(e)}appendAll(e){let t=0;for(let n of e)if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.push(n);else if(vl(n))t+=n.byteLength,this.bufs.push(...n.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}prepend(...e){this.prependAll(e)}prependAll(e){let t=0;for(let n of e.reverse())if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.unshift(n);else if(vl(n))t+=n.byteLength,this.bufs.unshift(...n.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}get(e){let t=p4(this.bufs,e);return t.buf[t.index]}set(e,t){let n=p4(this.bufs,e);n.buf[n.index]=t}write(e,t=0){if(e instanceof Uint8Array)for(let n=0;n<e.length;n++)this.set(t+n,e[n]);else if(vl(e))for(let n=0;n<e.length;n++)this.set(t+n,e.get(n));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,t){let{bufs:n,length:o}=this._subList(e,t);return Re(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:Re(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),i=new r;return i.length=o,i.bufs=[...n],i}_subList(e,t){if(e=e??0,t=t??this.length,e<0&&(e=this.length+e),t<0&&(t=this.length+t),e<0||t>this.length)throw new RangeError("index is out of bounds");if(e===t)return{bufs:[],length:0};if(e===0&&t===this.length)return{bufs:this.bufs,length:this.length};let n=[],o=0;for(let i=0;i<this.bufs.length;i++){let s=this.bufs[i],a=o,c=a+s.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,d=t>a&&t<=c;if(l&&d){if(e===a&&t===c){n.push(s);break}let u=e-a;n.push(s.subarray(u,u+(t-e)));break}if(l){if(e===0){n.push(s);continue}n.push(s.subarray(e-a));continue}if(d){if(t===c){n.push(s);break}n.push(s.subarray(0,t-a));break}n.push(s)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!vl(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(t=Number(t??0),isNaN(t)&&(t=0),t<0&&(t=this.length+t),t<0&&(t=0),e.length===0)return t>this.length?this.length:t;let o=n.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");let i=256,s=new Int32Array(i);for(let u=0;u<i;u++)s[u]=-1;for(let u=0;u<o;u++)s[n[u]]=u;let a=s,c=this.byteLength-n.byteLength,l=n.byteLength-1,d;for(let u=t;u<=c;u+=d){d=0;for(let f=l;f>=0;f--){let h=this.get(u+f);if(n[f]!==h){d=Math.max(1,f-a[h]);break}}if(d===0)return u}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=Ge(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,t),this.write(n,e)}getInt16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,t)}setInt16(e,t,n){let o=re(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt16(0,t,n),this.write(o,e)}getInt32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,t)}setInt32(e,t,n){let o=re(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt32(0,t,n),this.write(o,e)}getBigInt64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,t)}setBigInt64(e,t,n){let o=re(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,t,n),this.write(o,e)}getUint8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint8(0)}setUint8(e,t){let n=Ge(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,t),this.write(n,e)}getUint16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,t)}setUint16(e,t,n){let o=re(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint16(0,t,n),this.write(o,e)}getUint32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,t)}setUint32(e,t,n){let o=re(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,t,n),this.write(o,e)}getBigUint64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,t)}setBigUint64(e,t,n){let o=re(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigUint64(0,t,n),this.write(o,e)}getFloat32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,t)}setFloat32(e,t,n){let o=re(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat32(0,t,n),this.write(o,e)}getFloat64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,t)}setFloat64(e,t,n){let o=re(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,t,n),this.write(o,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!te(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,i)=>o+i.byteLength,0)),n.length=t,n}};function Sl(r){return r[Symbol.asyncIterator]!=null}var Al=r=>{let e=pe(r),t=Ge(e);return Ve(r,t),Al.bytes=e,t};Al.bytes=0;function Qt(r,e){e=e??{};let t=e.lengthEncoder??Al;function*n(o){let i=t(o.byteLength);i instanceof Uint8Array?yield i:yield*i,o instanceof Uint8Array?yield o:yield*o}return Sl(r)?async function*(){for await(let o of r)yield*n(o)}():function*(){for(let o of r)yield*n(o)}()}Qt.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Al;return new ce(t(r.byteLength),r)};var _l=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Il=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Tl=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},ua=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var hx=8,px=1024*1024*4,Xo;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(Xo||(Xo={}));var Yh=r=>{let e=Ft(r);return Yh.bytes=pe(e),e};Yh.bytes=0;function Xt(r,e){let t=new ce,n=Xo.LENGTH,o=-1,i=e?.lengthDecoder??Yh,s=e?.maxLengthLength??hx,a=e?.maxDataLength??px;function*c(){for(;t.byteLength>0;){if(n===Xo.LENGTH)try{if(o=i(t),o<0)throw new _l("Invalid message length");if(o>a)throw new Il("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=Xo.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new Tl("Message length length too long");break}throw l}if(n===Xo.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=Xo.LENGTH}}}return Sl(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new ua("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new ua("Unexpected end of input")}()}Xt.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:i,value:s}=await r.next(t);if(i===!0)return;s!=null&&(yield s)}catch(i){if(i.code==="ERR_UNDER_READ")return{done:!0,value:null};throw i}finally{t=1}}();return Xt(n,{...e??{},onLength:i=>{t=i}})};function mx(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:o=>{n.push(o)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var Vi=mx;function gx(r){return r[Symbol.asyncIterator]!=null}function yx(r,e){let t=0;if(gx(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=Vi(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){yield await s;for await(let c of n)yield e(c,t++)}();let a=e;return function*(){yield s;for(let c of n)yield a(c,t++)}()}var jt=yx;function wx(r){return r[Symbol.asyncIterator]!=null}function bx(...r){let e=[];for(let t of r)wx(t)||e.push(t);return e.length===r.length?function*(){for(let t of e)yield*t}():async function*(){let t=Pt({objectMode:!0});Promise.resolve().then(async()=>{try{await Promise.all(r.map(async n=>{for await(let o of n)t.push(o)})),t.end()}catch(n){t.end(n)}}),yield*t}()}var $t=bx;function Je(r,...e){if(r==null)throw new Error("Empty pipeline");if(Qh(r)){let n=r;r=()=>n.source}else if(y4(r)||g4(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&Qh(t[t.length-1])&&(t[t.length-1]=t[t.length-1].sink),t.length>2)for(let n=1;n<t.length-1;n++)Qh(t[n])&&(t[n]=Ex(t[n]));return xx(...t)}var xx=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},g4=r=>r?.[Symbol.asyncIterator]!=null,y4=r=>r?.[Symbol.iterator]!=null,Qh=r=>r==null?!1:r.sink!=null&&r.source!=null,Ex=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=Pt({objectMode:!0});t.then(()=>{n.end()},s=>{n.end(s)});let o,i=r.source;if(g4(i))o=async function*(){yield*i,n.end()};else if(y4(i))o=function*(){yield*i,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return $t(n,o())}return r.source};function vx(r){return r[Symbol.asyncIterator]!=null}function Sx(r,e){return vx(r)?async function*(){let t=0;if(!(e<1)){for await(let n of r)if(yield n,t++,t===e)return}}():function*(){let t=0;if(!(e<1)){for(let n of r)if(yield n,t++,t===e)return}}()}var lo=Sx;var H=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var da="/ipfs/bitswap/1.2.0";var Xh=new Float32Array([-0]),uo=new Uint8Array(Xh.buffer);function w4(r,e,t){Xh[0]=r,e[t]=uo[0],e[t+1]=uo[1],e[t+2]=uo[2],e[t+3]=uo[3]}function b4(r,e){return uo[0]=r[e],uo[1]=r[e+1],uo[2]=r[e+2],uo[3]=r[e+3],Xh[0]}var jh=new Float64Array([-0]),Dt=new Uint8Array(jh.buffer);function x4(r,e,t){jh[0]=r,e[t]=Dt[0],e[t+1]=Dt[1],e[t+2]=Dt[2],e[t+3]=Dt[3],e[t+4]=Dt[4],e[t+5]=Dt[5],e[t+6]=Dt[6],e[t+7]=Dt[7]}function E4(r,e){return Dt[0]=r[e],Dt[1]=r[e+1],Dt[2]=r[e+2],Dt[3]=r[e+3],Dt[4]=r[e+4],Dt[5]=r[e+5],Dt[6]=r[e+6],Dt[7]=r[e+7],jh[0]}var Ax=BigInt(Number.MAX_SAFE_INTEGER),_x=BigInt(Number.MIN_SAFE_INTEGER),hr=class r{lo;hi;constructor(e,t){this.lo=e|0,this.hi=t|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(t+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(BigInt(t)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){let e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){let e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){let e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?t===0?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}static fromBigInt(e){if(e===0n)return jo;if(e<Ax&&e>_x)return this.fromNumber(Number(e));let t=e<0n;t&&(e=-e);let n=e>>32n,o=e-(n<<32n);return t&&(n=~n|0n,o=~o|0n,++o>v4&&(o=0n,++n>v4&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return jo;let t=e<0;t&&(e=-e);let n=e>>>0,o=(e-n)/4294967296>>>0;return t&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new r(n,o)}static from(e){return typeof e=="number"?r.fromNumber(e):typeof e=="bigint"?r.fromBigInt(e):typeof e=="string"?r.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new r(e.low>>>0,e.high>>>0):jo}},jo=new hr(0,0);jo.toBigInt=function(){return 0n};jo.zzEncode=jo.zzDecode=function(){return this};jo.length=function(){return 1};var v4=4294967296n;function S4(r){let e=0,t=0;for(let n=0;n<r.length;++n)t=r.charCodeAt(n),t<128?e+=1:t<2048?e+=2:(t&64512)===55296&&(r.charCodeAt(n+1)&64512)===56320?(++n,e+=4):e+=3;return e}function A4(r,e,t){if(t-e<1)return"";let o,i=[],s=0,a;for(;e<t;)a=r[e++],a<128?i[s++]=a:a>191&&a<224?i[s++]=(a&31)<<6|r[e++]&63:a>239&&a<365?(a=((a&7)<<18|(r[e++]&63)<<12|(r[e++]&63)<<6|r[e++]&63)-65536,i[s++]=55296+(a>>10),i[s++]=56320+(a&1023)):i[s++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,s>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,i)),s=0);return o!=null?(s>0&&o.push(String.fromCharCode.apply(String,i.slice(0,s))),o.join("")):String.fromCharCode.apply(String,i.slice(0,s))}function Zh(r,e,t){let n=t,o,i;for(let s=0;s<r.length;++s)o=r.charCodeAt(s),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((i=r.charCodeAt(s+1))&64512)===56320?(o=65536+((o&1023)<<10)+(i&1023),++s,e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128);return t-n}function Hr(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Cl(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var Jh=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(e){this.buf=e,this.pos=0,this.len=e.length}uint32(){let e=4294967295;if(e=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(e=(e|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return e;if((this.pos+=5)>this.len)throw this.pos=this.len,Hr(this,10);return e}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw Hr(this,4);return Cl(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Hr(this,4);return Cl(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Hr(this,4);let e=b4(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Hr(this,4);let e=E4(this.buf,this.pos);return this.pos+=8,e}bytes(){let e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw Hr(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return A4(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Hr(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Hr(this);while(this.buf[this.pos++]&128);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){let e=new hr(0,0),t=0;if(this.len-this.pos>4){for(;t<4;++t)if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(this.buf[this.pos]&127)<<28)>>>0,e.hi=(e.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return e;t=0}else{for(;t<3;++t){if(this.pos>=this.len)throw Hr(this);if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(this.buf[this.pos++]&127)<<t*7)>>>0,e}if(this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw Hr(this);if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw Hr(this,8);let e=Cl(this.buf,this.pos+=4),t=Cl(this.buf,this.pos+=4);return new hr(e,t)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){let e=Gh(this.buf,this.pos);return this.pos+=pe(e),e}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}};function e0(r){return new Jh(r instanceof Uint8Array?r:r.subarray())}function ne(r,e,t){let n=e0(r);return e.decode(n,void 0,t)}var s0={};Xe(s0,{base10:()=>Rx});var ID=new Uint8Array(0);function I4(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}function qr(r){if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")}function T4(r){return new TextEncoder().encode(r)}function k4(r){return new TextDecoder().decode(r)}function Ix(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var i=r.charAt(o),s=i.charCodeAt(0);if(t[s]!==255)throw new TypeError(i+" is ambiguous");t[s]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(p){if(p instanceof Uint8Array||(ArrayBuffer.isView(p)?p=new Uint8Array(p.buffer,p.byteOffset,p.byteLength):Array.isArray(p)&&(p=Uint8Array.from(p))),!(p instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(p.length===0)return"";for(var m=0,g=0,y=0,b=p.length;y!==b&&p[y]===0;)y++,m++;for(var w=(b-y)*d+1>>>0,x=new Uint8Array(w);y!==b;){for(var T=p[y],k=0,v=w-1;(T!==0||k<g)&&v!==-1;v--,k++)T+=256*x[v]>>>0,x[v]=T%a>>>0,T=T/a>>>0;if(T!==0)throw new Error("Non-zero carry");g=k,y++}for(var S=w-g;S!==w&&x[S]===0;)S++;for(var I=c.repeat(m);S<w;++S)I+=r.charAt(x[S]);return I}function f(p){if(typeof p!="string")throw new TypeError("Expected String");if(p.length===0)return new Uint8Array;var m=0;if(p[m]!==" "){for(var g=0,y=0;p[m]===c;)g++,m++;for(var b=(p.length-m)*l+1>>>0,w=new Uint8Array(b);p[m];){var x=t[p.charCodeAt(m)];if(x===255)return;for(var T=0,k=b-1;(x!==0||T<y)&&k!==-1;k--,T++)x+=a*w[k]>>>0,w[k]=x%256>>>0,x=x/256>>>0;if(x!==0)throw new Error("Non-zero carry");y=T,m++}if(p[m]!==" "){for(var v=b-y;v!==b&&w[v]===0;)v++;for(var S=new Uint8Array(g+(b-v)),I=g;v!==b;)S[I++]=w[v++];return S}}}function h(p){var m=f(p);if(m)return m;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:h}}var Tx=Ix,kx=Tx,C4=kx;var r0=class{name;prefix;baseEncode;constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},n0=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){this.name=e,this.prefix=t;let o=t.codePointAt(0);if(o===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=o,this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return P4(this,e)}},o0=class{decoders;constructor(e){this.decoders=e}or(e){return P4(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function P4(r,e){return new o0({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var i0=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new r0(e,t,n),this.decoder=new n0(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function Hi({name:r,prefix:e,encode:t,decode:n}){return new i0(r,e,t,n)}function fo({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=C4(t,r);return Hi({prefix:e,name:r,encode:n,decode:i=>qr(o(i))})}function Cx(r,e,t,n){let o={};for(let d=0;d<e.length;++d)o[e[d]]=d;let i=r.length;for(;r[i-1]==="=";)--i;let s=new Uint8Array(i*t/8|0),a=0,c=0,l=0;for(let d=0;d<i;++d){let u=o[r[d]];if(u===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|u,a+=t,a>=8&&(a-=8,s[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return s}function Px(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,i="",s=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],s+=8;s>t;)s-=t,i+=e[o&a>>s];if(s!==0&&(i+=e[o&a<<t-s]),n)for(;i.length*t&7;)i+="=";return i}function je({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return Hi({prefix:e,name:r,encode(o){return Px(o,n,t)},decode(o){return Cx(o,n,t,r)}})}var Rx=fo({prefix:"9",name:"base10",alphabet:"0123456789"});var a0={};Xe(a0,{base16:()=>Dx,base16upper:()=>Lx});var Dx=je({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Lx=je({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var c0={};Xe(c0,{base2:()=>Nx});var Nx=je({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var l0={};Xe(l0,{base256emoji:()=>Fx});var R4=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),Bx=R4.reduce((r,e,t)=>(r[t]=e,r),[]),Ox=R4.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function Mx(r){return r.reduce((e,t)=>(e+=Bx[t],e),"")}function Ux(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=Ox[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var Fx=Hi({prefix:"\u{1F680}",name:"base256emoji",encode:Mx,decode:Ux});var u0={};Xe(u0,{base32:()=>ut,base32hex:()=>Hx,base32hexpad:()=>Wx,base32hexpadupper:()=>zx,base32hexupper:()=>qx,base32pad:()=>Kx,base32padupper:()=>Vx,base32upper:()=>$x,base32z:()=>Gx});var ut=je({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),$x=je({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),Kx=je({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),Vx=je({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),Hx=je({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),qx=je({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),Wx=je({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),zx=je({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),Gx=je({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var d0={};Xe(d0,{base36:()=>pn,base36upper:()=>Yx});var pn=fo({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Yx=fo({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var f0={};Xe(f0,{base58btc:()=>Se,base58flickr:()=>Qx});var Se=fo({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),Qx=fo({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var p0={};Xe(p0,{base64:()=>it,base64pad:()=>Xx,base64url:()=>h0,base64urlpad:()=>jx});var it=je({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Xx=je({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),h0=je({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),jx=je({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var m0={};Xe(m0,{base8:()=>Zx});var Zx=je({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var g0={};Xe(g0,{identity:()=>Jx});var Jx=Hi({prefix:"\0",name:"identity",encode:r=>k4(r),decode:r=>T4(r)});var Pl={};Xe(Pl,{code:()=>y0,decode:()=>oE,encode:()=>nE,name:()=>rE});var eE=new TextEncoder,tE=new TextDecoder,rE="json",y0=512;function nE(r){return eE.encode(JSON.stringify(r))}function oE(r){return JSON.parse(tE.decode(r))}var ha={};Xe(ha,{code:()=>fa,decode:()=>aE,encode:()=>sE,name:()=>iE});var iE="raw",fa=85;function sE(r){return qr(r)}function aE(r){return qr(r)}var x0={};Xe(x0,{identity:()=>Jt});var Ye={};Xe(Ye,{Digest:()=>Zo,create:()=>Zt,decode:()=>Ce,equals:()=>b0,hasCode:()=>IE});var cE=N4,D4=128,lE=127,uE=~lE,dE=Math.pow(2,31);function N4(r,e,t){e=e||[],t=t||0;for(var n=t;r>=dE;)e[t++]=r&255|D4,r/=128;for(;r&uE;)e[t++]=r&255|D4,r>>>=7;return e[t]=r|0,N4.bytes=t-n+1,e}var fE=w0,hE=128,L4=127;function w0(r,n){var t=0,n=n||0,o=0,i=n,s,a=r.length;do{if(i>=a)throw w0.bytes=0,new RangeError("Could not decode varint");s=r[i++],t+=o<28?(s&L4)<<o:(s&L4)*Math.pow(2,o),o+=7}while(s>=hE);return w0.bytes=i-n,t}var pE=Math.pow(2,7),mE=Math.pow(2,14),gE=Math.pow(2,21),yE=Math.pow(2,28),wE=Math.pow(2,35),bE=Math.pow(2,42),xE=Math.pow(2,49),EE=Math.pow(2,56),vE=Math.pow(2,63),SE=function(r){return r<pE?1:r<mE?2:r<gE?3:r<yE?4:r<wE?5:r<bE?6:r<xE?7:r<EE?8:r<vE?9:10},AE={encode:cE,decode:fE,encodingLength:SE},_E=AE,pa=_E;function ma(r,e=0){return[pa.decode(r,e),pa.decode.bytes]}function qi(r,e,t=0){return pa.encode(r,e,t),e}function Wi(r){return pa.encodingLength(r)}function Zt(r,e){let t=e.byteLength,n=Wi(r),o=n+Wi(t),i=new Uint8Array(o+t);return qi(r,i,0),qi(t,i,n),i.set(e,o),new Zo(r,t,e,i)}function Ce(r){let e=qr(r),[t,n]=ma(e),[o,i]=ma(e.subarray(n)),s=e.subarray(n+i);if(s.byteLength!==o)throw new Error("Incorrect length");return new Zo(t,o,s,e)}function b0(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&I4(r.bytes,t.bytes)}}var Zo=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function IE(r,e){return r.code===e}var B4=0,TE="identity",O4=qr;function kE(r){return Zt(B4,O4(r))}var Jt={code:B4,name:TE,encode:O4,digest:kE};var S0={};Xe(S0,{sha256:()=>dt,sha512:()=>Dl});function v0({name:r,code:e,encode:t}){return new E0(r,e,t)}var E0=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?Zt(this.code,t):t.then(n=>Zt(this.code,n))}else throw Error("Unknown type, must be binary type")}};function U4(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var dt=v0({name:"sha2-256",code:18,encode:U4("SHA-256")}),Dl=v0({name:"sha2-512",code:19,encode:U4("SHA-512")});function F4(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return PE(t,A0(r),e??Se.encoder);default:return RE(t,A0(r),e??ut.encoder)}}var $4=new WeakMap;function A0(r){let e=$4.get(r);if(e==null){let t=new Map;return $4.set(r,t),t}return e}var Z=class r{code;version;multihash;bytes;"/";constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==ga)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==DE)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=Zt(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&b0(e.multihash,n.multihash)}toString(e){return F4(this,e)}toJSON(){return{"/":F4(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:i,bytes:s}=t;return new r(n,o,i,s??K4(n,o,i.bytes))}else if(t[LE]===!0){let{version:n,multihash:o,code:i}=t,s=Ce(o);return r.create(n,i,s)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==ga)throw new Error(`Version 0 CID must use dag-pb (code: ${ga}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=K4(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,ga,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length!==0)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=qr(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let i=o.subarray(t.multihashSize-t.digestSize),s=new Zo(t.multihashCode,t.digestSize,i,o);return[t.version===0?r.createV0(s):r.createV1(t.codec,s),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[u,f]=ma(e.subarray(t));return t+=f,u},o=n(),i=ga;if(o===18?(o=0,t=0):i=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let s=t,a=n(),c=n(),l=t+c,d=l-s;return{version:o,codec:i,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,t){let[n,o]=CE(e,t),i=r.decode(o);if(i.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return A0(i).set(n,e),i}};function CE(r,e){switch(r[0]){case"Q":{let t=e??Se;return[Se.prefix,t.decode(`${Se.prefix}${r}`)]}case Se.prefix:{let t=e??Se;return[Se.prefix,t.decode(r)]}case ut.prefix:{let t=e??ut;return[ut.prefix,t.decode(r)]}case pn.prefix:{let t=e??pn;return[pn.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function PE(r,e,t){let{prefix:n}=t;if(n!==Se.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let i=t.encode(r).slice(1);return e.set(n,i),i}else return o}function RE(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let i=t.encode(r);return e.set(n,i),i}else return o}var ga=112,DE=18;function K4(r,e,t){let n=Wi(r),o=n+Wi(e),i=new Uint8Array(o+t.byteLength);return qi(r,i,0),qi(e,i,n),i.set(t,o),i}var LE=Symbol.for("@ipld/js-cid/CID");var Dn={...g0,...c0,...m0,...s0,...a0,...u0,...d0,...f0,...p0,...l0},lL={...S0,...x0};function H4(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var V4=H4("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),_0=H4("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=Ge(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),NE={utf8:V4,"utf-8":V4,hex:Dn.base16,latin1:_0,ascii:_0,binary:_0,...Dn},Ll=NE;function O(r,e="utf8"){let t=Ll[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function I0(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return Ge(s);o+s>e&&(n=Ge(e),o=0);let a=n.subarray(o,o+=s);return o&7&&(o=(o|7)+1),a}}var Jo=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function T0(){}var C0=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},BE=I0();function OE(r){return globalThis.Buffer!=null?Ge(r):BE(r)}var wa=class{len;head;tail;states;constructor(){this.len=0,this.head=new Jo(T0,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new Jo(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new P0((e=e>>>0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this}int32(e){return e<0?this._push(Nl,10,hr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=hr.fromBigInt(e);return this._push(Nl,t.length(),t)}uint64Number(e){return this._push(zh,pe(e),e)}uint64String(e){return this.uint64(BigInt(e))}int64(e){return this.uint64(e)}int64Number(e){return this.uint64Number(e)}int64String(e){return this.uint64String(e)}sint64(e){let t=hr.fromBigInt(e).zzEncode();return this._push(Nl,t.length(),t)}sint64Number(e){let t=hr.fromNumber(e).zzEncode();return this._push(Nl,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(k0,1,e?1:0)}fixed32(e){return this._push(ya,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=hr.fromBigInt(e);return this._push(ya,4,t.lo)._push(ya,4,t.hi)}fixed64Number(e){let t=hr.fromNumber(e);return this._push(ya,4,t.lo)._push(ya,4,t.hi)}fixed64String(e){return this.fixed64(BigInt(e))}sfixed64(e){return this.fixed64(e)}sfixed64Number(e){return this.fixed64Number(e)}sfixed64String(e){return this.fixed64String(e)}float(e){return this._push(w4,4,e)}double(e){return this._push(x4,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(k0,1,0):this.uint32(t)._push(UE,t,e)}string(e){let t=S4(e);return t!==0?this.uint32(t)._push(Zh,t,e):this._push(k0,1,0)}fork(){return this.states=new C0(this),this.head=this.tail=new Jo(T0,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new Jo(T0,0,0),this.len=0),this}ldelim(){let e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n!==0&&(this.tail.next=e.next,this.tail=t,this.len+=n),this}finish(){let e=this.head.next,t=OE(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function k0(r,e,t){e[t]=r&255}function ME(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var P0=class extends Jo{next;constructor(e,t){super(ME,e,t),this.next=void 0}};function Nl(r,e,t){for(;r.hi!==0;)e[t++]=r.lo&127|128,r.lo=(r.lo>>>7|r.hi<<25)>>>0,r.hi>>>=7;for(;r.lo>127;)e[t++]=r.lo&127|128,r.lo=r.lo>>>7;e[t++]=r.lo}function ya(r,e,t){e[t]=r&255,e[t+1]=r>>>8&255,e[t+2]=r>>>16&255,e[t+3]=r>>>24}function UE(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(wa.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(FE,e,r),this},wa.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push($E,e,r),this});function FE(r,e,t){e.set(r,t)}function $E(r,e,t){r.length<40?Zh(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(O(r),t)}function R0(){return new wa}function oe(r,e){let t=R0();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var zi;(function(r){r[r.VARINT=0]="VARINT",r[r.BIT64=1]="BIT64",r[r.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",r[r.START_GROUP=3]="START_GROUP",r[r.END_GROUP=4]="END_GROUP",r[r.BIT32=5]="BIT32"})(zi||(zi={}));function Bl(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function He(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(i,s){let a=e(i);s.int32(a)},n=function(i){let s=i.int32();return e(s)};return Bl("enum",zi.VARINT,t,n)}function ie(r,e){return Bl("message",zi.LENGTH_DELIMITED,r,e)}var Ue=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},ba=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var et;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(et||(et={}));var D0;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(D0||(D0={}));(function(r){r.codec=()=>He(D0)})(et||(et={}));var Gi;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.priority!=null&&t.priority!==0&&(n.uint32(16),n.int32(t.priority)),t.cancel!=null&&(n.uint32(24),n.bool(t.cancel)),t.wantType!=null&&(n.uint32(32),et.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:re(0),priority:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.priority=t.int32();break}case 3:{i.cancel=t.bool();break}case 4:{i.wantType=et.codec().decode(t);break}case 5:{i.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(Gi||(Gi={}));var Ol;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let i of t.entries)n.uint32(10),Gi.codec().encode(i,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={entries:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.entries!=null&&i.entries.length===o.limits.entries)throw new Ue('Decode error - map field "entries" had too many elements');i.entries.push(Gi.codec().decode(t,t.uint32(),{limits:o.limits?.entries$}));break}case 2:{i.full=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(Ol||(Ol={}));var Yi;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.prefix!=null&&t.prefix.byteLength>0&&(n.uint32(10),n.bytes(t.prefix)),t.data!=null&&t.data.byteLength>0&&(n.uint32(18),n.bytes(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={prefix:re(0),data:re(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.prefix=t.bytes();break}case 2:{i.data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(Yi||(Yi={}));var Ar;(function(r){r.HaveBlock="HaveBlock",r.DontHaveBlock="DontHaveBlock"})(Ar||(Ar={}));var Ml;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DontHaveBlock=1]="DontHaveBlock"})(Ml||(Ml={}));(function(r){r.codec=()=>He(Ml)})(Ar||(Ar={}));var Qi;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.type!=null&&Ml[t.type]!==0&&(n.uint32(16),Ar.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:re(0),type:Ar.HaveBlock},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.type=Ar.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(Qi||(Qi={}));var ei;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),Ol.codec().encode(t.wantlist,n)),t.blocks!=null)for(let i of t.blocks)n.uint32(26),Yi.codec().encode(i,n);if(t.blockPresences!=null)for(let i of t.blockPresences)n.uint32(34),Qi.codec().encode(i,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={blocks:[],blockPresences:[],pendingBytes:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.wantlist=Ol.codec().decode(t,t.uint32(),{limits:o.limits?.wantlist});break}case 3:{if(o.limits?.blocks!=null&&i.blocks.length===o.limits.blocks)throw new Ue('Decode error - map field "blocks" had too many elements');i.blocks.push(Yi.codec().decode(t,t.uint32(),{limits:o.limits?.blocks$}));break}case 4:{if(o.limits?.blockPresences!=null&&i.blockPresences.length===o.limits.blockPresences)throw new Ue('Decode error - map field "blockPresences" had too many elements');i.blockPresences.push(Qi.codec().decode(t,t.uint32(),{limits:o.limits?.blockPresences$}));break}case 5:{i.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(ei||(ei={}));function q4(r,e){for(let[t,n]of e.wantlist.entries()){let o=r.wantlist.get(t);o!=null&&(o.priority>n.priority&&(n.priority=o.priority),n.cancel=n.cancel??o.cancel,n.wantType=n.wantType??o.wantType,n.sendDontHave=n.sendDontHave??o.sendDontHave),r.wantlist.set(t,n)}for(let[t,n]of e.blockPresences.entries())r.blockPresences.set(t,n);for(let[t,n]of e.blocks.entries())r.blocks.set(t,n);return e.full&&!r.full&&(r.full=!0),r}var Ul=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var KE=4193648,VE=KE+16;function*W4(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],o=[...r.blocks.values()],i=0,s=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},d=ei.encode(l).byteLength,{added:u,hasMore:f,newSize:h}=L0(o,l.blocks,a,e,d,HE);a+=u,d=h;let p=f;({added:u,hasMore:f,newSize:h}=L0(n,l.blockPresences,s,e,d,qE)),s+=u,d=h;let m=f;if({added:u,hasMore:f,newSize:h}=L0(t,l.wantlist.entries,i,e,d,WE),i+=u,d=h,c=!p&&!m&&!f,c||(l.wantlist.full=!1),yield ei.encode(l),c)break}}function L0(r,e,t,n,o,i){let s=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],d=i(l);if(d>VE)throw new Ul("Cannot send block as after encoding it is over the max message size");let u=o+d;if(u>n){a=!0;break}e.push(l),s++,o=u}return{hasMore:a,added:s,newSize:o}}function HE(r){return N0(3,Yi.encode(r))}function qE(r){return N0(4,Qi.encode(r))}function WE(r){return N0(1,Gi.encode(r))}function N0(r,e){let t=pe(r),n=pe(e.byteLength);return t+n+e.byteLength}var Fl=class extends Ee{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;registrarIds;metrics;sendQueue;runOnLimitedConnections;maxOutgoingMessageSize;maxIncomingMessageSize;constructor(e,t={}){super(),this.log=e.logger.forComponent("helia:bitswap:network"),this.libp2p=e.libp2p,this.routing=e.routing,this.protocols=t.protocols??[da],this.registrarIds=[],this.running=!1,this._onStream=this._onStream.bind(this),this.maxInboundStreams=t.maxInboundStreams??1024,this.maxOutboundStreams=t.maxOutboundStreams??1024,this.messageReceiveTimeout=t.messageReceiveTimeout??5e3,this.runOnLimitedConnections=t.runOnLimitedConnections??!1,this.maxIncomingMessageSize=t.maxIncomingMessageSize??4194304,this.maxOutgoingMessageSize=t.maxOutgoingMessageSize??t.maxIncomingMessageSize??4194304,this.metrics={blocksSent:e.metrics?.registerCounter("helia_bitswap_sent_blocks_total"),dataSent:e.metrics?.registerCounter("helia_bitswap_sent_data_bytes_total")},this.sendQueue=new Ut({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"}),this.sendQueue.addEventListener("error",n=>{this.log.error("error sending wantlist to peer",n.detail)})}async start(){if(this.running)return;this.running=!0,await this.libp2p.handle(this.protocols,this._onStream,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnections});let e={onConnect:t=>{this.safeDispatchEvent("peer:connected",{detail:t})},onDisconnect:t=>{this.safeDispatchEvent("peer:disconnected",{detail:t})}};this.registrarIds=[];for(let t of this.protocols)this.registrarIds.push(await this.libp2p.register(t,e));this.libp2p.getConnections().forEach(t=>{this.safeDispatchEvent("peer:connected",{detail:t.remotePeer})})}async stop(){if(this.running=!1,await this.libp2p.unhandle(this.protocols),this.registrarIds!=null){for(let e of this.registrarIds)this.libp2p.unregister(e);this.registrarIds=[]}}_onStream(e){if(!this.running)return;let{stream:t,connection:n}=e;Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",t.protocol,n.remotePeer);let o=()=>{t.status==="open"?t.abort(new Fr(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",t.status)},i=AbortSignal.timeout(this.messageReceiveTimeout);K(1/0,i),i.addEventListener("abort",o),await t.closeWrite(),await Je(t,s=>Xt(s,{maxDataLength:this.maxIncomingMessageSize}),async s=>{for await(let a of s)try{let c=ei.decode(a);this.log("incoming new bitswap %s message from %p on stream",t.protocol,n.remotePeer,t.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),i.removeEventListener("abort",o),i=AbortSignal.timeout(this.messageReceiveTimeout),K(1/0,i),i.addEventListener("abort",o)}catch(c){this.log.error("error reading incoming bitswap message from %p on stream",n.remotePeer,t.id,c),t.abort(c);break}})}).catch(o=>{this.log.error("error handling incoming stream from %p",n.remotePeer,o),t.abort(o)})}async*findProviders(e,t){t?.onProgress?.(new H("bitswap:network:find-providers",e));for await(let n of this.routing.findProviders(e,t))await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})&&(yield n)}async findAndConnect(e,t){await Yt(jt(lo(this.findProviders(e,t),t?.maxProviders??3),async n=>this.connectTo(n.id,t))).catch(n=>{this.log.error(n)})}async sendMessage(e,t,n){if(!this.running)throw new Error("network isn't running");let o=this.sendQueue.queue.find(i=>e.equals(i.options.peerId)&&i.status==="queued");if(o!=null){o.options.message=q4(o.options.message,t),await o.join({signal:n?.signal});return}await this.sendQueue.add(async i=>{let s=i?.message;if(s==null)throw new C("No message to send");this.log("sendMessage to %p",e),i?.onProgress?.(new H("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,da,i);await a.closeRead();try{await Je(W4(s,this.maxOutgoingMessageSize),c=>Qt(c),a),await a.close(i)}catch(c){i?.onProgress?.(new H("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p",e,c),a.abort(c)}this._updateSentStats(s.blocks)},{peerId:e,signal:n?.signal,message:t})}async connectTo(e,t){if(!this.running)throw new $r("Network isn't running");t?.onProgress?.(new H("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),dr(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(da))return!0;throw new Cn(`${e} did not support ${da}`)}})]);return n}_updateSentStats(e){let t=0;for(let n of e.values())t+=n.data.byteLength;this.metrics.dataSent?.increment(t),this.metrics.blocksSent?.increment(e.size)}};function ho(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function ev(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Xi(r,...e){if(!ev(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function ti(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");ho(r.outputLen),ho(r.blockLen)}function ji(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function z4(r,e){Xi(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var ri=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;var ni=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),Wr=(r,e)=>r<<32-e|r>>>e,$l=(r,e)=>r<<e|r>>>32-e>>>0,dN=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;var tv=async()=>{};async function G4(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let i=Date.now()-n;i>=0&&i<e||(await tv(),n+=i)}}function Y4(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function zr(r){return typeof r=="string"&&(r=Y4(r)),Xi(r),r}function B0(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];Xi(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}var Zi=class{clone(){return this._cloneInto()}},rv={}.toString;function Q4(r,e){if(e!==void 0&&rv.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function Ji(r){let e=n=>r().update(zr(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function oi(r=32){if(ri&&typeof ri.getRandomValues=="function")return ri.getRandomValues(new Uint8Array(r));if(ri&&typeof ri.randomBytes=="function")return ri.randomBytes(r);throw new Error("crypto.getRandomValues must be defined")}function nv(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}var Kl=(r,e,t)=>r&e^~r&t,Vl=(r,e,t)=>r&e^r&t^e&t,po=class extends Zi{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=ni(this.buffer)}update(e){ji(this);let{view:t,buffer:n,blockLen:o}=this;e=zr(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=ni(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ji(this),z4(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let u=s;u<o;u++)t[u]=0;nv(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=ni(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,d=this.get();if(l>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=s,o%t&&e.buffer.set(n),e}};var Hl=BigInt(4294967295),O0=BigInt(32);function X4(r,e=!1){return e?{h:Number(r&Hl),l:Number(r>>O0&Hl)}:{h:Number(r>>O0&Hl)|0,l:Number(r&Hl)|0}}function ov(r,e=!1){let t=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let o=0;o<r.length;o++){let{h:i,l:s}=X4(r[o],e);[t[o],n[o]]=[i,s]}return[t,n]}var iv=(r,e)=>BigInt(r>>>0)<<O0|BigInt(e>>>0),sv=(r,e,t)=>r>>>t,av=(r,e,t)=>r<<32-t|e>>>t,cv=(r,e,t)=>r>>>t|e<<32-t,lv=(r,e,t)=>r<<32-t|e>>>t,uv=(r,e,t)=>r<<64-t|e>>>t-32,dv=(r,e,t)=>r>>>t-32|e<<64-t,fv=(r,e)=>e,hv=(r,e)=>r,pv=(r,e,t)=>r<<t|e>>>32-t,mv=(r,e,t)=>e<<t|r>>>32-t,gv=(r,e,t)=>e<<t-32|r>>>64-t,yv=(r,e,t)=>r<<t-32|e>>>64-t;function wv(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var bv=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),xv=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,Ev=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),vv=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,Sv=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),Av=(r,e,t,n,o,i)=>e+t+n+o+i+(r/2**32|0)|0;var _v={fromBig:X4,split:ov,toBig:iv,shrSH:sv,shrSL:av,rotrSH:cv,rotrSL:lv,rotrBH:uv,rotrBL:dv,rotr32H:fv,rotr32L:hv,rotlSH:pv,rotlSL:mv,rotlBH:gv,rotlBL:yv,add:wv,add3L:bv,add3H:xv,add4L:Ev,add4H:vv,add5H:Av,add5L:Sv},ue=_v;var[Iv,Tv]=ue.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(r=>BigInt(r))),mo=new Uint32Array(80),go=new Uint32Array(80),M0=class extends po{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:i,Cl:s,Dh:a,Dl:c,Eh:l,El:d,Fh:u,Fl:f,Gh:h,Gl:p,Hh:m,Hl:g}=this;return[e,t,n,o,i,s,a,c,l,d,u,f,h,p,m,g]}set(e,t,n,o,i,s,a,c,l,d,u,f,h,p,m,g){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=i|0,this.Cl=s|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=d|0,this.Fh=u|0,this.Fl=f|0,this.Gh=h|0,this.Gl=p|0,this.Hh=m|0,this.Hl=g|0}process(e,t){for(let w=0;w<16;w++,t+=4)mo[w]=e.getUint32(t),go[w]=e.getUint32(t+=4);for(let w=16;w<80;w++){let x=mo[w-15]|0,T=go[w-15]|0,k=ue.rotrSH(x,T,1)^ue.rotrSH(x,T,8)^ue.shrSH(x,T,7),v=ue.rotrSL(x,T,1)^ue.rotrSL(x,T,8)^ue.shrSL(x,T,7),S=mo[w-2]|0,I=go[w-2]|0,$=ue.rotrSH(S,I,19)^ue.rotrBH(S,I,61)^ue.shrSH(S,I,6),N=ue.rotrSL(S,I,19)^ue.rotrBL(S,I,61)^ue.shrSL(S,I,6),M=ue.add4L(v,N,go[w-7],go[w-16]),B=ue.add4H(M,k,$,mo[w-7],mo[w-16]);mo[w]=B|0,go[w]=M|0}let{Ah:n,Al:o,Bh:i,Bl:s,Ch:a,Cl:c,Dh:l,Dl:d,Eh:u,El:f,Fh:h,Fl:p,Gh:m,Gl:g,Hh:y,Hl:b}=this;for(let w=0;w<80;w++){let x=ue.rotrSH(u,f,14)^ue.rotrSH(u,f,18)^ue.rotrBH(u,f,41),T=ue.rotrSL(u,f,14)^ue.rotrSL(u,f,18)^ue.rotrBL(u,f,41),k=u&h^~u&m,v=f&p^~f&g,S=ue.add5L(b,T,v,Tv[w],go[w]),I=ue.add5H(S,y,x,k,Iv[w],mo[w]),$=S|0,N=ue.rotrSH(n,o,28)^ue.rotrBH(n,o,34)^ue.rotrBH(n,o,39),M=ue.rotrSL(n,o,28)^ue.rotrBL(n,o,34)^ue.rotrBL(n,o,39),B=n&i^n&a^i&a,D=o&s^o&c^s&c;y=m|0,b=g|0,m=h|0,g=p|0,h=u|0,p=f|0,{h:u,l:f}=ue.add(l|0,d|0,I|0,$|0),l=a|0,d=c|0,a=i|0,c=s|0,i=n|0,s=o|0;let L=ue.add3L($,M,D);n=ue.add3H(L,I,N,B),o=L|0}({h:n,l:o}=ue.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:i,l:s}=ue.add(this.Bh|0,this.Bl|0,i|0,s|0),{h:a,l:c}=ue.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=ue.add(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=ue.add(this.Eh|0,this.El|0,u|0,f|0),{h,l:p}=ue.add(this.Fh|0,this.Fl|0,h|0,p|0),{h:m,l:g}=ue.add(this.Gh|0,this.Gl|0,m|0,g|0),{h:y,l:b}=ue.add(this.Hh|0,this.Hl|0,y|0,b|0),this.set(n,o,i,s,a,c,l,d,u,f,h,p,m,g,y,b)}roundClean(){mo.fill(0),go.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var yo=Ji(()=>new M0);var Wl={};Xe(Wl,{aInRange:()=>xt,abool:()=>Gr,abytes:()=>es,bitGet:()=>Lv,bitLen:()=>V0,bitMask:()=>Ea,bitSet:()=>Nv,bytesToHex:()=>Nn,bytesToNumberBE:()=>Bn,bytesToNumberLE:()=>Yr,concatBytes:()=>Mn,createHmacDrbg:()=>H0,ensureBytes:()=>Fe,equalBytes:()=>Rv,hexToBytes:()=>si,hexToNumber:()=>K0,inRange:()=>xa,isBytes:()=>wo,memoized:()=>ai,notImplemented:()=>Ov,numberToBytesBE:()=>bo,numberToBytesLE:()=>On,numberToHexUnpadded:()=>ii,numberToVarBytesBE:()=>Pv,utf8ToBytes:()=>Dv,validateObject:()=>_r});var $0=BigInt(0),ql=BigInt(1),kv=BigInt(2);function wo(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function es(r){if(!wo(r))throw new Error("Uint8Array expected")}function Gr(r,e){if(typeof e!="boolean")throw new Error(`${r} must be valid boolean, got "${e}".`)}var Cv=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Nn(r){es(r);let e="";for(let t=0;t<r.length;t++)e+=Cv[r[t]];return e}function ii(r){let e=r.toString(16);return e.length&1?`0${e}`:e}function K0(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return BigInt(r===""?"0":`0x${r}`)}var Ln={_0:48,_9:57,_A:65,_F:70,_a:97,_f:102};function j4(r){if(r>=Ln._0&&r<=Ln._9)return r-Ln._0;if(r>=Ln._A&&r<=Ln._F)return r-(Ln._A-10);if(r>=Ln._a&&r<=Ln._f)return r-(Ln._a-10)}function si(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let o=0,i=0;o<t;o++,i+=2){let s=j4(r.charCodeAt(i)),a=j4(r.charCodeAt(i+1));if(s===void 0||a===void 0){let c=r[i]+r[i+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+i)}n[o]=s*16+a}return n}function Bn(r){return K0(Nn(r))}function Yr(r){return es(r),K0(Nn(Uint8Array.from(r).reverse()))}function bo(r,e){return si(r.toString(16).padStart(e*2,"0"))}function On(r,e){return bo(r,e).reverse()}function Pv(r){return si(ii(r))}function Fe(r,e,t){let n;if(typeof e=="string")try{n=si(e)}catch(i){throw new Error(`${r} must be valid hex string, got "${e}". Cause: ${i}`)}else if(wo(e))n=Uint8Array.from(e);else throw new Error(`${r} must be hex string or Uint8Array`);let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(`${r} expected ${t} bytes, got ${o}`);return n}function Mn(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];es(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}function Rv(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}function Dv(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}var U0=r=>typeof r=="bigint"&&$0<=r;function xa(r,e,t){return U0(r)&&U0(e)&&U0(t)&&e<=r&&r<t}function xt(r,e,t,n){if(!xa(e,t,n))throw new Error(`expected valid ${r}: ${t} <= n < ${n}, got ${typeof e} ${e}`)}function V0(r){let e;for(e=0;r>$0;r>>=ql,e+=1);return e}function Lv(r,e){return r>>BigInt(e)&ql}function Nv(r,e,t){return r|(t?ql:$0)<<BigInt(e)}var Ea=r=>(kv<<BigInt(r-1))-ql,F0=r=>new Uint8Array(r),Z4=r=>Uint8Array.from(r);function H0(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=F0(r),o=F0(r),i=0,s=()=>{n.fill(1),o.fill(0),i=0},a=(...u)=>t(o,n,...u),c=(u=F0())=>{o=a(Z4([0]),u),n=a(),u.length!==0&&(o=a(Z4([1]),u),n=a())},l=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let u=0,f=[];for(;u<e;){n=a();let h=n.slice();f.push(h),u+=n.length}return Mn(...f)};return(u,f)=>{s(),c(u);let h;for(;!(h=f(l()));)c();return s(),h}}var Bv={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||wo(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function _r(r,e,t={}){let n=(o,i,s)=>{let a=Bv[i];if(typeof a!="function")throw new Error(`Invalid validator "${i}", expected function`);let c=r[o];if(!(s&&c===void 0)&&!a(c,r))throw new Error(`Invalid param ${String(o)}=${c} (${typeof c}), expected ${i}`)};for(let[o,i]of Object.entries(e))n(o,i,!1);for(let[o,i]of Object.entries(t))n(o,i,!0);return r}var Ov=()=>{throw new Error("not implemented")};function ai(r){let e=new WeakMap;return(t,...n)=>{let o=e.get(t);if(o!==void 0)return o;let i=r(t,...n);return e.set(t,i),i}}var ft=BigInt(0),qe=BigInt(1),ci=BigInt(2),Mv=BigInt(3),q0=BigInt(4),J4=BigInt(5),e6=BigInt(8),Uv=BigInt(9),Fv=BigInt(16);function Ie(r,e){let t=r%e;return t>=ft?t:e+t}function W0(r,e,t){if(t<=ft||e<ft)throw new Error("Expected power/modulo > 0");if(t===qe)return ft;let n=qe;for(;e>ft;)e&qe&&(n=n*r%t),r=r*r%t,e>>=qe;return n}function $e(r,e,t){let n=r;for(;e-- >ft;)n*=n,n%=t;return n}function zl(r,e){if(r===ft||e<=ft)throw new Error(`invert: expected positive integers, got n=${r} mod=${e}`);let t=Ie(r,e),n=e,o=ft,i=qe,s=qe,a=ft;for(;t!==ft;){let l=n/t,d=n%t,u=o-s*l,f=i-a*l;n=t,t=d,o=s,i=a,s=u,a=f}if(n!==qe)throw new Error("invert: does not exist");return Ie(o,e)}function $v(r){let e=(r-qe)/ci,t,n,o;for(t=r-qe,n=0;t%ci===ft;t/=ci,n++);for(o=ci;o<r&&W0(o,e,r)!==r-qe;o++);if(n===1){let s=(r+qe)/q0;return function(c,l){let d=c.pow(l,s);if(!c.eql(c.sqr(d),l))throw new Error("Cannot find square root");return d}}let i=(t+qe)/ci;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,d=a.pow(a.mul(a.ONE,o),t),u=a.pow(c,i),f=a.pow(c,t);for(;!a.eql(f,a.ONE);){if(a.eql(f,a.ZERO))return a.ZERO;let h=1;for(let m=a.sqr(f);h<l&&!a.eql(m,a.ONE);h++)m=a.sqr(m);let p=a.pow(d,qe<<BigInt(l-h-1));d=a.sqr(p),u=a.mul(u,p),f=a.mul(f,d),l=h}return u}}function Kv(r){if(r%q0===Mv){let e=(r+qe)/q0;return function(n,o){let i=n.pow(o,e);if(!n.eql(n.sqr(i),o))throw new Error("Cannot find square root");return i}}if(r%e6===J4){let e=(r-J4)/e6;return function(n,o){let i=n.mul(o,ci),s=n.pow(i,e),a=n.mul(o,s),c=n.mul(n.mul(a,ci),s),l=n.mul(a,n.sub(c,n.ONE));if(!n.eql(n.sqr(l),o))throw new Error("Cannot find square root");return l}}return r%Fv,$v(r)}var t6=(r,e)=>(Ie(r,e)&qe)===qe,Vv=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function z0(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=Vv.reduce((n,o)=>(n[o]="function",n),e);return _r(r,t)}function Hv(r,e,t){if(t<ft)throw new Error("Expected power > 0");if(t===ft)return r.ONE;if(t===qe)return e;let n=r.ONE,o=e;for(;t>ft;)t&qe&&(n=r.mul(n,o)),o=r.sqr(o),t>>=qe;return n}function qv(r,e){let t=new Array(e.length),n=e.reduce((i,s,a)=>r.is0(s)?i:(t[a]=i,r.mul(i,s)),r.ONE),o=r.inv(n);return e.reduceRight((i,s,a)=>r.is0(s)?i:(t[a]=r.mul(i,t[a]),r.mul(i,s)),o),t}function G0(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function xo(r,e,t=!1,n={}){if(r<=ft)throw new Error(`Expected Field ORDER > 0, got ${r}`);let{nBitLength:o,nByteLength:i}=G0(r,e);if(i>2048)throw new Error("Field lengths over 2048 bytes are not supported");let s=Kv(r),a=Object.freeze({ORDER:r,BITS:o,BYTES:i,MASK:Ea(o),ZERO:ft,ONE:qe,create:c=>Ie(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return ft<=c&&c<r},is0:c=>c===ft,isOdd:c=>(c&qe)===qe,neg:c=>Ie(-c,r),eql:(c,l)=>c===l,sqr:c=>Ie(c*c,r),add:(c,l)=>Ie(c+l,r),sub:(c,l)=>Ie(c-l,r),mul:(c,l)=>Ie(c*l,r),pow:(c,l)=>Hv(a,c,l),div:(c,l)=>Ie(c*zl(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>zl(c,r),sqrt:n.sqrt||(c=>s(a,c)),invertBatch:c=>qv(a,c),cmov:(c,l,d)=>d?l:c,toBytes:c=>t?On(c,i):bo(c,i),fromBytes:c=>{if(c.length!==i)throw new Error(`Fp.fromBytes: expected ${i}, got ${c.length}`);return t?Yr(c):Bn(c)}});return Object.freeze(a)}function r6(r){if(typeof r!="bigint")throw new Error("field order must be bigint");let e=r.toString(2).length;return Math.ceil(e/8)}function Y0(r){let e=r6(r);return e+Math.ceil(e/2)}function n6(r,e,t=!1){let n=r.length,o=r6(e),i=Y0(e);if(n<16||n<i||n>1024)throw new Error(`expected ${i}-1024 bytes of input, got ${n}`);let s=t?Bn(r):Yr(r),a=Ie(s,e-qe)+qe;return t?On(a,o):bo(a,o)}var zv=BigInt(0),Q0=BigInt(1),X0=new WeakMap,o6=new WeakMap;function Gl(r,e){let t=(i,s)=>{let a=s.negate();return i?a:s},n=i=>{if(!Number.isSafeInteger(i)||i<=0||i>e)throw new Error(`Wrong window size=${i}, should be [1..${e}]`)},o=i=>{n(i);let s=Math.ceil(e/i)+1,a=2**(i-1);return{windows:s,windowSize:a}};return{constTimeNegate:t,unsafeLadder(i,s){let a=r.ZERO,c=i;for(;s>zv;)s&Q0&&(a=a.add(c)),c=c.double(),s>>=Q0;return a},precomputeWindow(i,s){let{windows:a,windowSize:c}=o(s),l=[],d=i,u=d;for(let f=0;f<a;f++){u=d,l.push(u);for(let h=1;h<c;h++)u=u.add(d),l.push(u);d=u.double()}return l},wNAF(i,s,a){let{windows:c,windowSize:l}=o(i),d=r.ZERO,u=r.BASE,f=BigInt(2**i-1),h=2**i,p=BigInt(i);for(let m=0;m<c;m++){let g=m*l,y=Number(a&f);a>>=p,y>l&&(y-=h,a+=Q0);let b=g,w=g+Math.abs(y)-1,x=m%2!==0,T=y<0;y===0?u=u.add(t(x,s[b])):d=d.add(t(T,s[w]))}return{p:d,f:u}},wNAFCached(i,s,a){let c=o6.get(i)||1,l=X0.get(i);return l||(l=this.precomputeWindow(i,c),c!==1&&X0.set(i,a(l))),this.wNAF(c,l,s)},setWindowSize(i,s){n(s),o6.set(i,s),X0.delete(i)}}}function Yl(r,e,t,n){if(!Array.isArray(t)||!Array.isArray(n)||n.length!==t.length)throw new Error("arrays of points and scalars must have equal length");n.forEach((d,u)=>{if(!e.isValid(d))throw new Error(`wrong scalar at index ${u}`)}),t.forEach((d,u)=>{if(!(d instanceof r))throw new Error(`wrong point at index ${u}`)});let o=V0(BigInt(t.length)),i=o>12?o-3:o>4?o-2:o?2:1,s=(1<<i)-1,a=new Array(s+1).fill(r.ZERO),c=Math.floor((e.BITS-1)/i)*i,l=r.ZERO;for(let d=c;d>=0;d-=i){a.fill(r.ZERO);for(let f=0;f<n.length;f++){let h=n[f],p=Number(h>>BigInt(d)&BigInt(s));a[p]=a[p].add(t[f])}let u=r.ZERO;for(let f=a.length-1,h=r.ZERO;f>0;f--)h=h.add(a[f]),u=u.add(h);if(l=l.add(u),d!==0)for(let f=0;f<i;f++)l=l.double()}return l}function va(r){return z0(r.Fp),_r(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...G0(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Qr=BigInt(0),er=BigInt(1),Ql=BigInt(2),Gv=BigInt(8),Yv={zip215:!0};function Qv(r){let e=va(r);return _r(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function i6(r){let e=Qv(r),{Fp:t,n,prehash:o,hash:i,randomBytes:s,nByteLength:a,h:c}=e,l=Ql<<BigInt(a*8)-er,d=t.create,u=xo(e.n,e.nBitLength),f=e.uvRatio||((_,A)=>{try{return{isValid:!0,value:t.sqrt(_*t.inv(A))}}catch{return{isValid:!1,value:Qr}}}),h=e.adjustScalarBytes||(_=>_),p=e.domain||((_,A,R)=>{if(Gr("phflag",R),A.length||R)throw new Error("Contexts/pre-hash are not supported");return _});function m(_,A){xt("coordinate "+_,A,Qr,l)}function g(_){if(!(_ instanceof w))throw new Error("ExtendedPoint expected")}let y=ai((_,A)=>{let{ex:R,ey:P,ez:q}=_,z=_.is0();A==null&&(A=z?Gv:t.inv(q));let j=d(R*A),ae=d(P*A),le=d(q*A);if(z)return{x:Qr,y:er};if(le!==er)throw new Error("invZ was invalid");return{x:j,y:ae}}),b=ai(_=>{let{a:A,d:R}=e;if(_.is0())throw new Error("bad point: ZERO");let{ex:P,ey:q,ez:z,et:j}=_,ae=d(P*P),le=d(q*q),fe=d(z*z),xe=d(fe*fe),Be=d(ae*A),Oe=d(fe*d(Be+le)),Ke=d(xe+d(R*d(ae*le)));if(Oe!==Ke)throw new Error("bad point: equation left != right (1)");let Mt=d(P*q),ct=d(z*j);if(Mt!==ct)throw new Error("bad point: equation left != right (2)");return!0});class w{constructor(A,R,P,q){this.ex=A,this.ey=R,this.ez=P,this.et=q,m("x",A),m("y",R),m("z",P),m("t",q),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(A){if(A instanceof w)throw new Error("extended point not allowed");let{x:R,y:P}=A||{};return m("x",R),m("y",P),new w(R,P,er,d(R*P))}static normalizeZ(A){let R=t.invertBatch(A.map(P=>P.ez));return A.map((P,q)=>P.toAffine(R[q])).map(w.fromAffine)}static msm(A,R){return Yl(w,u,A,R)}_setWindowSize(A){k.setWindowSize(this,A)}assertValidity(){b(this)}equals(A){g(A);let{ex:R,ey:P,ez:q}=this,{ex:z,ey:j,ez:ae}=A,le=d(R*ae),fe=d(z*q),xe=d(P*ae),Be=d(j*q);return le===fe&&xe===Be}is0(){return this.equals(w.ZERO)}negate(){return new w(d(-this.ex),this.ey,this.ez,d(-this.et))}double(){let{a:A}=e,{ex:R,ey:P,ez:q}=this,z=d(R*R),j=d(P*P),ae=d(Ql*d(q*q)),le=d(A*z),fe=R+P,xe=d(d(fe*fe)-z-j),Be=le+j,Oe=Be-ae,Ke=le-j,Mt=d(xe*Oe),ct=d(Be*Ke),Gt=d(xe*Ke),Tn=d(Oe*Be);return new w(Mt,ct,Tn,Gt)}add(A){g(A);let{a:R,d:P}=e,{ex:q,ey:z,ez:j,et:ae}=this,{ex:le,ey:fe,ez:xe,et:Be}=A;if(R===BigInt(-1)){let i4=d((z-q)*(fe+le)),s4=d((z+q)*(fe-le)),Fh=d(s4-i4);if(Fh===Qr)return this.double();let a4=d(j*Ql*Be),c4=d(ae*Ql*xe),l4=c4+a4,u4=s4+i4,d4=c4-a4,Gb=d(l4*Fh),Yb=d(u4*d4),Qb=d(l4*d4),Xb=d(Fh*u4);return new w(Gb,Yb,Xb,Qb)}let Oe=d(q*le),Ke=d(z*fe),Mt=d(ae*P*Be),ct=d(j*xe),Gt=d((q+z)*(le+fe)-Oe-Ke),Tn=ct-Mt,aa=ct+Mt,ca=d(Ke-R*Oe),Hb=d(Gt*Tn),qb=d(aa*ca),Wb=d(Gt*ca),zb=d(Tn*aa);return new w(Hb,qb,zb,Wb)}subtract(A){return this.add(A.negate())}wNAF(A){return k.wNAFCached(this,A,w.normalizeZ)}multiply(A){let R=A;xt("scalar",R,er,n);let{p:P,f:q}=this.wNAF(R);return w.normalizeZ([P,q])[0]}multiplyUnsafe(A){let R=A;return xt("scalar",R,Qr,n),R===Qr?T:this.equals(T)||R===er?this:this.equals(x)?this.wNAF(R).p:k.unsafeLadder(this,R)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return k.unsafeLadder(this,n).is0()}toAffine(A){return y(this,A)}clearCofactor(){let{h:A}=e;return A===er?this:this.multiplyUnsafe(A)}static fromHex(A,R=!1){let{d:P,a:q}=e,z=t.BYTES;A=Fe("pointHex",A,z),Gr("zip215",R);let j=A.slice(),ae=A[z-1];j[z-1]=ae&-129;let le=Yr(j),fe=R?l:t.ORDER;xt("pointHex.y",le,Qr,fe);let xe=d(le*le),Be=d(xe-er),Oe=d(P*xe-q),{isValid:Ke,value:Mt}=f(Be,Oe);if(!Ke)throw new Error("Point.fromHex: invalid y coordinate");let ct=(Mt&er)===er,Gt=(ae&128)!==0;if(!R&&Mt===Qr&&Gt)throw new Error("Point.fromHex: x=0 and x_0=1");return Gt!==ct&&(Mt=d(-Mt)),w.fromAffine({x:Mt,y:le})}static fromPrivateKey(A){return I(A).point}toRawBytes(){let{x:A,y:R}=this.toAffine(),P=On(R,t.BYTES);return P[P.length-1]|=A&er?128:0,P}toHex(){return Nn(this.toRawBytes())}}w.BASE=new w(e.Gx,e.Gy,er,d(e.Gx*e.Gy)),w.ZERO=new w(Qr,er,er,Qr);let{BASE:x,ZERO:T}=w,k=Gl(w,a*8);function v(_){return Ie(_,n)}function S(_){return v(Yr(_))}function I(_){let A=a;_=Fe("private key",_,A);let R=Fe("hashed private key",i(_),2*A),P=h(R.slice(0,A)),q=R.slice(A,2*A),z=S(P),j=x.multiply(z),ae=j.toRawBytes();return{head:P,prefix:q,scalar:z,point:j,pointBytes:ae}}function $(_){return I(_).pointBytes}function N(_=new Uint8Array,...A){let R=Mn(...A);return S(i(p(R,Fe("context",_),!!o)))}function M(_,A,R={}){_=Fe("message",_),o&&(_=o(_));let{prefix:P,scalar:q,pointBytes:z}=I(A),j=N(R.context,P,_),ae=x.multiply(j).toRawBytes(),le=N(R.context,ae,z,_),fe=v(j+le*q);xt("signature.s",fe,Qr,n);let xe=Mn(ae,On(fe,t.BYTES));return Fe("result",xe,a*2)}let B=Yv;function D(_,A,R,P=B){let{context:q,zip215:z}=P,j=t.BYTES;_=Fe("signature",_,2*j),A=Fe("message",A),z!==void 0&&Gr("zip215",z),o&&(A=o(A));let ae=Yr(_.slice(j,2*j)),le,fe,xe;try{le=w.fromHex(R,z),fe=w.fromHex(_.slice(0,j),z),xe=x.multiplyUnsafe(ae)}catch{return!1}if(!z&&le.isSmallOrder())return!1;let Be=N(q,fe.toRawBytes(),le.toRawBytes(),A);return fe.add(le.multiplyUnsafe(Be)).subtract(xe).clearCofactor().equals(w.ZERO)}return x._setWindowSize(8),{CURVE:e,getPublicKey:$,sign:M,verify:D,ExtendedPoint:w,utils:{getExtendedPublicKey:I,randomPrivateKey:()=>s(t.BYTES),precompute(_=8,A=w.BASE){return A._setWindowSize(_),A.multiply(BigInt(3)),A}}}}var ts=BigInt(0),j0=BigInt(1);function Xv(r){return _r(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function s6(r){let e=Xv(r),{P:t}=e,n=b=>Ie(b,t),o=e.montgomeryBits,i=Math.ceil(o/8),s=e.nByteLength,a=e.adjustScalarBytes||(b=>b),c=e.powPminus2||(b=>W0(b,t-BigInt(2),t));function l(b,w,x){let T=n(b*(w-x));return w=n(w-T),x=n(x+T),[w,x]}let d=(e.a-BigInt(2))/BigInt(4);function u(b,w){xt("u",b,ts,t),xt("scalar",w,ts,t);let x=w,T=b,k=j0,v=ts,S=b,I=j0,$=ts,N;for(let B=BigInt(o-1);B>=ts;B--){let D=x>>B&j0;$^=D,N=l($,k,S),k=N[0],S=N[1],N=l($,v,I),v=N[0],I=N[1],$=D;let L=k+v,_=n(L*L),A=k-v,R=n(A*A),P=_-R,q=S+I,z=S-I,j=n(z*L),ae=n(q*A),le=j+ae,fe=j-ae;S=n(le*le),I=n(T*n(fe*fe)),k=n(_*R),v=n(P*(_+n(d*P)))}N=l($,k,S),k=N[0],S=N[1],N=l($,v,I),v=N[0],I=N[1];let M=c(v);return n(k*M)}function f(b){return On(n(b),i)}function h(b){let w=Fe("u coordinate",b,i);return s===32&&(w[31]&=127),Yr(w)}function p(b){let w=Fe("scalar",b),x=w.length;if(x!==i&&x!==s)throw new Error(`Expected ${i} or ${s} bytes, got ${x}`);return Yr(a(w))}function m(b,w){let x=h(w),T=p(b),k=u(x,T);if(k===ts)throw new Error("Invalid private or public key received");return f(k)}let g=f(e.Gu);function y(b){return m(b,g)}return{scalarMult:m,scalarMultBase:y,getSharedSecret:(b,w)=>m(b,w),getPublicKey:b=>y(b),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:g}}var Sa=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),a6=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),UN=BigInt(0),jv=BigInt(1),c6=BigInt(2),Zv=BigInt(3),Jv=BigInt(5),eS=BigInt(8);function l6(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),i=Sa,a=r*r%i*r%i,c=$e(a,c6,i)*a%i,l=$e(c,jv,i)*r%i,d=$e(l,Jv,i)*l%i,u=$e(d,e,i)*d%i,f=$e(u,t,i)*u%i,h=$e(f,n,i)*f%i,p=$e(h,o,i)*h%i,m=$e(p,o,i)*h%i,g=$e(m,e,i)*d%i;return{pow_p_5_8:$e(g,c6,i)*r%i,b2:a}}function u6(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function tS(r,e){let t=Sa,n=Ie(e*e*e,t),o=Ie(n*n*e,t),i=l6(r*o).pow_p_5_8,s=Ie(r*n*i,t),a=Ie(e*s*s,t),c=s,l=Ie(s*a6,t),d=a===r,u=a===Ie(-r,t),f=a===Ie(-r*a6,t);return d&&(s=c),(u||f)&&(s=l),t6(s,t)&&(s=Ie(-s,t)),{isValid:d||u,value:s}}var rS=xo(Sa,void 0,!0),nS={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:rS,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:eS,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:yo,randomBytes:oi,adjustScalarBytes:u6,uvRatio:tS},Aa=i6(nS);var _a=s6({P:Sa,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=Sa,{pow_p_5_8:t,b2:n}=l6(r);return Ie($e(t,Zv,e)*n,e)},adjustScalarBytes:u6,randomBytes:oi});var rs=32,mn=64,Z0=32;function d6(){let r=Aa.utils.randomPrivateKey(),e=Aa.getPublicKey(r);return{privateKey:oS(r,e),publicKey:e}}function f6(r,e){let t=r.subarray(0,Z0);return Aa.sign(e instanceof Uint8Array?e:e.subarray(),t)}function h6(r,e,t){return Aa.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function oS(r,e){let t=new Uint8Array(mn);for(let n=0;n<Z0;n++)t[n]=r[n],t[Z0+n]=e[n];return t}var Ia=class{type="Ed25519";raw;constructor(e){this.raw=os(e,rs)}toMultihash(){return Jt.digest(Lt(this))}toCID(){return Z.createV1(114,this.toMultihash())}toString(){return Se.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}verify(e,t){return h6(this.raw,t,e)}},ns=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=os(e,mn),this.publicKey=new Ia(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}sign(e){return f6(this.raw,e)}};function J0(r){if(r.length>mn){r=os(r,mn+rs);let n=r.subarray(0,mn),o=r.subarray(mn,r.length);return new ns(n,o)}r=os(r,mn);let e=r.subarray(0,mn),t=r.subarray(rs);return new ns(e,t)}function e2(r){return r=os(r,rs),new Ia(r)}async function m6(){let{privateKey:r,publicKey:e}=d6();return new ns(r,e)}function os(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new C(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var Qe;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1"})(Qe||(Qe={}));var t2;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1"})(t2||(t2={}));(function(r){r.codec=()=>He(t2)})(Qe||(Qe={}));var gn;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Qe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.Type=Qe.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(gn||(gn={}));var Ta;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Qe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.Type=Qe.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(Ta||(Ta={}));var Ua={};Xe(Ua,{MAX_RSA_KEY_SIZE:()=>Fu,generateRSAKeyPair:()=>f2,jwkToJWKKeyPair:()=>d8,jwkToPkcs1:()=>bS,jwkToPkix:()=>u2,jwkToRSAPrivateKey:()=>u8,pkcs1ToJwk:()=>c8,pkcs1ToRSAPrivateKey:()=>$u,pkixToJwk:()=>l8,pkixToRSAPublicKey:()=>d2});var iS=new Uint32Array([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]),Eo=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),vo=new Uint32Array(64),r2=class extends po{constructor(){super(64,32,8,!1),this.A=Eo[0]|0,this.B=Eo[1]|0,this.C=Eo[2]|0,this.D=Eo[3]|0,this.E=Eo[4]|0,this.F=Eo[5]|0,this.G=Eo[6]|0,this.H=Eo[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let u=0;u<16;u++,t+=4)vo[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let f=vo[u-15],h=vo[u-2],p=Wr(f,7)^Wr(f,18)^f>>>3,m=Wr(h,17)^Wr(h,19)^h>>>10;vo[u]=m+vo[u-7]+p+vo[u-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){let f=Wr(a,6)^Wr(a,11)^Wr(a,25),h=d+f+Kl(a,c,l)+iS[u]+vo[u]|0,m=(Wr(n,2)^Wr(n,13)^Wr(n,22))+Vl(n,o,i)|0;d=l,l=c,c=a,a=s+h|0,s=i,i=o,o=n,n=h+m|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(n,o,i,s,a,c,l,d)}roundClean(){vo.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Ir=Ji(()=>new r2);var me=kt(y6());function li(r,e){let t=0;if(r.length===1)return r[0];for(let n=r.length-1;n>=0;n--)t+=r[r.length-1-n]*Math.pow(2,e*n);return t}function So(r,e,t=-1){let n=t,o=r,i=0,s=Math.pow(2,e);for(let a=1;a<8;a++){if(r<s){let c;if(n<0)c=new ArrayBuffer(a),i=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),i=n}let l=new Uint8Array(c);for(let d=a-1;d>=0;d--){let u=Math.pow(2,d*e);l[i-d-1]=Math.floor(o/u),o-=l[i-d-1]*u}return c}s*=Math.pow(2,e)}return new ArrayBuffer(0)}function Zl(...r){let e=0,t=0;for(let i of r)e+=i.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let i of r)o.set(i,t),t+=i.length;return o}function o2(){let r=new Uint8Array(this.valueHex);if(this.valueHex.byteLength>=2){let a=r[0]===255&&r[1]&128,c=r[0]===0&&(r[1]&128)===0;(a||c)&&this.warnings.push("Needlessly long format")}let e=new ArrayBuffer(this.valueHex.byteLength),t=new Uint8Array(e);for(let a=0;a<this.valueHex.byteLength;a++)t[a]=0;t[0]=r[0]&128;let n=li(t,8),o=new ArrayBuffer(this.valueHex.byteLength),i=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)i[a]=r[a];return i[0]&=127,li(i,8)-n}function w6(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let s=t-e,a=So(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=So(e,8,n),i=new Uint8Array(o);if(i[0]&128){let s=o.slice(0),a=new Uint8Array(s);o=new ArrayBuffer(o.byteLength+1),i=new Uint8Array(o);for(let c=0;c<s.byteLength;c++)i[c+1]=a[c];i[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function b6(r,e){if(r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<t.length;o++)if(t[o]!==n[o])return!1;return!0}function tr(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let s=0;s<n;s++)o[s]="0";return o.join("").concat(t)}var oB=Math.log(2);function Jl(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function i2(r){let e=0,t=0;for(let o=0;o<r.length;o++){let i=r[o];e+=i.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let i=r[o];n.set(new Uint8Array(i),t),t+=i.byteLength}return n.buffer}function Hn(r,e,t,n){return e instanceof Uint8Array?e.byteLength?t<0?(r.error="Wrong parameter: inputOffset less than zero",!1):n<0?(r.error="Wrong parameter: inputLength less than zero",!1):e.byteLength-t-n<0?(r.error="End of input reached before message was fully decoded (inconsistent offset and length values)",!1):!0:(r.error="Wrong parameter: inputBuffer has zero length",!1):(r.error="Wrong parameter: inputBuffer must be 'Uint8Array'",!1)}var Ca=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return i2(this.items)}},ka=[new Uint8Array([1])],x6="0123456789";var as="",Xr=new ArrayBuffer(0),s2=new Uint8Array(0),Pa="EndOfContent",v6="OCTET STRING",S6="BIT STRING";function qn(r){var e;return e=class extends r{constructor(...n){var o;super(...n);let i=n[0]||{};this.isHexOnly=(o=i.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=i.valueHex?me.BufferSourceConverter.toUint8Array(i.valueHex):s2}get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}fromBER(n,o,i){let s=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!Hn(this,s,o,i))return-1;let a=o+i;return this.valueHexView=s.subarray(o,a),this.valueHexView.length?(this.blockLength=i,a):(this.warnings.push("Zero buffer length"),o)}toBER(n=!1){return this.isHexOnly?n?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.byteLength===this.valueHexView.buffer.byteLength?this.valueHexView.buffer:this.valueHexView.slice().buffer:(this.error="Flag 'isHexOnly' is not set, abort",Xr)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:me.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var Fn=class{constructor({blockLength:e=0,error:t=as,warnings:n=[],valueBeforeDecode:o=s2}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=me.BufferSourceConverter.toUint8Array(o)}static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:me.Convert.ToHex(this.valueBeforeDecodeView)}}};Fn.NAME="baseBlock";var Nt=class extends Fn{fromBER(e,t,n){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}toBER(e,t){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}};Nt.NAME="valueBlock";var eu=class extends qn(Fn){constructor({idBlock:e={}}={}){var t,n,o,i;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?me.BufferSourceConverter.toUint8Array(e.valueHex):s2,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(i=e.isConstructed)!==null&&i!==void 0?i:!1):(this.tagClass=-1,this.tagNumber=-1,this.isConstructed=!1)}toBER(e=!1){let t=0;switch(this.tagClass){case 1:t|=0;break;case 2:t|=64;break;case 3:t|=128;break;case 4:t|=192;break;default:return this.error="Unknown tag class",Xr}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let i=this.tagNumber;i&=31,t|=i,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=So(this.tagNumber,7),i=new Uint8Array(o),s=o.byteLength,a=new Uint8Array(s+1);if(a[0]=t|31,!e){for(let c=0;c<s-1;c++)a[c+1]=i[c]|128;a[s]=i[s-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let i=0;i<o.length-1;i++)n[i+1]=o[i]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=me.BufferSourceConverter.toUint8Array(e);if(!Hn(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;switch(i[0]&192){case 0:this.tagClass=1;break;case 64:this.tagClass=2;break;case 128:this.tagClass=3;break;case 192:this.tagClass=4;break;default:return this.error="Unknown tag class",-1}this.isConstructed=(i[0]&32)===32,this.isHexOnly=!1;let a=i[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),d=255;for(;i[c]&128;){if(l[c-1]=i[c]&127,c++,c>=i.length)return this.error="End of input reached before message was fully decoded",-1;if(c===d){d+=255;let f=new Uint8Array(d);for(let h=0;h<l.length;h++)f[h]=l[h];l=this.valueHexView=new Uint8Array(d)}}this.blockLength=c+1,l[c-1]=i[c]&127;let u=new Uint8Array(c);for(let f=0;f<c;f++)u[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(u),this.blockLength<=9?this.tagNumber=li(l,7):(this.isHexOnly=!0,this.warnings.push("Tag too long, represented as hex-coded"))}if(this.tagClass===1&&this.isConstructed)switch(this.tagNumber){case 1:case 2:case 5:case 6:case 9:case 13:case 14:case 23:case 24:case 31:case 32:case 33:case 34:return this.error="Constructed encoding used for primitive type",-1}return t+this.blockLength}toJSON(){return{...super.toJSON(),tagClass:this.tagClass,tagNumber:this.tagNumber,isConstructed:this.isConstructed}}};eu.NAME="identificationBlock";var tu=class extends Fn{constructor({lenBlock:e={}}={}){var t,n,o;super(),this.isIndefiniteForm=(t=e.isIndefiniteForm)!==null&&t!==void 0?t:!1,this.longFormUsed=(n=e.longFormUsed)!==null&&n!==void 0?n:!1,this.length=(o=e.length)!==null&&o!==void 0?o:0}fromBER(e,t,n){let o=me.BufferSourceConverter.toUint8Array(e);if(!Hn(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;if(i[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=i[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(i[0]&128),this.longFormUsed===!1)return this.length=i[0],this.blockLength=1,t+this.blockLength;let s=i[0]&127;if(s>8)return this.error="Too big integer",-1;if(s+1>i.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+s);return c[s-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=li(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=s+1,t+this.blockLength}toBER(e=!1){let t,n;if(this.length>127&&(this.longFormUsed=!0),this.isIndefiniteForm)return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=128),t;if(this.longFormUsed){let o=So(this.length,8);if(o.byteLength>127)return this.error="Too big length",Xr;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let i=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let s=0;s<o.byteLength;s++)n[s+1]=i[s];return t}return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=this.length),t}toJSON(){return{...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,longFormUsed:this.longFormUsed,length:this.length}}};tu.NAME="lengthBlock";var G={},Et=class extends Fn{constructor({name:e=as,optional:t=!1,primitiveSchema:n,...o}={},i){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new eu(o),this.lenBlock=new tu(o),this.valueBlock=i?new i(o):new Nt(o)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}toBER(e,t){let n=t||new Ca;t||A6(this);let o=this.idBlock.toBER(e);if(n.write(o),this.lenBlock.isIndefiniteForm)n.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,n),n.write(new ArrayBuffer(2));else{let i=this.valueBlock.toBER(e);this.lenBlock.length=i.byteLength;let s=this.lenBlock.toBER(e);n.write(s),n.write(i)}return t?Xr:n.final()}toJSON(){let e={...super.toJSON(),idBlock:this.idBlock.toJSON(),lenBlock:this.lenBlock.toJSON(),valueBlock:this.valueBlock.toJSON(),name:this.name,optional:this.optional};return this.primitiveSchema&&(e.primitiveSchema=this.primitiveSchema.toJSON()),e}toString(e="ascii"){return e==="ascii"?this.onAsciiEncoding():me.Convert.ToHex(this.toBER())}onAsciiEncoding(){return`${this.constructor.NAME} : ${me.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return b6(t,n)}};Et.NAME="BaseBlock";function A6(r){if(r instanceof G.Constructed)for(let e of r.valueBlock.value)A6(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var ru=class extends Et{constructor({value:e=as,...t}={},n){super(t,n),e&&this.fromString(e)}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.fromBuffer(this.valueBlock.valueHexView),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};ru.NAME="BaseStringBlock";var nu=class extends qn(Nt){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};nu.NAME="PrimitiveValueBlock";var _6,ou=class extends Et{constructor(e={}){super(e,nu),this.idBlock.isConstructed=!1}};_6=ou;G.Primitive=_6;ou.NAME="PRIMITIVE";function pS(r,e){if(r instanceof e)return r;let t=new e;return t.idBlock=r.idBlock,t.lenBlock=r.lenBlock,t.warnings=r.warnings,t.valueBeforeDecodeView=r.valueBeforeDecodeView,t}function Mu(r,e=0,t=r.length){let n=e,o=new Et({},Nt),i=new Fn;if(!Hn(i,r,e,t))return o.error=i.error,{offset:-1,result:o};if(!r.subarray(e,e+t).length)return o.error="Zero buffer length",{offset:-1,result:o};let a=o.idBlock.fromBER(r,e,t);if(o.idBlock.warnings.length&&o.warnings.concat(o.idBlock.warnings),a===-1)return o.error=o.idBlock.error,{offset:-1,result:o};if(e=a,t-=o.idBlock.blockLength,a=o.lenBlock.fromBER(r,e,t),o.lenBlock.warnings.length&&o.warnings.concat(o.lenBlock.warnings),a===-1)return o.error=o.lenBlock.error,{offset:-1,result:o};if(e=a,t-=o.lenBlock.blockLength,!o.idBlock.isConstructed&&o.lenBlock.isIndefiniteForm)return o.error="Indefinite length form used for primitive encoding form",{offset:-1,result:o};let c=Et;switch(o.idBlock.tagClass){case 1:if(o.idBlock.tagNumber>=37&&o.idBlock.isHexOnly===!1)return o.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:o};switch(o.idBlock.tagNumber){case 0:if(o.idBlock.isConstructed&&o.lenBlock.length>0)return o.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:o};c=G.EndOfContent;break;case 1:c=G.Boolean;break;case 2:c=G.Integer;break;case 3:c=G.BitString;break;case 4:c=G.OctetString;break;case 5:c=G.Null;break;case 6:c=G.ObjectIdentifier;break;case 10:c=G.Enumerated;break;case 12:c=G.Utf8String;break;case 13:c=G.RelativeObjectIdentifier;break;case 14:c=G.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=G.Sequence;break;case 17:c=G.Set;break;case 18:c=G.NumericString;break;case 19:c=G.PrintableString;break;case 20:c=G.TeletexString;break;case 21:c=G.VideotexString;break;case 22:c=G.IA5String;break;case 23:c=G.UTCTime;break;case 24:c=G.GeneralizedTime;break;case 25:c=G.GraphicString;break;case 26:c=G.VisibleString;break;case 27:c=G.GeneralString;break;case 28:c=G.UniversalString;break;case 29:c=G.CharacterString;break;case 30:c=G.BmpString;break;case 31:c=G.DATE;break;case 32:c=G.TimeOfDay;break;case 33:c=G.DateTime;break;case 34:c=G.Duration;break;default:{let l=o.idBlock.isConstructed?new G.Constructed:new G.Primitive;l.idBlock=o.idBlock,l.lenBlock=o.lenBlock,l.warnings=o.warnings,o=l}}break;case 2:case 3:case 4:default:c=o.idBlock.isConstructed?G.Constructed:G.Primitive}return o=pS(o,c),a=o.fromBER(r,e,o.lenBlock.isIndefiniteForm?t:o.lenBlock.length),o.valueBeforeDecodeView=r.subarray(n,n+o.blockLength),{offset:a,result:o}}function ui(r){if(!r.byteLength){let e=new Et({},Nt);return e.error="Input buffer has zero length",{offset:-1,result:e}}return Mu(me.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function mS(r,e){return r?1:e}var yn=class extends Nt{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=me.BufferSourceConverter.toUint8Array(e);if(!Hn(this,o,t,n))return-1;if(this.valueBeforeDecodeView=o.subarray(t,t+n),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),t;let i=t;for(;mS(this.isIndefiniteForm,n)>0;){let s=Mu(o,i,n);if(s.offset===-1)return this.error=s.result.error,this.warnings.concat(s.result.warnings),-1;if(i=s.offset,this.blockLength+=s.result.blockLength,n-=s.result.blockLength,this.value.push(s.result),this.isIndefiniteForm&&s.result.constructor.NAME===Pa)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Pa?this.value.pop():this.warnings.push("No EndOfContent block encoded")),i}toBER(e,t){let n=t||new Ca;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?Xr:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};yn.NAME="ConstructedValueBlock";var I6,Ao=class extends Et{constructor(e={}){super(e,yn),this.idBlock.isConstructed=!0}fromBER(e,t,n){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){let e=[];for(let n of this.valueBlock.value)e.push(n.toString("ascii").split(`
2
+ "use strict";var Helia=(()=>{var rx=Object.create;var sl=Object.defineProperty;var nx=Object.getOwnPropertyDescriptor;var ox=Object.getOwnPropertyNames;var ix=Object.getPrototypeOf,sx=Object.prototype.hasOwnProperty;var ct=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Xe=(r,e)=>{for(var t in e)sl(r,t,{get:e[t],enumerable:!0})},p4=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ox(e))!sx.call(r,o)&&o!==t&&sl(r,o,{get:()=>e[o],enumerable:!(n=nx(e,o))||n.enumerable});return r};var fr=(r,e,t)=>(t=r!=null?rx(ix(r)):{},p4(e||!r||!r.__esModule?sl(t,"default",{value:r,enumerable:!0}):t,r)),ax=r=>p4(sl({},"__esModule",{value:!0}),r);var b6=ct(ls=>{"use strict";var dS="[object ArrayBuffer]",$n=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===dS}static toArrayBuffer(e){return this.isArrayBuffer(e)?e:e.byteLength===e.buffer.byteLength||e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:this.toUint8Array(e.buffer).slice(e.byteOffset,e.byteOffset+e.byteLength).buffer}static toUint8Array(e){return this.toView(e,Uint8Array)}static toView(e,t){if(e.constructor===t)return e;if(this.isArrayBuffer(e))return new t(e);if(this.isArrayBufferView(e))return new t(e.buffer,e.byteOffset,e.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}static isBufferSource(e){return this.isArrayBufferView(e)||this.isArrayBuffer(e)}static isArrayBufferView(e){return ArrayBuffer.isView(e)||e&&this.isArrayBuffer(e.buffer)}static isEqual(e,t){let n=r.toUint8Array(e),o=r.toUint8Array(t);if(n.length!==o.byteLength)return!1;for(let i=0;i<n.length;i++)if(n[i]!==o[i])return!1;return!0}static concat(...e){let t;Array.isArray(e[0])&&!(e[1]instanceof Function)||Array.isArray(e[0])&&e[1]instanceof Function?t=e[0]:e[e.length-1]instanceof Function?t=e.slice(0,e.length-1):t=e;let n=0;for(let s of t)n+=s.byteLength;let o=new Uint8Array(n),i=0;for(let s of t){let a=this.toUint8Array(s);o.set(a,i),i+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},h2="string",fS=/^[0-9a-f]+$/i,hS=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,pS=/^[a-zA-Z0-9-_]+$/,jl=class{static fromString(e){let t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let o=0;o<t.length;o++)n[o]=t.charCodeAt(o);return n.buffer}static toString(e){let t=$n.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return decodeURIComponent(escape(n))}},kr=class{static toString(e,t=!1){let n=$n.toArrayBuffer(e),o=new DataView(n),i="";for(let s=0;s<n.byteLength;s+=2){let a=o.getUint16(s,t);i+=String.fromCharCode(a)}return i}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let i=0;i<e.length;i++)o.setUint16(i*2,e.charCodeAt(i),t);return n}},Zl=class r{static isHex(e){return typeof e===h2&&fS.test(e)}static isBase64(e){return typeof e===h2&&hS.test(e)}static isBase64Url(e){return typeof e===h2&&pS.test(e)}static ToString(e,t="utf8"){let n=$n.toUint8Array(e);switch(t.toLowerCase()){case"utf8":return this.ToUtf8String(n);case"binary":return this.ToBinary(n);case"hex":return this.ToHex(n);case"base64":return this.ToBase64(n);case"base64url":return this.ToBase64Url(n);case"utf16le":return kr.toString(n,!0);case"utf16":case"utf16be":return kr.toString(n);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromString(e,t="utf8"){if(!e)return new ArrayBuffer(0);switch(t.toLowerCase()){case"utf8":return this.FromUtf8String(e);case"binary":return this.FromBinary(e);case"hex":return this.FromHex(e);case"base64":return this.FromBase64(e);case"base64url":return this.FromBase64Url(e);case"utf16le":return kr.fromString(e,!0);case"utf16":case"utf16be":return kr.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=$n.toUint8Array(e);if(typeof btoa<"u"){let n=this.ToString(t,"binary");return btoa(n)}else return Buffer.from(t).toString("base64")}static FromBase64(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64(t))throw new TypeError("Argument 'base64Text' is not Base64 encoded");return typeof atob<"u"?this.FromBinary(atob(t)):new Uint8Array(Buffer.from(t,"base64")).buffer}static FromBase64Url(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64Url(t))throw new TypeError("Argument 'base64url' is not Base64Url encoded");return this.FromBase64(this.Base64Padding(t.replace(/\-/g,"+").replace(/\_/g,"/")))}static ToBase64Url(e){return this.ToBase64(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}static FromUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.FromBinary(e);case"utf8":return jl.fromString(e);case"utf16":case"utf16be":return kr.fromString(e);case"utf16le":case"usc2":return kr.fromString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.ToBinary(e);case"utf8":return jl.toString(e);case"utf16":case"utf16be":return kr.toString(e);case"utf16le":case"usc2":return kr.toString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromBinary(e){let t=e.length,n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);return n.buffer}static ToBinary(e){let t=$n.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=$n.toUint8Array(e),n="",o=t.length;for(let i=0;i<o;i++){let s=t[i];s<16&&(n+="0"),n+=s.toString(16)}return n}static FromHex(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isHex(t))throw new TypeError("Argument 'hexString' is not HEX encoded");t.length%2&&(t=`0${t}`);let n=new Uint8Array(t.length/2);for(let o=0;o<t.length;o=o+2){let i=t.slice(o,o+2);n[o/2]=parseInt(i,16)}return n.buffer}static ToUtf16String(e,t=!1){return kr.toString(e,t)}static FromUtf16String(e,t=!1){return kr.fromString(e,t)}static Base64Padding(e){let t=4-e.length%4;if(t<4)for(let n=0;n<t;n++)e+="=";return e}static formatString(e){return e?.replace(/[\n\r\t ]/g,"")||""}};Zl.DEFAULT_UTF8_ENCODING="utf8";function mS(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let i in o)t[i]=o[i]}return t}function gS(...r){let e=r.map(o=>o.byteLength).reduce((o,i)=>o+i),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let i of o)t[n++]=i}),t.buffer}function yS(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<r.byteLength;o++)if(t[o]!==n[o])return!1;return!0}ls.BufferSourceConverter=$n;ls.Convert=Zl;ls.assign=mS;ls.combine=gS;ls.isEqual=yS});var U8=ct((Ja,Gu)=>{(function(r,e){"use strict";var t={version:"3.0.0",x86:{},x64:{},inputValidation:!0};function n(h){if(!Array.isArray(h)&&!ArrayBuffer.isView(h))return!1;for(var p=0;p<h.length;p++)if(!Number.isInteger(h[p])||h[p]<0||h[p]>255)return!1;return!0}function o(h,p){return(h&65535)*p+(((h>>>16)*p&65535)<<16)}function i(h,p){return h<<p|h>>>32-p}function s(h){return h^=h>>>16,h=o(h,2246822507),h^=h>>>13,h=o(h,3266489909),h^=h>>>16,h}function a(h,p){h=[h[0]>>>16,h[0]&65535,h[1]>>>16,h[1]&65535],p=[p[0]>>>16,p[0]&65535,p[1]>>>16,p[1]&65535];var m=[0,0,0,0];return m[3]+=h[3]+p[3],m[2]+=m[3]>>>16,m[3]&=65535,m[2]+=h[2]+p[2],m[1]+=m[2]>>>16,m[2]&=65535,m[1]+=h[1]+p[1],m[0]+=m[1]>>>16,m[1]&=65535,m[0]+=h[0]+p[0],m[0]&=65535,[m[0]<<16|m[1],m[2]<<16|m[3]]}function c(h,p){h=[h[0]>>>16,h[0]&65535,h[1]>>>16,h[1]&65535],p=[p[0]>>>16,p[0]&65535,p[1]>>>16,p[1]&65535];var m=[0,0,0,0];return m[3]+=h[3]*p[3],m[2]+=m[3]>>>16,m[3]&=65535,m[2]+=h[2]*p[3],m[1]+=m[2]>>>16,m[2]&=65535,m[2]+=h[3]*p[2],m[1]+=m[2]>>>16,m[2]&=65535,m[1]+=h[1]*p[3],m[0]+=m[1]>>>16,m[1]&=65535,m[1]+=h[2]*p[2],m[0]+=m[1]>>>16,m[1]&=65535,m[1]+=h[3]*p[1],m[0]+=m[1]>>>16,m[1]&=65535,m[0]+=h[0]*p[3]+h[1]*p[2]+h[2]*p[1]+h[3]*p[0],m[0]&=65535,[m[0]<<16|m[1],m[2]<<16|m[3]]}function l(h,p){return p%=64,p===32?[h[1],h[0]]:p<32?[h[0]<<p|h[1]>>>32-p,h[1]<<p|h[0]>>>32-p]:(p-=32,[h[1]<<p|h[0]>>>32-p,h[0]<<p|h[1]>>>32-p])}function d(h,p){return p%=64,p===0?h:p<32?[h[0]<<p|h[1]>>>32-p,h[1]<<p]:[h[1]<<p-32,0]}function u(h,p){return[h[0]^p[0],h[1]^p[1]]}function f(h){return h=u(h,[0,h[0]>>>1]),h=c(h,[4283543511,3981806797]),h=u(h,[0,h[0]>>>1]),h=c(h,[3301882366,444984403]),h=u(h,[0,h[0]>>>1]),h}t.x86.hash32=function(h,p){if(t.inputValidation&&!n(h))return e;p=p||0;for(var m=h.length%4,g=h.length-m,y=p,b=0,w=3432918353,x=461845907,T=0;T<g;T=T+4)b=h[T]|h[T+1]<<8|h[T+2]<<16|h[T+3]<<24,b=o(b,w),b=i(b,15),b=o(b,x),y^=b,y=i(y,13),y=o(y,5)+3864292196;switch(b=0,m){case 3:b^=h[T+2]<<16;case 2:b^=h[T+1]<<8;case 1:b^=h[T],b=o(b,w),b=i(b,15),b=o(b,x),y^=b}return y^=h.length,y=s(y),y>>>0},t.x86.hash128=function(h,p){if(t.inputValidation&&!n(h))return e;p=p||0;for(var m=h.length%16,g=h.length-m,y=p,b=p,w=p,x=p,T=0,k=0,v=0,S=0,_=597399067,F=2869860233,N=951274213,O=2716044179,B=0;B<g;B=B+16)T=h[B]|h[B+1]<<8|h[B+2]<<16|h[B+3]<<24,k=h[B+4]|h[B+5]<<8|h[B+6]<<16|h[B+7]<<24,v=h[B+8]|h[B+9]<<8|h[B+10]<<16|h[B+11]<<24,S=h[B+12]|h[B+13]<<8|h[B+14]<<16|h[B+15]<<24,T=o(T,_),T=i(T,15),T=o(T,F),y^=T,y=i(y,19),y+=b,y=o(y,5)+1444728091,k=o(k,F),k=i(k,16),k=o(k,N),b^=k,b=i(b,17),b+=w,b=o(b,5)+197830471,v=o(v,N),v=i(v,17),v=o(v,O),w^=v,w=i(w,15),w+=x,w=o(w,5)+2530024501,S=o(S,O),S=i(S,18),S=o(S,_),x^=S,x=i(x,13),x+=y,x=o(x,5)+850148119;switch(T=0,k=0,v=0,S=0,m){case 15:S^=h[B+14]<<16;case 14:S^=h[B+13]<<8;case 13:S^=h[B+12],S=o(S,O),S=i(S,18),S=o(S,_),x^=S;case 12:v^=h[B+11]<<24;case 11:v^=h[B+10]<<16;case 10:v^=h[B+9]<<8;case 9:v^=h[B+8],v=o(v,N),v=i(v,17),v=o(v,O),w^=v;case 8:k^=h[B+7]<<24;case 7:k^=h[B+6]<<16;case 6:k^=h[B+5]<<8;case 5:k^=h[B+4],k=o(k,F),k=i(k,16),k=o(k,N),b^=k;case 4:T^=h[B+3]<<24;case 3:T^=h[B+2]<<16;case 2:T^=h[B+1]<<8;case 1:T^=h[B],T=o(T,_),T=i(T,15),T=o(T,F),y^=T}return y^=h.length,b^=h.length,w^=h.length,x^=h.length,y+=b,y+=w,y+=x,b+=y,w+=y,x+=y,y=s(y),b=s(b),w=s(w),x=s(x),y+=b,y+=w,y+=x,b+=y,w+=y,x+=y,("00000000"+(y>>>0).toString(16)).slice(-8)+("00000000"+(b>>>0).toString(16)).slice(-8)+("00000000"+(w>>>0).toString(16)).slice(-8)+("00000000"+(x>>>0).toString(16)).slice(-8)},t.x64.hash128=function(h,p){if(t.inputValidation&&!n(h))return e;p=p||0;for(var m=h.length%16,g=h.length-m,y=[0,p],b=[0,p],w=[0,0],x=[0,0],T=[2277735313,289559509],k=[1291169091,658871167],v=0;v<g;v=v+16)w=[h[v+4]|h[v+5]<<8|h[v+6]<<16|h[v+7]<<24,h[v]|h[v+1]<<8|h[v+2]<<16|h[v+3]<<24],x=[h[v+12]|h[v+13]<<8|h[v+14]<<16|h[v+15]<<24,h[v+8]|h[v+9]<<8|h[v+10]<<16|h[v+11]<<24],w=c(w,T),w=l(w,31),w=c(w,k),y=u(y,w),y=l(y,27),y=a(y,b),y=a(c(y,[0,5]),[0,1390208809]),x=c(x,k),x=l(x,33),x=c(x,T),b=u(b,x),b=l(b,31),b=a(b,y),b=a(c(b,[0,5]),[0,944331445]);switch(w=[0,0],x=[0,0],m){case 15:x=u(x,d([0,h[v+14]],48));case 14:x=u(x,d([0,h[v+13]],40));case 13:x=u(x,d([0,h[v+12]],32));case 12:x=u(x,d([0,h[v+11]],24));case 11:x=u(x,d([0,h[v+10]],16));case 10:x=u(x,d([0,h[v+9]],8));case 9:x=u(x,[0,h[v+8]]),x=c(x,k),x=l(x,33),x=c(x,T),b=u(b,x);case 8:w=u(w,d([0,h[v+7]],56));case 7:w=u(w,d([0,h[v+6]],48));case 6:w=u(w,d([0,h[v+5]],40));case 5:w=u(w,d([0,h[v+4]],32));case 4:w=u(w,d([0,h[v+3]],24));case 3:w=u(w,d([0,h[v+2]],16));case 2:w=u(w,d([0,h[v+1]],8));case 1:w=u(w,[0,h[v]]),w=c(w,T),w=l(w,31),w=c(w,k),y=u(y,w)}return y=u(y,[0,h.length]),b=u(b,[0,h.length]),y=a(y,b),b=a(b,y),y=f(y),b=f(b),y=a(y,b),b=a(b,y),("00000000"+(y[0]>>>0).toString(16)).slice(-8)+("00000000"+(y[1]>>>0).toString(16)).slice(-8)+("00000000"+(b[0]>>>0).toString(16)).slice(-8)+("00000000"+(b[1]>>>0).toString(16)).slice(-8)},typeof Ja<"u"?(typeof Gu<"u"&&Gu.exports&&(Ja=Gu.exports=t),Ja.murmurHash3=t):typeof define=="function"&&define.amd?define([],function(){return t}):(t._murmurHash3=r.murmurHash3,t.noConflict=function(){return r.murmurHash3=t._murmurHash3,t._murmurHash3=e,t.noConflict=e,t},r.murmurHash3=t)})(Ja)});var $8=ct((iM,F8)=>{F8.exports=U8()});var Q8=ct((yU,O2)=>{"use strict";var cA=Object.prototype.hasOwnProperty,Ht="~";function nc(){}Object.create&&(nc.prototype=Object.create(null),new nc().__proto__||(Ht=!1));function lA(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function G8(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new lA(t,n||r,o),s=Ht?Ht+e:e;return r._events[s]?r._events[s].fn?r._events[s]=[r._events[s],i]:r._events[s].push(i):(r._events[s]=i,r._eventsCount++),r}function t1(r,e){--r._eventsCount===0?r._events=new nc:delete r._events[e]}function Nt(){this._events=new nc,this._eventsCount=0}Nt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)cA.call(t,n)&&e.push(Ht?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Nt.prototype.listeners=function(e){var t=Ht?Ht+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,i=n.length,s=new Array(i);o<i;o++)s[o]=n[o].fn;return s};Nt.prototype.listenerCount=function(e){var t=Ht?Ht+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Nt.prototype.emit=function(e,t,n,o,i,s){var a=Ht?Ht+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,d,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,i),!0;case 6:return c.fn.call(c.context,t,n,o,i,s),!0}for(u=1,d=new Array(l-1);u<l;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var f=c.length,h;for(u=0;u<f;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,n);break;case 4:c[u].fn.call(c[u].context,t,n,o);break;default:if(!d)for(h=1,d=new Array(l-1);h<l;h++)d[h-1]=arguments[h];c[u].fn.apply(c[u].context,d)}}return!0};Nt.prototype.on=function(e,t,n){return G8(this,e,t,n,!1)};Nt.prototype.once=function(e,t,n){return G8(this,e,t,n,!0)};Nt.prototype.removeListener=function(e,t,n,o){var i=Ht?Ht+e:e;if(!this._events[i])return this;if(!t)return t1(this,i),this;var s=this._events[i];if(s.fn)s.fn===t&&(!o||s.once)&&(!n||s.context===n)&&t1(this,i);else{for(var a=0,c=[],l=s.length;a<l;a++)(s[a].fn!==t||o&&!s[a].once||n&&s[a].context!==n)&&c.push(s[a]);c.length?this._events[i]=c.length===1?c[0]:c:t1(this,i)}return this};Nt.prototype.removeAllListeners=function(e){var t;return e?(t=Ht?Ht+e:e,this._events[t]&&t1(this,t)):(this._events=new nc,this._eventsCount=0),this};Nt.prototype.off=Nt.prototype.removeListener;Nt.prototype.addListener=Nt.prototype.on;Nt.prefixed=Ht;Nt.EventEmitter=Nt;typeof O2<"u"&&(O2.exports=Nt)});var J8=ct(($U,Z8)=>{Z8.exports=function(r){if(!r)throw Error("hashlru must have a max value, of type number, greater than 0");var e=0,t=Object.create(null),n=Object.create(null);function o(i,s){t[i]=s,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(i){return t[i]!==void 0||n[i]!==void 0},remove:function(i){t[i]!==void 0&&(t[i]=void 0),n[i]!==void 0&&(n[i]=void 0)},get:function(i){var s=t[i];if(s!==void 0)return s;if((s=n[i])!==void 0)return o(i,s),s},set:function(i,s){t[i]!==void 0?t[i]=s:o(i,s)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var Fg=ct(gc=>{(function(){var r,e,t,n,o,i,s,a;a=function(c){var l,d,u,f;return l=(c&255<<24)>>>24,d=(c&255<<16)>>>16,u=(c&65280)>>>8,f=c&255,[l,d,u,f].join(".")},s=function(c){var l,d,u,f,h,p;for(l=[],u=f=0;f<=3&&c.length!==0;u=++f){if(u>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}p=e(c),h=p[0],d=p[1],c=c.substring(d),l.push(h)}if(c.length!==0)throw new Error("Invalid IP");switch(l.length){case 1:if(l[0]>4294967295)throw new Error("Invalid IP");return l[0]>>>0;case 2:if(l[0]>255||l[1]>16777215)throw new Error("Invalid IP");return(l[0]<<24|l[1])>>>0;case 3:if(l[0]>255||l[1]>255||l[2]>65535)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2])>>>0;case 4:if(l[0]>255||l[1]>255||l[2]>255||l[3]>255)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2]<<8|l[3])>>>0;default:throw new Error("Invalid IP")}},t=function(c){return c.charCodeAt(0)},n=t("0"),i=t("a"),o=t("A"),e=function(c){var l,d,u,f,h;for(f=0,l=10,d="9",u=0,c.length>1&&c[u]==="0"&&(c[u+1]==="x"||c[u+1]==="X"?(u+=2,l=16):"0"<=c[u+1]&&c[u+1]<="9"&&(u++,l=8,d="7")),h=u;u<c.length;){if("0"<=c[u]&&c[u]<=d)f=f*l+(t(c[u])-n)>>>0;else if(l===16)if("a"<=c[u]&&c[u]<="f")f=f*l+(10+t(c[u])-i)>>>0;else if("A"<=c[u]&&c[u]<="F")f=f*l+(10+t(c[u])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");u++}if(u===h)throw new Error("empty octet");return[f,u]},r=function(){function c(l,d){var u,f,h,p;if(typeof l!="string")throw new Error("Missing `net' parameter");if(d||(p=l.split("/",2),l=p[0],d=p[1]),d||(d=32),typeof d=="string"&&d.indexOf(".")>-1){try{this.maskLong=s(d)}catch(m){throw u=m,new Error("Invalid mask: "+d)}for(f=h=32;h>=0;f=--h)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(d||d===0)this.bitmask=parseInt(d,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(s(l)&this.maskLong)>>>0}catch(m){throw u=m,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+d);this.size=Math.pow(2,32-this.bitmask),this.base=a(this.netLong),this.mask=a(this.maskLong),this.hostmask=a(~this.maskLong),this.first=this.bitmask<=30?a(this.netLong+1):this.base,this.last=this.bitmask<=30?a(this.netLong+this.size-2):a(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?a(this.netLong+this.size-1):void 0}return c.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new c(l)),l instanceof c?this.contains(l.base)&&this.contains(l.broadcast||l.last):(s(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},c.prototype.next=function(l){return l==null&&(l=1),new c(a(this.netLong+this.size*l),this.mask)},c.prototype.forEach=function(l){var d,u,f;for(f=s(this.first),u=s(this.last),d=0;f<=u;)l(a(f),f,d),d++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),gc.ip2long=s,gc.long2ip=a,gc.Netmask=r}).call(gc)});var J1=ct((Fq,om)=>{var Uq=function(){typeof om<"u"&&(om.exports=m);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,i=864e13,s=4294967296,a=1e6,c="000000000",l=Math.trunc||function(S){var _=S-S%1;return _==0&&(S<0||S===0&&1/S!=1/0)?-0:_},d=m.prototype,u=(m.fromDate=function(S){return new m(+S)},m.fromInt64BE=x(0,1,2,3,0,4),m.fromInt64LE=x(3,2,1,0,4,0),m.fromString=function(N){var _,F=new m,N=(N+="").replace(/^\s*[+\-]?\d+/,function(B){var B=+B,L=1970+(B-1970)%400;return F.year=B-L,L}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(O,B,L){return B<0&&(L*=-1),_=6e4*(60*+B+ +L),""}).replace(/\.\d+$/,function(O){return F.nano=+(O+c).substr(1,9),""}).split(/\D+/);if(1<N.length?N[1]--:N[1]=0,F.time=_=Date.UTC.apply(Date,N)-(_||0),isNaN(_))throw new TypeError("Invalid Date");return g(F)},m.fromTimeT=function(S){return b(S,0)},d.year=0,d.time=0,d.nano=0,d.addNano=function(S){return this.nano+=+S||0,this},d.getNano=function(){var S=g(this);return(S.time%1e3*a+ +S.nano+1e9)%1e9},d.getTimeT=function(){var _=g(this),S=Math.floor(_.time/1e3),_=_.year;return _&&(S+=_*t*r/e),S},d.getYear=function(){return this.toDate().getUTCFullYear()+this.year},d.toDate=function(){return y(g(this).time)},d.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},d.toString=function(S){var _=this,F=_.toDate(),N={H:function(){return k(F.getUTCHours())},L:function(){return v(F.getUTCMilliseconds(),3)},M:function(){return k(F.getUTCMinutes())},N:function(){return v(_.getNano(),9)},S:function(){return k(F.getUTCSeconds())},Y:function(){var O=_.getYear();return 999999<O?"+"+O:9999<O?"+"+v(O,6):0<=O?v(O,4):-999999<=O?"-"+v(-O,6):O},a:function(){return h[F.getUTCDay()]},b:function(){return f[F.getUTCMonth()]},d:function(){return k(F.getUTCDate())},e:function(){return function(O){return(9<O?"":" ")+(0|O)}(F.getUTCDate())},m:function(){return k(F.getUTCMonth()+1)}};return function O(B){return B.replace(/%./g,function(L){var I=L[1],D=p[I],I=N[I];return D?O(D):I?I():L})}(S||u)},d.writeInt64BE=w(0,1,2,3,0,4),d.writeInt64LE=w(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],h=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],p={"%":"%",F:"%Y-%m-%d",n:`
3
+ `,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return m;function m(S,_,F){var N=this;if(!(N instanceof m))return new m(S,_,F);N.time=+S||0,N.nano=+_||0,N.year=+F||0,g(N)}function g(S){var _,F,N,O=S.year,B=S.time,L=S.nano,D=((L<0||a<=L)&&(L-=(F=Math.floor(L/a))*a,B+=F,F=1),O%e);return(B<-i||i<B||D)&&((_=l(B/o))&&(O+=_*e,B-=_*o),(N=y(B)).setUTCFullYear(D+N.getUTCFullYear()),N=(B=+N)+(_=l((O-=D)/e))*o,_&&-i<=N&&N<=i&&(O-=_*e,B=N),F=1),F&&(S.year=O,S.time=B,S.nano=L),S}function y(S){var _=new Date(0);return _.setTime(S),_}function b(O,N){O=+O||0;var F=l((N=(N|0)*s)/n)+l(O/n),N=N%n+O%n,O=l(N/n);return O&&(F+=O,N-=O*n),new m(1e3*N,0,F*e)}function w(S,_,F,N,O,B){return function(D,I){var R=g(this);D=D||new Array(8),T(D,I|=0);var P=Math.floor(R.time/1e3),R=R.year*(t*r/e),A=l(R/s)+l(P/s),R=R%s+P%s,P=Math.floor(R/s);return P&&(A+=P,R-=P*s),L(D,I+O,A),L(D,I+B,R),D};function L(D,I,A){D[I+S]=A>>24&255,D[I+_]=A>>16&255,D[I+F]=A>>8&255,D[I+N]=255&A}}function x(S,_,F,N,O,B){return function(D,I){T(D,I|=0);var A=L(D,I+O);return b(L(D,I+B),A)};function L(D,I){return 16777216*D[I+S]+(D[I+_]<<16|D[I+F]<<8|D[I+N])}}function T(S,_){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<_+8)throw new RangeError("Out of range")}function k(S){return(9<S?"":"0")+(0|S)}function v(S,_){return(c+(0|S)).substr(-_)}}()});var ny=ct((RJ,ry)=>{function FT(){return!!(typeof window<"u"&&typeof window.process=="object"&&window.process.type==="renderer"||typeof process<"u"&&typeof process.versions=="object"&&process.versions.electron||typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Electron")>=0)}ry.exports=FT});var Wy=ct((Aoe,qy)=>{"use strict";qy.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var jy=ct((Yy,Xy)=>{"use strict";var Kf=Wy(),{hasOwnProperty:Gy}=Object.prototype,{propertyIsEnumerable:vk}=Object,ta=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),Sk=Yy,zy={concatArrays:!1,ignoreUndefined:!1},Hf=r=>{let e=[];for(let t in r)Gy.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)vk.call(r,n)&&e.push(n)}return e};function ra(r){return Array.isArray(r)?Ak(r):Kf(r)?Ik(r):r}function Ak(r){let e=r.slice(0,0);return Hf(r).forEach(t=>{ta(e,t,ra(r[t]))}),e}function Ik(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return Hf(r).forEach(t=>{ta(e,t,ra(r[t]))}),e}var Qy=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?ta(r,o,m3(r[o],e[o],n)):ta(r,o,ra(e[o])))}),r),_k=(r,e,t)=>{let n=r.slice(0,0),o=0;return[r,e].forEach(i=>{let s=[];for(let a=0;a<i.length;a++)Gy.call(i,a)&&(s.push(String(a)),i===r?ta(n,o++,i[a]):ta(n,o++,ra(i[a])));n=Qy(n,i,Hf(i).filter(a=>!s.includes(a)),t)}),n};function m3(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?_k(r,e,t):!Kf(e)||!Kf(r)?ra(e):Qy(r,e,Hf(e),t)}Xy.exports=function(...r){let e=m3(ra(zy),this!==Sk&&this||{},zy),t={_:{}};for(let n of r)if(n!==void 0){if(!Kf(n))throw new TypeError("`"+n+"` is not an Option Object");t=m3(t,{_:n},e)}return t._}});var ew=ct((_oe,Jy)=>{"use strict";function Tk(r){return r>=55296&&r<=56319}function kk(r){return r>=56320&&r<=57343}Jy.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,i=0,s,a,c=0;c<o;c+=1){if(s=t.charCodeAt(c),a=t[c],Tk(s)&&kk(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),i+=e(a),i===n)return t.slice(0,c+1);if(i>n)return t.slice(0,c-a.length+1)}return t}});var rw=ct((Toe,tw)=>{"use strict";function Ck(r){return r>=55296&&r<=56319}function Pk(r){return r>=56320&&r<=57343}tw.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,i=null,s=0;s<t;s++)o=e.charCodeAt(s),Pk(o)?i!=null&&Ck(i)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),i=o;return n}});var ow=ct((koe,nw)=>{"use strict";var Rk=ew(),Lk=rw();nw.exports=Rk.bind(null,Lk)});var aw=ct((Coe,sw)=>{"use strict";var Dk=ow(),Nk=/[\/\?<>\\:\*\|"]/g,Bk=/[\x00-\x1f\x80-\x9f]/g,Ok=/^\.+$/,Mk=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,Uk=/[\. ]+$/;function iw(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(Nk,e).replace(Bk,e).replace(Ok,e).replace(Mk,e).replace(Uk,e);return Dk(t,255)}sw.exports=function(r,e){var t=e&&e.replacement||"",n=iw(r,t);return t===""?n:iw(n,"")}});var zw=ct(fh=>{"use strict";Object.defineProperty(fh,"__esModule",{value:!0});var N3=class{constructor(){this.pullQueue=[],this.pushQueue=[],this.eventHandlers={},this.isPaused=!1,this.isStopped=!1}push(e){if(this.isStopped)return;let t={value:e,done:!1};if(this.pullQueue.length){let n=this.pullQueue.shift();n&&n.resolve(t)}else this.pushQueue.push(Promise.resolve(t)),this.highWaterMark!==void 0&&this.pushQueue.length>=this.highWaterMark&&!this.isPaused&&(this.isPaused=!0,this.eventHandlers.highWater?this.eventHandlers.highWater():console&&console.warn(`EventIterator queue reached ${this.pushQueue.length} items`))}stop(){if(!this.isStopped){this.isStopped=!0,this.remove();for(let e of this.pullQueue)e.resolve({value:void 0,done:!0});this.pullQueue.length=0}}fail(e){if(!this.isStopped)if(this.isStopped=!0,this.remove(),this.pullQueue.length){for(let t of this.pullQueue)t.reject(e);this.pullQueue.length=0}else{let t=Promise.reject(e);t.catch(()=>{}),this.pushQueue.push(t)}}remove(){Promise.resolve().then(()=>{this.removeCallback&&this.removeCallback()})}[Symbol.asyncIterator](){return{next:e=>{let t=this.pushQueue.shift();return t?(this.lowWaterMark!==void 0&&this.pushQueue.length<=this.lowWaterMark&&this.isPaused&&(this.isPaused=!1,this.eventHandlers.lowWater&&this.eventHandlers.lowWater()),t):this.isStopped?Promise.resolve({value:void 0,done:!0}):new Promise((n,o)=>{this.pullQueue.push({resolve:n,reject:o})})},return:()=>(this.isStopped=!0,this.pushQueue.length=0,this.remove(),Promise.resolve({value:void 0,done:!0}))}}},dh=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new N3;o.highWaterMark=t,o.lowWaterMark=n,o.removeCallback=e({push:i=>o.push(i),stop:()=>o.stop(),fail:i=>o.fail(i),on:(i,s)=>{o.eventHandlers[i]=s}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};fh.EventIterator=dh;fh.default=dh});var Gw=ct(tl=>{"use strict";Object.defineProperty(tl,"__esModule",{value:!0});var B3=zw();tl.EventIterator=B3.EventIterator;function OC(r,e,t){return new B3.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}tl.subscribe=OC;tl.default=B3.EventIterator});var Nb=ct((a1e,Db)=>{function Mr(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._timer=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}Db.exports=Mr;Mr.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};Mr.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};Mr.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.push(r),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(0,this._errors.length-1),t=this._cachedTimeouts.slice(-1);else return!1;var n=this;return this._timer=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t),this._options.unref&&this._timer.unref(),!0};Mr.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};Mr.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};Mr.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};Mr.prototype.start=Mr.prototype.try;Mr.prototype.errors=function(){return this._errors};Mr.prototype.attempts=function(){return this._attempts};Mr.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var o=this._errors[n],i=o.message,s=(r[i]||0)+1;r[i]=s,s>=t&&(e=o,t=s)}return e}});var Bb=ct(Ui=>{var nP=Nb();Ui.operation=function(r){var e=Ui.timeouts(r);return new nP(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};Ui.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],o=0;o<e.retries;o++)n.push(this.createTimeout(o,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(o,e)),n.sort(function(i,s){return i-s}),n};Ui.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*Math.max(e.minTimeout,1)*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};Ui.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var o=0;o<t.length;o++){var i=t[o],s=r[i];r[i]=function(c){var l=Ui.operation(e),d=Array.prototype.slice.call(arguments,1),u=d.pop();d.push(function(f){l.retry(f)||(f&&(arguments[0]=l.mainError()),u.apply(this,arguments))}),l.attempt(function(){c.apply(r,d)})}.bind(r,s),r[i].options=e}}});var Mb=ct((l1e,Ob)=>{Ob.exports=Bb()});var IP={};Xe(IP,{DEFAULT_SESSION_MAX_PROVIDERS:()=>np,DEFAULT_SESSION_MIN_PROVIDERS:()=>rp,InsufficientProvidersError:()=>fc,NoRoutersAvailableError:()=>Lo,UnknownCodecError:()=>pc,UnknownHashAlgorithmError:()=>hc,createHelia:()=>SP,libp2pDefaults:()=>gh});var m4=Symbol.for("@libp2p/connection");var ln=Symbol.for("@libp2p/content-routing");var Qo=Symbol.for("@libp2p/peer-discovery");var al=Symbol.for("@libp2p/peer-id");function cl(r){return!!r?.[al]}var un=Symbol.for("@libp2p/peer-routing");var so="keep-alive";var dn=Symbol.for("@libp2p/transport");var ao;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(ao||(ao={}));var ht=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},ll=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},ul=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},C=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},Rn=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},ma=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}};var dl=class extends Error{static name="ConnectionClosingError";constructor(e="The connection is closing"){super(e),this.name="ConnectionClosingError"}},$i=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},Vi=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},fn=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},fl=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}},Yo=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Oe=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},Ki=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},hn=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},hl=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},co=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Ln=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},de=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},pl=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},Ur=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},Fr=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Dn=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},Xo=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},Hi=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},ml=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},lo=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},$r=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var $=(r,...e)=>{try{[...e]}catch{}};var ge=class extends EventTarget{#e=new Map;constructor(){super(),$(1/0,this)}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:i})=>i!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new CustomEvent(e,t))}};function gl(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function wt(...r){let e=[];for(let t of r)gl(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStart!=null&&await t.beforeStart()})),await Promise.all(e.map(async t=>{await t.start()})),await Promise.all(e.map(async t=>{t.afterStart!=null&&await t.afterStart()}))}async function Tt(...r){let e=[];for(let t of r)gl(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStop!=null&&await t.beforeStop()})),await Promise.all(e.map(async t=>{await t.stop()})),await Promise.all(e.map(async t=>{t.afterStop!=null&&await t.afterStop()}))}var Ie=Symbol.for("@libp2p/service-capabilities"),Vr=Symbol.for("@libp2p/service-dependencies");function he(r){let e=new globalThis.AbortController;function t(){e.abort();for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}for(let i of r){if(i?.aborted===!0){t();break}i?.addEventListener!=null&&i.addEventListener("abort",t)}function n(){for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}function J(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var yl=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||e-1&e)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){let e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}},qi=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new yl(this.hwm),this.tail=this.head,this.size=0}calculateSize(e){return e?.byteLength!=null?e.byteLength:1}push(e){if(e?.value!=null&&(this.size+=this.calculateSize(e.value)),!this.head.push(e)){let t=this.head;this.head=t.next=new yl(2*this.head.buffer.length),this.head.push(e)}}shift(){let e=this.tail.shift();if(e===void 0&&this.tail.next!=null){let t=this.tail.next;this.tail.next=null,this.tail=t,e=this.tail.shift()}return e?.value!=null&&(this.size-=this.calculateSize(e.value)),e}isEmpty(){return this.head.isEmpty()}};var Xh=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function kt(r={}){return cx(t=>{let n=t.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},r)}function cx(r,e){e=e??{};let t=e.onEnd,n=new qi,o,i,s,a=J(),c=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((g,y)=>{i=b=>{i=null,n.push(b);try{g(r(n))}catch(w){y(w)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=J()})}},l=g=>i!=null?i(g):(n.push(g),o),d=g=>(n=new qi,i!=null?i({error:g}):(n.push({error:g}),o)),u=g=>{if(s)return o;if(e?.objectMode!==!0&&g?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:g})},f=g=>s?o:(s=!0,g!=null?d(g):l({done:!0})),h=()=>(n=new qi,f(),{done:!0}),p=g=>(f(g),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:h,throw:p,push:u,end:f,get readableLength(){return n.size},onEmpty:async g=>{let y=g?.signal;if(y?.throwIfAborted(),n.isEmpty())return;let b,w;y!=null&&(b=new Promise((x,T)=>{w=()=>{T(new Xh)},y.addEventListener("abort",w)}));try{await Promise.race([a.promise,b])}finally{w!=null&&y!=null&&y?.removeEventListener("abort",w)}}},t==null)return o;let m=o;return o={[Symbol.asyncIterator](){return this},next(){return m.next()},throw(g){return m.throw(g),t!=null&&(t(g),t=void 0),{done:!0}},return(){return m.return(),t!=null&&(t(),t=void 0),{done:!0}},push:u,end(g){return m.end(g),t!=null&&(t(g),t=void 0),o},get readableLength(){return m.readableLength},onEmpty:g=>m.onEmpty(g)},o}var jh=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function hr(r,e,t,n){let o=new jh(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((i,s)=>{function a(){t?.removeEventListener("abort",d),r.removeEventListener(e,c),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let c=u=>{try{if(n?.filter?.(u)===!1)return}catch(f){a(),s(f);return}a(),i(u)},l=u=>{a(),s(u.detail)},d=()=>{a(),s(o)};t?.addEventListener("abort",d),r.addEventListener(e,c),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}var wl=class extends Error{remainingPoints;msBeforeNext;consumedPoints;isFirstInDuration;constructor(e="Rate limit exceeded",t){super(e),this.name="RateLimitError",this.remainingPoints=t.remainingPoints,this.msBeforeNext=t.msBeforeNext,this.consumedPoints=t.consumedPoints,this.isFirstInDuration=t.isFirstInDuration}},bl=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var xl=class extends Error{type;code;constructor(e,t,n){super(e??"The operation was aborted"),this.type="aborted",this.name=n??"AbortError",this.code=t??"ABORT_ERR"}};async function Ce(r,e,t){if(e==null)return r;if(e.aborted)return Promise.reject(new xl(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new xl(t?.errorMessage,t?.errorCode,t?.errorName);try{return await Promise.race([r,new Promise((i,s)=>{n=()=>{s(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var El=class{deferred;signal;constructor(e){this.signal=e,this.deferred=J(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new ht)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function lx(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var vl=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=lx(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,$(1/0,this.controller.signal),this.onAbort=this.onAbort.bind(this)}abort(e){this.controller.abort(e)}onAbort(){this.recipients.reduce((t,n)=>t&&n.signal?.aborted===!0,!0)&&(this.controller.abort(new ht),this.cleanup())}async join(e={}){let t=new El(e.signal);return this.recipients.push(t),e.signal?.addEventListener("abort",this.onAbort),t.deferred.promise}async run(){this.status="running",this.timeline.started=Date.now();try{this.controller.signal.throwIfAborted();let e=await Ce(this.fn({...this.options??{},signal:this.controller.signal}),this.controller.signal);this.recipients.forEach(t=>{t.deferred.resolve(e)}),this.status="complete"}catch(e){this.recipients.forEach(t=>{t.deferred.reject(e)}),this.status="errored"}finally{this.timeline.finished=Date.now(),this.cleanup()}}cleanup(){this.recipients.forEach(e=>{e.cleanup(),e.signal?.removeEventListener("abort",this.onAbort)})}};var Mt=class extends ge{concurrency;maxSize;queue;pending;sort;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.sort=e.sort,this.queue=[]}tryToStartAnother(){if(this.size===0)return queueMicrotask(()=>{this.safeDispatchEvent("empty")}),this.running===0&&queueMicrotask(()=>{this.safeDispatchEvent("idle")}),!1;if(this.pending<this.concurrency){let e;for(let t of this.queue)if(t.status==="queued"){e=t;break}return e==null?!1:(this.safeDispatchEvent("active"),this.pending++,e.run().finally(()=>{for(let t=0;t<this.queue.length;t++)if(this.queue[t]===e){this.queue.splice(t,1);break}this.pending--,this.tryToStartAnother(),this.safeDispatchEvent("next")}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new bl;let n=new vl(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("completed",{detail:o}),this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let i=0;i<this.queue.length;i++)if(this.queue[i]===n){this.queue.splice(i,1);break}}throw this.safeDispatchEvent("error",{detail:o}),this.safeDispatchEvent("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new ht)}),this.clear()}async onEmpty(e){this.size!==0&&await hr(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await hr(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await hr(this,"idle",e?.signal)}get size(){return this.queue.length}get queued(){return this.queue.length-this.pending}get running(){return this.pending}async*toGenerator(e){e?.signal?.throwIfAborted();let t=kt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},i=c=>{n(c.detail)},s=()=>{n()},a=()=>{n(new ht("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("error",i),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",i),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",a),n()}}};var Ut=class extends Mt{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function ux(r){return r[Symbol.asyncIterator]!=null}function dx(r){if(ux(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Ct=dx;function se(r=0){return new Uint8Array(r)}function Ge(r=0){return new Uint8Array(r)}var fx=Math.pow(2,7),hx=Math.pow(2,14),px=Math.pow(2,21),Zh=Math.pow(2,28),Jh=Math.pow(2,35),e0=Math.pow(2,42),t0=Math.pow(2,49),Te=128,Pt=127;function pe(r){if(r<fx)return 1;if(r<hx)return 2;if(r<px)return 3;if(r<Zh)return 4;if(r<Jh)return 5;if(r<e0)return 6;if(r<t0)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function r0(r,e,t=0){switch(pe(r)){case 8:e[t++]=r&255|Te,r/=128;case 7:e[t++]=r&255|Te,r/=128;case 6:e[t++]=r&255|Te,r/=128;case 5:e[t++]=r&255|Te,r/=128;case 4:e[t++]=r&255|Te,r>>>=7;case 3:e[t++]=r&255|Te,r>>>=7;case 2:e[t++]=r&255|Te,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function mx(r,e,t=0){switch(pe(r)){case 8:e.set(t++,r&255|Te),r/=128;case 7:e.set(t++,r&255|Te),r/=128;case 6:e.set(t++,r&255|Te),r/=128;case 5:e.set(t++,r&255|Te),r/=128;case 4:e.set(t++,r&255|Te),r>>>=7;case 3:e.set(t++,r&255|Te),r>>>=7;case 2:e.set(t++,r&255|Te),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function n0(r,e){let t=r[e],n=0;if(n+=t&Pt,t<Te||(t=r[e+1],n+=(t&Pt)<<7,t<Te)||(t=r[e+2],n+=(t&Pt)<<14,t<Te)||(t=r[e+3],n+=(t&Pt)<<21,t<Te)||(t=r[e+4],n+=(t&Pt)*Zh,t<Te)||(t=r[e+5],n+=(t&Pt)*Jh,t<Te)||(t=r[e+6],n+=(t&Pt)*e0,t<Te)||(t=r[e+7],n+=(t&Pt)*t0,t<Te))return n;throw new RangeError("Could not decode varint")}function gx(r,e){let t=r.get(e),n=0;if(n+=t&Pt,t<Te||(t=r.get(e+1),n+=(t&Pt)<<7,t<Te)||(t=r.get(e+2),n+=(t&Pt)<<14,t<Te)||(t=r.get(e+3),n+=(t&Pt)<<21,t<Te)||(t=r.get(e+4),n+=(t&Pt)*Zh,t<Te)||(t=r.get(e+5),n+=(t&Pt)*Jh,t<Te)||(t=r.get(e+6),n+=(t&Pt)*e0,t<Te)||(t=r.get(e+7),n+=(t&Pt)*t0,t<Te))return n;throw new RangeError("Could not decode varint")}function Ke(r,e,t=0){return e==null&&(e=Ge(pe(r))),e instanceof Uint8Array?r0(r,e,t):mx(r,e,t)}function Ft(r,e=0){return r instanceof Uint8Array?n0(r,e):gx(r,e)}function Pe(r,e){e==null&&(e=r.reduce((o,i)=>o+i.length,0));let t=Ge(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}function te(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var y4=Symbol.for("@achingbrain/uint8arraylist");function g4(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let o=t+n.byteLength;if(e<o)return{buf:n,index:e-t};t=o}throw new RangeError("index is out of bounds")}function Sl(r){return!!r?.[y4]}var le=class r{bufs;length;[y4]=!0;constructor(...e){this.bufs=[],this.length=0,e.length>0&&this.appendAll(e)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...e){this.appendAll(e)}appendAll(e){let t=0;for(let n of e)if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.push(n);else if(Sl(n))t+=n.byteLength,this.bufs.push(...n.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}prepend(...e){this.prependAll(e)}prependAll(e){let t=0;for(let n of e.reverse())if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.unshift(n);else if(Sl(n))t+=n.byteLength,this.bufs.unshift(...n.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}get(e){let t=g4(this.bufs,e);return t.buf[t.index]}set(e,t){let n=g4(this.bufs,e);n.buf[n.index]=t}write(e,t=0){if(e instanceof Uint8Array)for(let n=0;n<e.length;n++)this.set(t+n,e[n]);else if(Sl(e))for(let n=0;n<e.length;n++)this.set(t+n,e.get(n));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,t){let{bufs:n,length:o}=this._subList(e,t);return Pe(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:Pe(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),i=new r;return i.length=o,i.bufs=[...n],i}_subList(e,t){if(e=e??0,t=t??this.length,e<0&&(e=this.length+e),t<0&&(t=this.length+t),e<0||t>this.length)throw new RangeError("index is out of bounds");if(e===t)return{bufs:[],length:0};if(e===0&&t===this.length)return{bufs:this.bufs,length:this.length};let n=[],o=0;for(let i=0;i<this.bufs.length;i++){let s=this.bufs[i],a=o,c=a+s.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,d=t>a&&t<=c;if(l&&d){if(e===a&&t===c){n.push(s);break}let u=e-a;n.push(s.subarray(u,u+(t-e)));break}if(l){if(e===0){n.push(s);continue}n.push(s.subarray(e-a));continue}if(d){if(t===c){n.push(s);break}n.push(s.subarray(0,t-a));break}n.push(s)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!Sl(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(t=Number(t??0),isNaN(t)&&(t=0),t<0&&(t=this.length+t),t<0&&(t=0),e.length===0)return t>this.length?this.length:t;let o=n.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");let i=256,s=new Int32Array(i);for(let u=0;u<i;u++)s[u]=-1;for(let u=0;u<o;u++)s[n[u]]=u;let a=s,c=this.byteLength-n.byteLength,l=n.byteLength-1,d;for(let u=t;u<=c;u+=d){d=0;for(let f=l;f>=0;f--){let h=this.get(u+f);if(n[f]!==h){d=Math.max(1,f-a[h]);break}}if(d===0)return u}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=Ge(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,t),this.write(n,e)}getInt16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,t)}setInt16(e,t,n){let o=se(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt16(0,t,n),this.write(o,e)}getInt32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,t)}setInt32(e,t,n){let o=se(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt32(0,t,n),this.write(o,e)}getBigInt64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,t)}setBigInt64(e,t,n){let o=se(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,t,n),this.write(o,e)}getUint8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint8(0)}setUint8(e,t){let n=Ge(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,t),this.write(n,e)}getUint16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,t)}setUint16(e,t,n){let o=se(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint16(0,t,n),this.write(o,e)}getUint32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,t)}setUint32(e,t,n){let o=se(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,t,n),this.write(o,e)}getBigUint64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,t)}setBigUint64(e,t,n){let o=se(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigUint64(0,t,n),this.write(o,e)}getFloat32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,t)}setFloat32(e,t,n){let o=se(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat32(0,t,n),this.write(o,e)}getFloat64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,t)}setFloat64(e,t,n){let o=se(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,t,n),this.write(o,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!te(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,i)=>o+i.byteLength,0)),n.length=t,n}};function Al(r){return r[Symbol.asyncIterator]!=null}var Il=r=>{let e=pe(r),t=Ge(e);return Ke(r,t),Il.bytes=e,t};Il.bytes=0;function Yt(r,e){e=e??{};let t=e.lengthEncoder??Il;function*n(o){let i=t(o.byteLength);i instanceof Uint8Array?yield i:yield*i,o instanceof Uint8Array?yield o:yield*o}return Al(r)?async function*(){for await(let o of r)yield*n(o)}():function*(){for(let o of r)yield*n(o)}()}Yt.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Il;return new le(t(r.byteLength),r)};var _l=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Tl=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},kl=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},ga=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var wx=8,bx=1024*1024*4,jo;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(jo||(jo={}));var o0=r=>{let e=Ft(r);return o0.bytes=pe(e),e};o0.bytes=0;function Xt(r,e){let t=new le,n=jo.LENGTH,o=-1,i=e?.lengthDecoder??o0,s=e?.maxLengthLength??wx,a=e?.maxDataLength??bx;function*c(){for(;t.byteLength>0;){if(n===jo.LENGTH)try{if(o=i(t),o<0)throw new _l("Invalid message length");if(o>a)throw new Tl("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=jo.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new kl("Message length length too long");break}throw l}if(n===jo.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=jo.LENGTH}}}return Al(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new ga("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new ga("Unexpected end of input")}()}Xt.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:i,value:s}=await r.next(t);if(i===!0)return;s!=null&&(yield s)}catch(i){if(i.code==="ERR_UNDER_READ")return{done:!0,value:null};throw i}finally{t=1}}();return Xt(n,{...e??{},onLength:i=>{t=i}})};function xx(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:o=>{n.push(o)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var Wi=xx;function Ex(r){return r[Symbol.asyncIterator]!=null}function vx(r,e){let t=0;if(Ex(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=Wi(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){yield await s;for await(let c of n)yield e(c,t++)}();let a=e;return function*(){yield s;for(let c of n)yield a(c,t++)}()}var jt=vx;function Sx(r){return r[Symbol.asyncIterator]!=null}function Ax(...r){let e=[];for(let t of r)Sx(t)||e.push(t);return e.length===r.length?function*(){for(let t of e)yield*t}():async function*(){let t=kt({objectMode:!0});Promise.resolve().then(async()=>{try{await Promise.all(r.map(async n=>{for await(let o of n)t.push(o)})),t.end()}catch(n){t.end(n)}}),yield*t}()}var $t=Ax;function Je(r,...e){if(r==null)throw new Error("Empty pipeline");if(i0(r)){let n=r;r=()=>n.source}else if(b4(r)||w4(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&i0(t[t.length-1])&&(t[t.length-1]=t[t.length-1].sink),t.length>2)for(let n=1;n<t.length-1;n++)i0(t[n])&&(t[n]=_x(t[n]));return Ix(...t)}var Ix=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},w4=r=>r?.[Symbol.asyncIterator]!=null,b4=r=>r?.[Symbol.iterator]!=null,i0=r=>r==null?!1:r.sink!=null&&r.source!=null,_x=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=kt({objectMode:!0});t.then(()=>{n.end()},s=>{n.end(s)});let o,i=r.source;if(w4(i))o=async function*(){yield*i,n.end()};else if(b4(i))o=function*(){yield*i,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return $t(n,o())}return r.source};function Tx(r){return r[Symbol.asyncIterator]!=null}function kx(r,e){return Tx(r)?async function*(){let t=0;if(!(e<1)){for await(let n of r)if(yield n,t++,t===e)return}}():function*(){let t=0;if(!(e<1)){for(let n of r)if(yield n,t++,t===e)return}}()}var uo=kx;var H=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var ya="/ipfs/bitswap/1.2.0";var s0=new Float32Array([-0]),fo=new Uint8Array(s0.buffer);function x4(r,e,t){s0[0]=r,e[t]=fo[0],e[t+1]=fo[1],e[t+2]=fo[2],e[t+3]=fo[3]}function E4(r,e){return fo[0]=r[e],fo[1]=r[e+1],fo[2]=r[e+2],fo[3]=r[e+3],s0[0]}var a0=new Float64Array([-0]),Rt=new Uint8Array(a0.buffer);function v4(r,e,t){a0[0]=r,e[t]=Rt[0],e[t+1]=Rt[1],e[t+2]=Rt[2],e[t+3]=Rt[3],e[t+4]=Rt[4],e[t+5]=Rt[5],e[t+6]=Rt[6],e[t+7]=Rt[7]}function S4(r,e){return Rt[0]=r[e],Rt[1]=r[e+1],Rt[2]=r[e+2],Rt[3]=r[e+3],Rt[4]=r[e+4],Rt[5]=r[e+5],Rt[6]=r[e+6],Rt[7]=r[e+7],a0[0]}var Cx=BigInt(Number.MAX_SAFE_INTEGER),Px=BigInt(Number.MIN_SAFE_INTEGER),pr=class r{lo;hi;constructor(e,t){this.lo=e|0,this.hi=t|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(t+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(BigInt(t)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){let e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){let e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){let e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?t===0?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}static fromBigInt(e){if(e===0n)return Zo;if(e<Cx&&e>Px)return this.fromNumber(Number(e));let t=e<0n;t&&(e=-e);let n=e>>32n,o=e-(n<<32n);return t&&(n=~n|0n,o=~o|0n,++o>A4&&(o=0n,++n>A4&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return Zo;let t=e<0;t&&(e=-e);let n=e>>>0,o=(e-n)/4294967296>>>0;return t&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new r(n,o)}static from(e){return typeof e=="number"?r.fromNumber(e):typeof e=="bigint"?r.fromBigInt(e):typeof e=="string"?r.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new r(e.low>>>0,e.high>>>0):Zo}},Zo=new pr(0,0);Zo.toBigInt=function(){return 0n};Zo.zzEncode=Zo.zzDecode=function(){return this};Zo.length=function(){return 1};var A4=4294967296n;function I4(r){let e=0,t=0;for(let n=0;n<r.length;++n)t=r.charCodeAt(n),t<128?e+=1:t<2048?e+=2:(t&64512)===55296&&(r.charCodeAt(n+1)&64512)===56320?(++n,e+=4):e+=3;return e}function _4(r,e,t){if(t-e<1)return"";let o,i=[],s=0,a;for(;e<t;)a=r[e++],a<128?i[s++]=a:a>191&&a<224?i[s++]=(a&31)<<6|r[e++]&63:a>239&&a<365?(a=((a&7)<<18|(r[e++]&63)<<12|(r[e++]&63)<<6|r[e++]&63)-65536,i[s++]=55296+(a>>10),i[s++]=56320+(a&1023)):i[s++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,s>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,i)),s=0);return o!=null?(s>0&&o.push(String.fromCharCode.apply(String,i.slice(0,s))),o.join("")):String.fromCharCode.apply(String,i.slice(0,s))}function c0(r,e,t){let n=t,o,i;for(let s=0;s<r.length;++s)o=r.charCodeAt(s),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((i=r.charCodeAt(s+1))&64512)===56320?(o=65536+((o&1023)<<10)+(i&1023),++s,e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128);return t-n}function Kr(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Pl(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var l0=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(e){this.buf=e,this.pos=0,this.len=e.length}uint32(){let e=4294967295;if(e=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(e=(e|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return e;if((this.pos+=5)>this.len)throw this.pos=this.len,Kr(this,10);return e}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw Kr(this,4);return Pl(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Kr(this,4);return Pl(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Kr(this,4);let e=E4(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Kr(this,4);let e=S4(this.buf,this.pos);return this.pos+=8,e}bytes(){let e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw Kr(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return _4(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Kr(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Kr(this);while(this.buf[this.pos++]&128);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){let e=new pr(0,0),t=0;if(this.len-this.pos>4){for(;t<4;++t)if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(this.buf[this.pos]&127)<<28)>>>0,e.hi=(e.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return e;t=0}else{for(;t<3;++t){if(this.pos>=this.len)throw Kr(this);if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(this.buf[this.pos++]&127)<<t*7)>>>0,e}if(this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw Kr(this);if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw Kr(this,8);let e=Pl(this.buf,this.pos+=4),t=Pl(this.buf,this.pos+=4);return new pr(e,t)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){let e=n0(this.buf,this.pos);return this.pos+=pe(e),e}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}};function u0(r){return new l0(r instanceof Uint8Array?r:r.subarray())}function re(r,e,t){let n=u0(r);return e.decode(n,void 0,t)}var g0={};Xe(g0,{base10:()=>Ox});var EL=new Uint8Array(0);function k4(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}function Hr(r){if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")}function C4(r){return new TextEncoder().encode(r)}function P4(r){return new TextDecoder().decode(r)}function Rx(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var i=r.charAt(o),s=i.charCodeAt(0);if(t[s]!==255)throw new TypeError(i+" is ambiguous");t[s]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(p){if(p instanceof Uint8Array||(ArrayBuffer.isView(p)?p=new Uint8Array(p.buffer,p.byteOffset,p.byteLength):Array.isArray(p)&&(p=Uint8Array.from(p))),!(p instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(p.length===0)return"";for(var m=0,g=0,y=0,b=p.length;y!==b&&p[y]===0;)y++,m++;for(var w=(b-y)*d+1>>>0,x=new Uint8Array(w);y!==b;){for(var T=p[y],k=0,v=w-1;(T!==0||k<g)&&v!==-1;v--,k++)T+=256*x[v]>>>0,x[v]=T%a>>>0,T=T/a>>>0;if(T!==0)throw new Error("Non-zero carry");g=k,y++}for(var S=w-g;S!==w&&x[S]===0;)S++;for(var _=c.repeat(m);S<w;++S)_+=r.charAt(x[S]);return _}function f(p){if(typeof p!="string")throw new TypeError("Expected String");if(p.length===0)return new Uint8Array;var m=0;if(p[m]!==" "){for(var g=0,y=0;p[m]===c;)g++,m++;for(var b=(p.length-m)*l+1>>>0,w=new Uint8Array(b);p[m];){var x=t[p.charCodeAt(m)];if(x===255)return;for(var T=0,k=b-1;(x!==0||T<y)&&k!==-1;k--,T++)x+=a*w[k]>>>0,w[k]=x%256>>>0,x=x/256>>>0;if(x!==0)throw new Error("Non-zero carry");y=T,m++}if(p[m]!==" "){for(var v=b-y;v!==b&&w[v]===0;)v++;for(var S=new Uint8Array(g+(b-v)),_=g;v!==b;)S[_++]=w[v++];return S}}}function h(p){var m=f(p);if(m)return m;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:h}}var Lx=Rx,Dx=Lx,R4=Dx;var f0=class{name;prefix;baseEncode;constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},h0=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){this.name=e,this.prefix=t;let o=t.codePointAt(0);if(o===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=o,this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return L4(this,e)}},p0=class{decoders;constructor(e){this.decoders=e}or(e){return L4(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function L4(r,e){return new p0({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var m0=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new f0(e,t,n),this.decoder=new h0(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function zi({name:r,prefix:e,encode:t,decode:n}){return new m0(r,e,t,n)}function ho({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=R4(t,r);return zi({prefix:e,name:r,encode:n,decode:i=>Hr(o(i))})}function Nx(r,e,t,n){let o={};for(let d=0;d<e.length;++d)o[e[d]]=d;let i=r.length;for(;r[i-1]==="=";)--i;let s=new Uint8Array(i*t/8|0),a=0,c=0,l=0;for(let d=0;d<i;++d){let u=o[r[d]];if(u===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|u,a+=t,a>=8&&(a-=8,s[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return s}function Bx(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,i="",s=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],s+=8;s>t;)s-=t,i+=e[o&a>>s];if(s!==0&&(i+=e[o&a<<t-s]),n)for(;i.length*t&7;)i+="=";return i}function je({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return zi({prefix:e,name:r,encode(o){return Bx(o,n,t)},decode(o){return Nx(o,n,t,r)}})}var Ox=ho({prefix:"9",name:"base10",alphabet:"0123456789"});var y0={};Xe(y0,{base16:()=>Mx,base16upper:()=>Ux});var Mx=je({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Ux=je({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var w0={};Xe(w0,{base2:()=>Fx});var Fx=je({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var b0={};Xe(b0,{base256emoji:()=>qx});var D4=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),$x=D4.reduce((r,e,t)=>(r[t]=e,r),[]),Vx=D4.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function Kx(r){return r.reduce((e,t)=>(e+=$x[t],e),"")}function Hx(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=Vx[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var qx=zi({prefix:"\u{1F680}",name:"base256emoji",encode:Kx,decode:Hx});var x0={};Xe(x0,{base32:()=>lt,base32hex:()=>Qx,base32hexpad:()=>Xx,base32hexpadupper:()=>jx,base32hexupper:()=>Yx,base32pad:()=>zx,base32padupper:()=>Gx,base32upper:()=>Wx,base32z:()=>Zx});var lt=je({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Wx=je({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),zx=je({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),Gx=je({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),Qx=je({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),Yx=je({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),Xx=je({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),jx=je({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),Zx=je({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var E0={};Xe(E0,{base36:()=>mn,base36upper:()=>Jx});var mn=ho({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Jx=ho({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var v0={};Xe(v0,{base58btc:()=>Se,base58flickr:()=>eE});var Se=ho({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),eE=ho({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var A0={};Xe(A0,{base64:()=>it,base64pad:()=>tE,base64url:()=>S0,base64urlpad:()=>rE});var it=je({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),tE=je({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),S0=je({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),rE=je({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var I0={};Xe(I0,{base8:()=>nE});var nE=je({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var _0={};Xe(_0,{identity:()=>oE});var oE=zi({prefix:"\0",name:"identity",encode:r=>P4(r),decode:r=>C4(r)});var Rl={};Xe(Rl,{code:()=>T0,decode:()=>lE,encode:()=>cE,name:()=>aE});var iE=new TextEncoder,sE=new TextDecoder,aE="json",T0=512;function cE(r){return iE.encode(JSON.stringify(r))}function lE(r){return JSON.parse(sE.decode(r))}var Gi={};Xe(Gi,{code:()=>Jo,decode:()=>fE,encode:()=>dE,name:()=>uE});var uE="raw",Jo=85;function dE(r){return Hr(r)}function fE(r){return Hr(r)}var P0={};Xe(P0,{identity:()=>Jt});var Qe={};Xe(Qe,{Digest:()=>ei,create:()=>Zt,decode:()=>ke,equals:()=>C0,hasCode:()=>RE});var hE=O4,N4=128,pE=127,mE=~pE,gE=Math.pow(2,31);function O4(r,e,t){e=e||[],t=t||0;for(var n=t;r>=gE;)e[t++]=r&255|N4,r/=128;for(;r&mE;)e[t++]=r&255|N4,r>>>=7;return e[t]=r|0,O4.bytes=t-n+1,e}var yE=k0,wE=128,B4=127;function k0(r,n){var t=0,n=n||0,o=0,i=n,s,a=r.length;do{if(i>=a)throw k0.bytes=0,new RangeError("Could not decode varint");s=r[i++],t+=o<28?(s&B4)<<o:(s&B4)*Math.pow(2,o),o+=7}while(s>=wE);return k0.bytes=i-n,t}var bE=Math.pow(2,7),xE=Math.pow(2,14),EE=Math.pow(2,21),vE=Math.pow(2,28),SE=Math.pow(2,35),AE=Math.pow(2,42),IE=Math.pow(2,49),_E=Math.pow(2,56),TE=Math.pow(2,63),kE=function(r){return r<bE?1:r<xE?2:r<EE?3:r<vE?4:r<SE?5:r<AE?6:r<IE?7:r<_E?8:r<TE?9:10},CE={encode:hE,decode:yE,encodingLength:kE},PE=CE,wa=PE;function ba(r,e=0){return[wa.decode(r,e),wa.decode.bytes]}function Qi(r,e,t=0){return wa.encode(r,e,t),e}function Yi(r){return wa.encodingLength(r)}function Zt(r,e){let t=e.byteLength,n=Yi(r),o=n+Yi(t),i=new Uint8Array(o+t);return Qi(r,i,0),Qi(t,i,n),i.set(e,o),new ei(r,t,e,i)}function ke(r){let e=Hr(r),[t,n]=ba(e),[o,i]=ba(e.subarray(n)),s=e.subarray(n+i);if(s.byteLength!==o)throw new Error("Incorrect length");return new ei(t,o,s,e)}function C0(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&k4(r.bytes,t.bytes)}}var ei=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function RE(r,e){return r.code===e}var M4=0,LE="identity",U4=Hr;function DE(r){return Zt(M4,U4(r))}var Jt={code:M4,name:LE,encode:U4,digest:DE};var D0={};Xe(D0,{sha256:()=>ut,sha512:()=>Dl});function L0({name:r,code:e,encode:t}){return new R0(r,e,t)}var R0=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?Zt(this.code,t):t.then(n=>Zt(this.code,n))}else throw Error("Unknown type, must be binary type")}};function $4(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var ut=L0({name:"sha2-256",code:18,encode:$4("SHA-256")}),Dl=L0({name:"sha2-512",code:19,encode:$4("SHA-512")});function V4(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return BE(t,N0(r),e??Se.encoder);default:return OE(t,N0(r),e??lt.encoder)}}var K4=new WeakMap;function N0(r){let e=K4.get(r);if(e==null){let t=new Map;return K4.set(r,t),t}return e}var X=class r{code;version;multihash;bytes;"/";constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==xa)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==ME)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=Zt(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&C0(e.multihash,n.multihash)}toString(e){return V4(this,e)}toJSON(){return{"/":V4(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:i,bytes:s}=t;return new r(n,o,i,s??H4(n,o,i.bytes))}else if(t[UE]===!0){let{version:n,multihash:o,code:i}=t,s=ke(o);return r.create(n,i,s)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==xa)throw new Error(`Version 0 CID must use dag-pb (code: ${xa}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=H4(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,xa,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length!==0)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=Hr(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let i=o.subarray(t.multihashSize-t.digestSize),s=new ei(t.multihashCode,t.digestSize,i,o);return[t.version===0?r.createV0(s):r.createV1(t.codec,s),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[u,f]=ba(e.subarray(t));return t+=f,u},o=n(),i=xa;if(o===18?(o=0,t=0):i=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let s=t,a=n(),c=n(),l=t+c,d=l-s;return{version:o,codec:i,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,t){let[n,o]=NE(e,t),i=r.decode(o);if(i.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return N0(i).set(n,e),i}};function NE(r,e){switch(r[0]){case"Q":{let t=e??Se;return[Se.prefix,t.decode(`${Se.prefix}${r}`)]}case Se.prefix:{let t=e??Se;return[Se.prefix,t.decode(r)]}case lt.prefix:{let t=e??lt;return[lt.prefix,t.decode(r)]}case mn.prefix:{let t=e??mn;return[mn.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function BE(r,e,t){let{prefix:n}=t;if(n!==Se.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let i=t.encode(r).slice(1);return e.set(n,i),i}else return o}function OE(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let i=t.encode(r);return e.set(n,i),i}else return o}var xa=112,ME=18;function H4(r,e,t){let n=Yi(r),o=n+Yi(e),i=new Uint8Array(o+t.byteLength);return Qi(r,i,0),Qi(e,i,n),i.set(t,o),i}var UE=Symbol.for("@ipld/js-cid/CID");var Nn={..._0,...w0,...I0,...g0,...y0,...x0,...E0,...v0,...A0,...b0},oD={...D0,...P0};function W4(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var q4=W4("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),B0=W4("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=Ge(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),FE={utf8:q4,"utf-8":q4,hex:Nn.base16,latin1:B0,ascii:B0,binary:B0,...Nn},Nl=FE;function M(r,e="utf8"){let t=Nl[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function O0(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return Ge(s);o+s>e&&(n=Ge(e),o=0);let a=n.subarray(o,o+=s);return o&7&&(o=(o|7)+1),a}}var ti=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function M0(){}var F0=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},$E=O0();function VE(r){return globalThis.Buffer!=null?Ge(r):$E(r)}var va=class{len;head;tail;states;constructor(){this.len=0,this.head=new ti(M0,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new ti(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new $0((e=e>>>0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this}int32(e){return e<0?this._push(Bl,10,pr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=pr.fromBigInt(e);return this._push(Bl,t.length(),t)}uint64Number(e){return this._push(r0,pe(e),e)}uint64String(e){return this.uint64(BigInt(e))}int64(e){return this.uint64(e)}int64Number(e){return this.uint64Number(e)}int64String(e){return this.uint64String(e)}sint64(e){let t=pr.fromBigInt(e).zzEncode();return this._push(Bl,t.length(),t)}sint64Number(e){let t=pr.fromNumber(e).zzEncode();return this._push(Bl,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(U0,1,e?1:0)}fixed32(e){return this._push(Ea,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=pr.fromBigInt(e);return this._push(Ea,4,t.lo)._push(Ea,4,t.hi)}fixed64Number(e){let t=pr.fromNumber(e);return this._push(Ea,4,t.lo)._push(Ea,4,t.hi)}fixed64String(e){return this.fixed64(BigInt(e))}sfixed64(e){return this.fixed64(e)}sfixed64Number(e){return this.fixed64Number(e)}sfixed64String(e){return this.fixed64String(e)}float(e){return this._push(x4,4,e)}double(e){return this._push(v4,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(U0,1,0):this.uint32(t)._push(HE,t,e)}string(e){let t=I4(e);return t!==0?this.uint32(t)._push(c0,t,e):this._push(U0,1,0)}fork(){return this.states=new F0(this),this.head=this.tail=new ti(M0,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new ti(M0,0,0),this.len=0),this}ldelim(){let e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n!==0&&(this.tail.next=e.next,this.tail=t,this.len+=n),this}finish(){let e=this.head.next,t=VE(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function U0(r,e,t){e[t]=r&255}function KE(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var $0=class extends ti{next;constructor(e,t){super(KE,e,t),this.next=void 0}};function Bl(r,e,t){for(;r.hi!==0;)e[t++]=r.lo&127|128,r.lo=(r.lo>>>7|r.hi<<25)>>>0,r.hi>>>=7;for(;r.lo>127;)e[t++]=r.lo&127|128,r.lo=r.lo>>>7;e[t++]=r.lo}function Ea(r,e,t){e[t]=r&255,e[t+1]=r>>>8&255,e[t+2]=r>>>16&255,e[t+3]=r>>>24}function HE(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(va.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(qE,e,r),this},va.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(WE,e,r),this});function qE(r,e,t){e.set(r,t)}function WE(r,e,t){r.length<40?c0(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(M(r),t)}function V0(){return new va}function ne(r,e){let t=V0();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Xi;(function(r){r[r.VARINT=0]="VARINT",r[r.BIT64=1]="BIT64",r[r.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",r[r.START_GROUP=3]="START_GROUP",r[r.END_GROUP=4]="END_GROUP",r[r.BIT32=5]="BIT32"})(Xi||(Xi={}));function Ol(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function He(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(i,s){let a=e(i);s.int32(a)},n=function(i){let s=i.int32();return e(s)};return Ol("enum",Xi.VARINT,t,n)}function oe(r,e){return Ol("message",Xi.LENGTH_DELIMITED,r,e)}var Me=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},Sa=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var et;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(et||(et={}));var K0;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(K0||(K0={}));(function(r){r.codec=()=>He(K0)})(et||(et={}));var ji;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.priority!=null&&t.priority!==0&&(n.uint32(16),n.int32(t.priority)),t.cancel!=null&&(n.uint32(24),n.bool(t.cancel)),t.wantType!=null&&(n.uint32(32),et.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:se(0),priority:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.priority=t.int32();break}case 3:{i.cancel=t.bool();break}case 4:{i.wantType=et.codec().decode(t);break}case 5:{i.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(ji||(ji={}));var Ml;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let i of t.entries)n.uint32(10),ji.codec().encode(i,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={entries:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.entries!=null&&i.entries.length===o.limits.entries)throw new Me('Decode error - map field "entries" had too many elements');i.entries.push(ji.codec().decode(t,t.uint32(),{limits:o.limits?.entries$}));break}case 2:{i.full=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Ml||(Ml={}));var Zi;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.prefix!=null&&t.prefix.byteLength>0&&(n.uint32(10),n.bytes(t.prefix)),t.data!=null&&t.data.byteLength>0&&(n.uint32(18),n.bytes(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={prefix:se(0),data:se(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.prefix=t.bytes();break}case 2:{i.data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Zi||(Zi={}));var Ir;(function(r){r.HaveBlock="HaveBlock",r.DontHaveBlock="DontHaveBlock"})(Ir||(Ir={}));var Ul;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DontHaveBlock=1]="DontHaveBlock"})(Ul||(Ul={}));(function(r){r.codec=()=>He(Ul)})(Ir||(Ir={}));var Ji;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.type!=null&&Ul[t.type]!==0&&(n.uint32(16),Ir.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:se(0),type:Ir.HaveBlock},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.type=Ir.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Ji||(Ji={}));var ri;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),Ml.codec().encode(t.wantlist,n)),t.blocks!=null)for(let i of t.blocks)n.uint32(26),Zi.codec().encode(i,n);if(t.blockPresences!=null)for(let i of t.blockPresences)n.uint32(34),Ji.codec().encode(i,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={blocks:[],blockPresences:[],pendingBytes:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.wantlist=Ml.codec().decode(t,t.uint32(),{limits:o.limits?.wantlist});break}case 3:{if(o.limits?.blocks!=null&&i.blocks.length===o.limits.blocks)throw new Me('Decode error - map field "blocks" had too many elements');i.blocks.push(Zi.codec().decode(t,t.uint32(),{limits:o.limits?.blocks$}));break}case 4:{if(o.limits?.blockPresences!=null&&i.blockPresences.length===o.limits.blockPresences)throw new Me('Decode error - map field "blockPresences" had too many elements');i.blockPresences.push(Ji.codec().decode(t,t.uint32(),{limits:o.limits?.blockPresences$}));break}case 5:{i.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(ri||(ri={}));function z4(r,e){for(let[t,n]of e.wantlist.entries()){let o=r.wantlist.get(t);o!=null&&(o.priority>n.priority&&(n.priority=o.priority),n.cancel=n.cancel??o.cancel,n.wantType=n.wantType??o.wantType,n.sendDontHave=n.sendDontHave??o.sendDontHave),r.wantlist.set(t,n)}for(let[t,n]of e.blockPresences.entries())r.blockPresences.set(t,n);for(let[t,n]of e.blocks.entries())r.blocks.set(t,n);return e.full&&!r.full&&(r.full=!0),r}var Fl=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var zE=4193648,GE=zE+16;function*G4(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],o=[...r.blocks.values()],i=0,s=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},d=ri.encode(l).byteLength,{added:u,hasMore:f,newSize:h}=H0(o,l.blocks,a,e,d,QE);a+=u,d=h;let p=f;({added:u,hasMore:f,newSize:h}=H0(n,l.blockPresences,s,e,d,YE)),s+=u,d=h;let m=f;if({added:u,hasMore:f,newSize:h}=H0(t,l.wantlist.entries,i,e,d,XE),i+=u,d=h,c=!p&&!m&&!f,c||(l.wantlist.full=!1),yield ri.encode(l),c)break}}function H0(r,e,t,n,o,i){let s=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],d=i(l);if(d>GE)throw new Fl("Cannot send block as after encoding it is over the max message size");let u=o+d;if(u>n){a=!0;break}e.push(l),s++,o=u}return{hasMore:a,added:s,newSize:o}}function QE(r){return q0(3,Zi.encode(r))}function YE(r){return q0(4,Ji.encode(r))}function XE(r){return q0(1,ji.encode(r))}function q0(r,e){let t=pe(r),n=pe(e.byteLength);return t+n+e.byteLength}var $l=class extends ge{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;registrarIds;metrics;sendQueue;runOnLimitedConnections;maxOutgoingMessageSize;maxIncomingMessageSize;constructor(e,t={}){super(),this.log=e.logger.forComponent("helia:bitswap:network"),this.libp2p=e.libp2p,this.routing=e.routing,this.protocols=t.protocols??[ya],this.registrarIds=[],this.running=!1,this._onStream=this._onStream.bind(this),this.maxInboundStreams=t.maxInboundStreams??1024,this.maxOutboundStreams=t.maxOutboundStreams??1024,this.messageReceiveTimeout=t.messageReceiveTimeout??5e3,this.runOnLimitedConnections=t.runOnLimitedConnections??!1,this.maxIncomingMessageSize=t.maxIncomingMessageSize??4194304,this.maxOutgoingMessageSize=t.maxOutgoingMessageSize??t.maxIncomingMessageSize??4194304,this.metrics={blocksSent:e.metrics?.registerCounter("helia_bitswap_sent_blocks_total"),dataSent:e.metrics?.registerCounter("helia_bitswap_sent_data_bytes_total")},this.sendQueue=new Ut({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"}),this.sendQueue.addEventListener("error",n=>{this.log.error("error sending wantlist to peer",n.detail)})}async start(){if(this.running)return;this.running=!0,await this.libp2p.handle(this.protocols,this._onStream,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnections});let e={onConnect:t=>{this.safeDispatchEvent("peer:connected",{detail:t})},onDisconnect:t=>{this.safeDispatchEvent("peer:disconnected",{detail:t})}};this.registrarIds=[];for(let t of this.protocols)this.registrarIds.push(await this.libp2p.register(t,e));this.libp2p.getConnections().forEach(t=>{this.safeDispatchEvent("peer:connected",{detail:t.remotePeer})})}async stop(){if(this.running=!1,await this.libp2p.unhandle(this.protocols),this.registrarIds!=null){for(let e of this.registrarIds)this.libp2p.unregister(e);this.registrarIds=[]}}_onStream(e){if(!this.running)return;let{stream:t,connection:n}=e;Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",t.protocol,n.remotePeer);let o=()=>{t.status==="open"?t.abort(new Ur(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",t.status)},i=AbortSignal.timeout(this.messageReceiveTimeout);$(1/0,i),i.addEventListener("abort",o),await t.closeWrite(),await Je(t,s=>Xt(s,{maxDataLength:this.maxIncomingMessageSize}),async s=>{for await(let a of s)try{let c=ri.decode(a);this.log("incoming new bitswap %s message from %p on stream",t.protocol,n.remotePeer,t.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),i.removeEventListener("abort",o),i=AbortSignal.timeout(this.messageReceiveTimeout),$(1/0,i),i.addEventListener("abort",o)}catch(c){this.log.error("error reading incoming bitswap message from %p on stream",n.remotePeer,t.id,c),t.abort(c);break}})}).catch(o=>{this.log.error("error handling incoming stream from %p",n.remotePeer,o),t.abort(o)})}async*findProviders(e,t){t?.onProgress?.(new H("bitswap:network:find-providers",e));for await(let n of this.routing.findProviders(e,t))await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})&&(yield n)}async findAndConnect(e,t){await Ct(jt(uo(this.findProviders(e,t),t?.maxProviders??3),async n=>this.connectTo(n.id,t))).catch(n=>{this.log.error(n)})}async sendMessage(e,t,n){if(!this.running)throw new Error("network isn't running");let o=this.sendQueue.queue.find(i=>e.equals(i.options.peerId)&&i.status==="queued");if(o!=null){o.options.message=z4(o.options.message,t),await o.join({signal:n?.signal});return}await this.sendQueue.add(async i=>{let s=i?.message;if(s==null)throw new C("No message to send");this.log("sendMessage to %p",e),i?.onProgress?.(new H("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,ya,i);await a.closeRead();try{await Je(G4(s,this.maxOutgoingMessageSize),c=>Yt(c),a),await a.close(i)}catch(c){i?.onProgress?.(new H("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p",e,c),a.abort(c)}this._updateSentStats(s.blocks)},{peerId:e,signal:n?.signal,message:t})}async connectTo(e,t){if(!this.running)throw new Fr("Network isn't running");t?.onProgress?.(new H("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),hr(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(ya))return!0;throw new Ln(`${e} did not support ${ya}`)}})]);return n}_updateSentStats(e){let t=0;for(let n of e.values())t+=n.data.byteLength;this.metrics.dataSent?.increment(t),this.metrics.blocksSent?.increment(e.size)}};function po(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function iv(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function es(r,...e){if(!iv(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function ni(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");po(r.outputLen),po(r.blockLen)}function ts(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function Q4(r,e){es(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var oi=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;var ii=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),qr=(r,e)=>r<<32-e|r>>>e,Vl=(r,e)=>r<<e|r>>>32-e>>>0,sN=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;var sv=async()=>{};async function Y4(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let i=Date.now()-n;i>=0&&i<e||(await sv(),n+=i)}}function X4(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Wr(r){return typeof r=="string"&&(r=X4(r)),es(r),r}function W0(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];es(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}var rs=class{clone(){return this._cloneInto()}},av={}.toString;function j4(r,e){if(e!==void 0&&av.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function ns(r){let e=n=>r().update(Wr(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function si(r=32){if(oi&&typeof oi.getRandomValues=="function")return oi.getRandomValues(new Uint8Array(r));if(oi&&typeof oi.randomBytes=="function")return oi.randomBytes(r);throw new Error("crypto.getRandomValues must be defined")}function cv(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}var Kl=(r,e,t)=>r&e^~r&t,Hl=(r,e,t)=>r&e^r&t^e&t,mo=class extends rs{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=ii(this.buffer)}update(e){ts(this);let{view:t,buffer:n,blockLen:o}=this;e=Wr(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=ii(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ts(this),Q4(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let u=s;u<o;u++)t[u]=0;cv(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=ii(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,d=this.get();if(l>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=s,o%t&&e.buffer.set(n),e}};var ql=BigInt(4294967295),z0=BigInt(32);function Z4(r,e=!1){return e?{h:Number(r&ql),l:Number(r>>z0&ql)}:{h:Number(r>>z0&ql)|0,l:Number(r&ql)|0}}function lv(r,e=!1){let t=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let o=0;o<r.length;o++){let{h:i,l:s}=Z4(r[o],e);[t[o],n[o]]=[i,s]}return[t,n]}var uv=(r,e)=>BigInt(r>>>0)<<z0|BigInt(e>>>0),dv=(r,e,t)=>r>>>t,fv=(r,e,t)=>r<<32-t|e>>>t,hv=(r,e,t)=>r>>>t|e<<32-t,pv=(r,e,t)=>r<<32-t|e>>>t,mv=(r,e,t)=>r<<64-t|e>>>t-32,gv=(r,e,t)=>r>>>t-32|e<<64-t,yv=(r,e)=>e,wv=(r,e)=>r,bv=(r,e,t)=>r<<t|e>>>32-t,xv=(r,e,t)=>e<<t|r>>>32-t,Ev=(r,e,t)=>e<<t-32|r>>>64-t,vv=(r,e,t)=>r<<t-32|e>>>64-t;function Sv(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var Av=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),Iv=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,_v=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),Tv=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,kv=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),Cv=(r,e,t,n,o,i)=>e+t+n+o+i+(r/2**32|0)|0;var Pv={fromBig:Z4,split:lv,toBig:uv,shrSH:dv,shrSL:fv,rotrSH:hv,rotrSL:pv,rotrBH:mv,rotrBL:gv,rotr32H:yv,rotr32L:wv,rotlSH:bv,rotlSL:xv,rotlBH:Ev,rotlBL:vv,add:Sv,add3L:Av,add3H:Iv,add4L:_v,add4H:Tv,add5H:Cv,add5L:kv},ue=Pv;var[Rv,Lv]=ue.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(r=>BigInt(r))),go=new Uint32Array(80),yo=new Uint32Array(80),G0=class extends mo{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:i,Cl:s,Dh:a,Dl:c,Eh:l,El:d,Fh:u,Fl:f,Gh:h,Gl:p,Hh:m,Hl:g}=this;return[e,t,n,o,i,s,a,c,l,d,u,f,h,p,m,g]}set(e,t,n,o,i,s,a,c,l,d,u,f,h,p,m,g){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=i|0,this.Cl=s|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=d|0,this.Fh=u|0,this.Fl=f|0,this.Gh=h|0,this.Gl=p|0,this.Hh=m|0,this.Hl=g|0}process(e,t){for(let w=0;w<16;w++,t+=4)go[w]=e.getUint32(t),yo[w]=e.getUint32(t+=4);for(let w=16;w<80;w++){let x=go[w-15]|0,T=yo[w-15]|0,k=ue.rotrSH(x,T,1)^ue.rotrSH(x,T,8)^ue.shrSH(x,T,7),v=ue.rotrSL(x,T,1)^ue.rotrSL(x,T,8)^ue.shrSL(x,T,7),S=go[w-2]|0,_=yo[w-2]|0,F=ue.rotrSH(S,_,19)^ue.rotrBH(S,_,61)^ue.shrSH(S,_,6),N=ue.rotrSL(S,_,19)^ue.rotrBL(S,_,61)^ue.shrSL(S,_,6),O=ue.add4L(v,N,yo[w-7],yo[w-16]),B=ue.add4H(O,k,F,go[w-7],go[w-16]);go[w]=B|0,yo[w]=O|0}let{Ah:n,Al:o,Bh:i,Bl:s,Ch:a,Cl:c,Dh:l,Dl:d,Eh:u,El:f,Fh:h,Fl:p,Gh:m,Gl:g,Hh:y,Hl:b}=this;for(let w=0;w<80;w++){let x=ue.rotrSH(u,f,14)^ue.rotrSH(u,f,18)^ue.rotrBH(u,f,41),T=ue.rotrSL(u,f,14)^ue.rotrSL(u,f,18)^ue.rotrBL(u,f,41),k=u&h^~u&m,v=f&p^~f&g,S=ue.add5L(b,T,v,Lv[w],yo[w]),_=ue.add5H(S,y,x,k,Rv[w],go[w]),F=S|0,N=ue.rotrSH(n,o,28)^ue.rotrBH(n,o,34)^ue.rotrBH(n,o,39),O=ue.rotrSL(n,o,28)^ue.rotrBL(n,o,34)^ue.rotrBL(n,o,39),B=n&i^n&a^i&a,L=o&s^o&c^s&c;y=m|0,b=g|0,m=h|0,g=p|0,h=u|0,p=f|0,{h:u,l:f}=ue.add(l|0,d|0,_|0,F|0),l=a|0,d=c|0,a=i|0,c=s|0,i=n|0,s=o|0;let D=ue.add3L(F,O,L);n=ue.add3H(D,_,N,B),o=D|0}({h:n,l:o}=ue.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:i,l:s}=ue.add(this.Bh|0,this.Bl|0,i|0,s|0),{h:a,l:c}=ue.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=ue.add(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=ue.add(this.Eh|0,this.El|0,u|0,f|0),{h,l:p}=ue.add(this.Fh|0,this.Fl|0,h|0,p|0),{h:m,l:g}=ue.add(this.Gh|0,this.Gl|0,m|0,g|0),{h:y,l:b}=ue.add(this.Hh|0,this.Hl|0,y|0,b|0),this.set(n,o,i,s,a,c,l,d,u,f,h,p,m,g,y,b)}roundClean(){go.fill(0),yo.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var wo=ns(()=>new G0);var zl={};Xe(zl,{aInRange:()=>bt,abool:()=>zr,abytes:()=>os,bitGet:()=>Uv,bitLen:()=>Z0,bitMask:()=>Ia,bitSet:()=>Fv,bytesToHex:()=>On,bytesToNumberBE:()=>Mn,bytesToNumberLE:()=>Gr,concatBytes:()=>Fn,createHmacDrbg:()=>J0,ensureBytes:()=>Ue,equalBytes:()=>Ov,hexToBytes:()=>ci,hexToNumber:()=>j0,inRange:()=>Aa,isBytes:()=>bo,memoized:()=>li,notImplemented:()=>Vv,numberToBytesBE:()=>xo,numberToBytesLE:()=>Un,numberToHexUnpadded:()=>ai,numberToVarBytesBE:()=>Bv,utf8ToBytes:()=>Mv,validateObject:()=>_r});var X0=BigInt(0),Wl=BigInt(1),Dv=BigInt(2);function bo(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function os(r){if(!bo(r))throw new Error("Uint8Array expected")}function zr(r,e){if(typeof e!="boolean")throw new Error(`${r} must be valid boolean, got "${e}".`)}var Nv=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function On(r){os(r);let e="";for(let t=0;t<r.length;t++)e+=Nv[r[t]];return e}function ai(r){let e=r.toString(16);return e.length&1?`0${e}`:e}function j0(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return BigInt(r===""?"0":`0x${r}`)}var Bn={_0:48,_9:57,_A:65,_F:70,_a:97,_f:102};function J4(r){if(r>=Bn._0&&r<=Bn._9)return r-Bn._0;if(r>=Bn._A&&r<=Bn._F)return r-(Bn._A-10);if(r>=Bn._a&&r<=Bn._f)return r-(Bn._a-10)}function ci(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let o=0,i=0;o<t;o++,i+=2){let s=J4(r.charCodeAt(i)),a=J4(r.charCodeAt(i+1));if(s===void 0||a===void 0){let c=r[i]+r[i+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+i)}n[o]=s*16+a}return n}function Mn(r){return j0(On(r))}function Gr(r){return os(r),j0(On(Uint8Array.from(r).reverse()))}function xo(r,e){return ci(r.toString(16).padStart(e*2,"0"))}function Un(r,e){return xo(r,e).reverse()}function Bv(r){return ci(ai(r))}function Ue(r,e,t){let n;if(typeof e=="string")try{n=ci(e)}catch(i){throw new Error(`${r} must be valid hex string, got "${e}". Cause: ${i}`)}else if(bo(e))n=Uint8Array.from(e);else throw new Error(`${r} must be hex string or Uint8Array`);let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(`${r} expected ${t} bytes, got ${o}`);return n}function Fn(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];os(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}function Ov(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}function Mv(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}var Q0=r=>typeof r=="bigint"&&X0<=r;function Aa(r,e,t){return Q0(r)&&Q0(e)&&Q0(t)&&e<=r&&r<t}function bt(r,e,t,n){if(!Aa(e,t,n))throw new Error(`expected valid ${r}: ${t} <= n < ${n}, got ${typeof e} ${e}`)}function Z0(r){let e;for(e=0;r>X0;r>>=Wl,e+=1);return e}function Uv(r,e){return r>>BigInt(e)&Wl}function Fv(r,e,t){return r|(t?Wl:X0)<<BigInt(e)}var Ia=r=>(Dv<<BigInt(r-1))-Wl,Y0=r=>new Uint8Array(r),e6=r=>Uint8Array.from(r);function J0(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=Y0(r),o=Y0(r),i=0,s=()=>{n.fill(1),o.fill(0),i=0},a=(...u)=>t(o,n,...u),c=(u=Y0())=>{o=a(e6([0]),u),n=a(),u.length!==0&&(o=a(e6([1]),u),n=a())},l=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let u=0,f=[];for(;u<e;){n=a();let h=n.slice();f.push(h),u+=n.length}return Fn(...f)};return(u,f)=>{s(),c(u);let h;for(;!(h=f(l()));)c();return s(),h}}var $v={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||bo(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function _r(r,e,t={}){let n=(o,i,s)=>{let a=$v[i];if(typeof a!="function")throw new Error(`Invalid validator "${i}", expected function`);let c=r[o];if(!(s&&c===void 0)&&!a(c,r))throw new Error(`Invalid param ${String(o)}=${c} (${typeof c}), expected ${i}`)};for(let[o,i]of Object.entries(e))n(o,i,!1);for(let[o,i]of Object.entries(t))n(o,i,!0);return r}var Vv=()=>{throw new Error("not implemented")};function li(r){let e=new WeakMap;return(t,...n)=>{let o=e.get(t);if(o!==void 0)return o;let i=r(t,...n);return e.set(t,i),i}}var dt=BigInt(0),qe=BigInt(1),ui=BigInt(2),Kv=BigInt(3),e2=BigInt(4),t6=BigInt(5),r6=BigInt(8),Hv=BigInt(9),qv=BigInt(16);function _e(r,e){let t=r%e;return t>=dt?t:e+t}function t2(r,e,t){if(t<=dt||e<dt)throw new Error("Expected power/modulo > 0");if(t===qe)return dt;let n=qe;for(;e>dt;)e&qe&&(n=n*r%t),r=r*r%t,e>>=qe;return n}function Fe(r,e,t){let n=r;for(;e-- >dt;)n*=n,n%=t;return n}function Gl(r,e){if(r===dt||e<=dt)throw new Error(`invert: expected positive integers, got n=${r} mod=${e}`);let t=_e(r,e),n=e,o=dt,i=qe,s=qe,a=dt;for(;t!==dt;){let l=n/t,d=n%t,u=o-s*l,f=i-a*l;n=t,t=d,o=s,i=a,s=u,a=f}if(n!==qe)throw new Error("invert: does not exist");return _e(o,e)}function Wv(r){let e=(r-qe)/ui,t,n,o;for(t=r-qe,n=0;t%ui===dt;t/=ui,n++);for(o=ui;o<r&&t2(o,e,r)!==r-qe;o++);if(n===1){let s=(r+qe)/e2;return function(c,l){let d=c.pow(l,s);if(!c.eql(c.sqr(d),l))throw new Error("Cannot find square root");return d}}let i=(t+qe)/ui;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,d=a.pow(a.mul(a.ONE,o),t),u=a.pow(c,i),f=a.pow(c,t);for(;!a.eql(f,a.ONE);){if(a.eql(f,a.ZERO))return a.ZERO;let h=1;for(let m=a.sqr(f);h<l&&!a.eql(m,a.ONE);h++)m=a.sqr(m);let p=a.pow(d,qe<<BigInt(l-h-1));d=a.sqr(p),u=a.mul(u,p),f=a.mul(f,d),l=h}return u}}function zv(r){if(r%e2===Kv){let e=(r+qe)/e2;return function(n,o){let i=n.pow(o,e);if(!n.eql(n.sqr(i),o))throw new Error("Cannot find square root");return i}}if(r%r6===t6){let e=(r-t6)/r6;return function(n,o){let i=n.mul(o,ui),s=n.pow(i,e),a=n.mul(o,s),c=n.mul(n.mul(a,ui),s),l=n.mul(a,n.sub(c,n.ONE));if(!n.eql(n.sqr(l),o))throw new Error("Cannot find square root");return l}}return r%qv,Wv(r)}var n6=(r,e)=>(_e(r,e)&qe)===qe,Gv=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function r2(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=Gv.reduce((n,o)=>(n[o]="function",n),e);return _r(r,t)}function Qv(r,e,t){if(t<dt)throw new Error("Expected power > 0");if(t===dt)return r.ONE;if(t===qe)return e;let n=r.ONE,o=e;for(;t>dt;)t&qe&&(n=r.mul(n,o)),o=r.sqr(o),t>>=qe;return n}function Yv(r,e){let t=new Array(e.length),n=e.reduce((i,s,a)=>r.is0(s)?i:(t[a]=i,r.mul(i,s)),r.ONE),o=r.inv(n);return e.reduceRight((i,s,a)=>r.is0(s)?i:(t[a]=r.mul(i,t[a]),r.mul(i,s)),o),t}function n2(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function Eo(r,e,t=!1,n={}){if(r<=dt)throw new Error(`Expected Field ORDER > 0, got ${r}`);let{nBitLength:o,nByteLength:i}=n2(r,e);if(i>2048)throw new Error("Field lengths over 2048 bytes are not supported");let s=zv(r),a=Object.freeze({ORDER:r,BITS:o,BYTES:i,MASK:Ia(o),ZERO:dt,ONE:qe,create:c=>_e(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return dt<=c&&c<r},is0:c=>c===dt,isOdd:c=>(c&qe)===qe,neg:c=>_e(-c,r),eql:(c,l)=>c===l,sqr:c=>_e(c*c,r),add:(c,l)=>_e(c+l,r),sub:(c,l)=>_e(c-l,r),mul:(c,l)=>_e(c*l,r),pow:(c,l)=>Qv(a,c,l),div:(c,l)=>_e(c*Gl(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>Gl(c,r),sqrt:n.sqrt||(c=>s(a,c)),invertBatch:c=>Yv(a,c),cmov:(c,l,d)=>d?l:c,toBytes:c=>t?Un(c,i):xo(c,i),fromBytes:c=>{if(c.length!==i)throw new Error(`Fp.fromBytes: expected ${i}, got ${c.length}`);return t?Gr(c):Mn(c)}});return Object.freeze(a)}function o6(r){if(typeof r!="bigint")throw new Error("field order must be bigint");let e=r.toString(2).length;return Math.ceil(e/8)}function o2(r){let e=o6(r);return e+Math.ceil(e/2)}function i6(r,e,t=!1){let n=r.length,o=o6(e),i=o2(e);if(n<16||n<i||n>1024)throw new Error(`expected ${i}-1024 bytes of input, got ${n}`);let s=t?Mn(r):Gr(r),a=_e(s,e-qe)+qe;return t?Un(a,o):xo(a,o)}var jv=BigInt(0),i2=BigInt(1),s2=new WeakMap,s6=new WeakMap;function Ql(r,e){let t=(i,s)=>{let a=s.negate();return i?a:s},n=i=>{if(!Number.isSafeInteger(i)||i<=0||i>e)throw new Error(`Wrong window size=${i}, should be [1..${e}]`)},o=i=>{n(i);let s=Math.ceil(e/i)+1,a=2**(i-1);return{windows:s,windowSize:a}};return{constTimeNegate:t,unsafeLadder(i,s){let a=r.ZERO,c=i;for(;s>jv;)s&i2&&(a=a.add(c)),c=c.double(),s>>=i2;return a},precomputeWindow(i,s){let{windows:a,windowSize:c}=o(s),l=[],d=i,u=d;for(let f=0;f<a;f++){u=d,l.push(u);for(let h=1;h<c;h++)u=u.add(d),l.push(u);d=u.double()}return l},wNAF(i,s,a){let{windows:c,windowSize:l}=o(i),d=r.ZERO,u=r.BASE,f=BigInt(2**i-1),h=2**i,p=BigInt(i);for(let m=0;m<c;m++){let g=m*l,y=Number(a&f);a>>=p,y>l&&(y-=h,a+=i2);let b=g,w=g+Math.abs(y)-1,x=m%2!==0,T=y<0;y===0?u=u.add(t(x,s[b])):d=d.add(t(T,s[w]))}return{p:d,f:u}},wNAFCached(i,s,a){let c=s6.get(i)||1,l=s2.get(i);return l||(l=this.precomputeWindow(i,c),c!==1&&s2.set(i,a(l))),this.wNAF(c,l,s)},setWindowSize(i,s){n(s),s6.set(i,s),s2.delete(i)}}}function Yl(r,e,t,n){if(!Array.isArray(t)||!Array.isArray(n)||n.length!==t.length)throw new Error("arrays of points and scalars must have equal length");n.forEach((d,u)=>{if(!e.isValid(d))throw new Error(`wrong scalar at index ${u}`)}),t.forEach((d,u)=>{if(!(d instanceof r))throw new Error(`wrong point at index ${u}`)});let o=Z0(BigInt(t.length)),i=o>12?o-3:o>4?o-2:o?2:1,s=(1<<i)-1,a=new Array(s+1).fill(r.ZERO),c=Math.floor((e.BITS-1)/i)*i,l=r.ZERO;for(let d=c;d>=0;d-=i){a.fill(r.ZERO);for(let f=0;f<n.length;f++){let h=n[f],p=Number(h>>BigInt(d)&BigInt(s));a[p]=a[p].add(t[f])}let u=r.ZERO;for(let f=a.length-1,h=r.ZERO;f>0;f--)h=h.add(a[f]),u=u.add(h);if(l=l.add(u),d!==0)for(let f=0;f<i;f++)l=l.double()}return l}function _a(r){return r2(r.Fp),_r(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...n2(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Qr=BigInt(0),er=BigInt(1),Xl=BigInt(2),Zv=BigInt(8),Jv={zip215:!0};function eS(r){let e=_a(r);return _r(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function a6(r){let e=eS(r),{Fp:t,n,prehash:o,hash:i,randomBytes:s,nByteLength:a,h:c}=e,l=Xl<<BigInt(a*8)-er,d=t.create,u=Eo(e.n,e.nBitLength),f=e.uvRatio||((I,A)=>{try{return{isValid:!0,value:t.sqrt(I*t.inv(A))}}catch{return{isValid:!1,value:Qr}}}),h=e.adjustScalarBytes||(I=>I),p=e.domain||((I,A,R)=>{if(zr("phflag",R),A.length||R)throw new Error("Contexts/pre-hash are not supported");return I});function m(I,A){bt("coordinate "+I,A,Qr,l)}function g(I){if(!(I instanceof w))throw new Error("ExtendedPoint expected")}let y=li((I,A)=>{let{ex:R,ey:P,ez:q}=I,z=I.is0();A==null&&(A=z?Zv:t.inv(q));let Z=d(R*A),ae=d(P*A),ce=d(q*A);if(z)return{x:Qr,y:er};if(ce!==er)throw new Error("invZ was invalid");return{x:Z,y:ae}}),b=li(I=>{let{a:A,d:R}=e;if(I.is0())throw new Error("bad point: ZERO");let{ex:P,ey:q,ez:z,et:Z}=I,ae=d(P*P),ce=d(q*q),fe=d(z*z),ve=d(fe*fe),Ne=d(ae*A),Be=d(fe*d(Ne+ce)),Ve=d(ve+d(R*d(ae*ce)));if(Be!==Ve)throw new Error("bad point: equation left != right (1)");let Ot=d(P*q),at=d(z*Z);if(Ot!==at)throw new Error("bad point: equation left != right (2)");return!0});class w{constructor(A,R,P,q){this.ex=A,this.ey=R,this.ez=P,this.et=q,m("x",A),m("y",R),m("z",P),m("t",q),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(A){if(A instanceof w)throw new Error("extended point not allowed");let{x:R,y:P}=A||{};return m("x",R),m("y",P),new w(R,P,er,d(R*P))}static normalizeZ(A){let R=t.invertBatch(A.map(P=>P.ez));return A.map((P,q)=>P.toAffine(R[q])).map(w.fromAffine)}static msm(A,R){return Yl(w,u,A,R)}_setWindowSize(A){k.setWindowSize(this,A)}assertValidity(){b(this)}equals(A){g(A);let{ex:R,ey:P,ez:q}=this,{ex:z,ey:Z,ez:ae}=A,ce=d(R*ae),fe=d(z*q),ve=d(P*ae),Ne=d(Z*q);return ce===fe&&ve===Ne}is0(){return this.equals(w.ZERO)}negate(){return new w(d(-this.ex),this.ey,this.ez,d(-this.et))}double(){let{a:A}=e,{ex:R,ey:P,ez:q}=this,z=d(R*R),Z=d(P*P),ae=d(Xl*d(q*q)),ce=d(A*z),fe=R+P,ve=d(d(fe*fe)-z-Z),Ne=ce+Z,Be=Ne-ae,Ve=ce-Z,Ot=d(ve*Be),at=d(Ne*Ve),Qt=d(ve*Ve),Pn=d(Be*Ne);return new w(Ot,at,Pn,Qt)}add(A){g(A);let{a:R,d:P}=e,{ex:q,ey:z,ez:Z,et:ae}=this,{ex:ce,ey:fe,ez:ve,et:Ne}=A;if(R===BigInt(-1)){let a4=d((z-q)*(fe+ce)),c4=d((z+q)*(fe-ce)),Yh=d(c4-a4);if(Yh===Qr)return this.double();let l4=d(Z*Xl*Ne),u4=d(ae*Xl*ve),d4=u4+l4,f4=c4+a4,h4=u4-l4,Zb=d(d4*Yh),Jb=d(f4*h4),ex=d(d4*h4),tx=d(Yh*f4);return new w(Zb,Jb,tx,ex)}let Be=d(q*ce),Ve=d(z*fe),Ot=d(ae*P*Ne),at=d(Z*ve),Qt=d((q+z)*(ce+fe)-Be-Ve),Pn=at-Ot,ha=at+Ot,pa=d(Ve-R*Be),Qb=d(Qt*Pn),Yb=d(ha*pa),Xb=d(Qt*pa),jb=d(Pn*ha);return new w(Qb,Yb,jb,Xb)}subtract(A){return this.add(A.negate())}wNAF(A){return k.wNAFCached(this,A,w.normalizeZ)}multiply(A){let R=A;bt("scalar",R,er,n);let{p:P,f:q}=this.wNAF(R);return w.normalizeZ([P,q])[0]}multiplyUnsafe(A){let R=A;return bt("scalar",R,Qr,n),R===Qr?T:this.equals(T)||R===er?this:this.equals(x)?this.wNAF(R).p:k.unsafeLadder(this,R)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return k.unsafeLadder(this,n).is0()}toAffine(A){return y(this,A)}clearCofactor(){let{h:A}=e;return A===er?this:this.multiplyUnsafe(A)}static fromHex(A,R=!1){let{d:P,a:q}=e,z=t.BYTES;A=Ue("pointHex",A,z),zr("zip215",R);let Z=A.slice(),ae=A[z-1];Z[z-1]=ae&-129;let ce=Gr(Z),fe=R?l:t.ORDER;bt("pointHex.y",ce,Qr,fe);let ve=d(ce*ce),Ne=d(ve-er),Be=d(P*ve-q),{isValid:Ve,value:Ot}=f(Ne,Be);if(!Ve)throw new Error("Point.fromHex: invalid y coordinate");let at=(Ot&er)===er,Qt=(ae&128)!==0;if(!R&&Ot===Qr&&Qt)throw new Error("Point.fromHex: x=0 and x_0=1");return Qt!==at&&(Ot=d(-Ot)),w.fromAffine({x:Ot,y:ce})}static fromPrivateKey(A){return _(A).point}toRawBytes(){let{x:A,y:R}=this.toAffine(),P=Un(R,t.BYTES);return P[P.length-1]|=A&er?128:0,P}toHex(){return On(this.toRawBytes())}}w.BASE=new w(e.Gx,e.Gy,er,d(e.Gx*e.Gy)),w.ZERO=new w(Qr,er,er,Qr);let{BASE:x,ZERO:T}=w,k=Ql(w,a*8);function v(I){return _e(I,n)}function S(I){return v(Gr(I))}function _(I){let A=a;I=Ue("private key",I,A);let R=Ue("hashed private key",i(I),2*A),P=h(R.slice(0,A)),q=R.slice(A,2*A),z=S(P),Z=x.multiply(z),ae=Z.toRawBytes();return{head:P,prefix:q,scalar:z,point:Z,pointBytes:ae}}function F(I){return _(I).pointBytes}function N(I=new Uint8Array,...A){let R=Fn(...A);return S(i(p(R,Ue("context",I),!!o)))}function O(I,A,R={}){I=Ue("message",I),o&&(I=o(I));let{prefix:P,scalar:q,pointBytes:z}=_(A),Z=N(R.context,P,I),ae=x.multiply(Z).toRawBytes(),ce=N(R.context,ae,z,I),fe=v(Z+ce*q);bt("signature.s",fe,Qr,n);let ve=Fn(ae,Un(fe,t.BYTES));return Ue("result",ve,a*2)}let B=Jv;function L(I,A,R,P=B){let{context:q,zip215:z}=P,Z=t.BYTES;I=Ue("signature",I,2*Z),A=Ue("message",A),z!==void 0&&zr("zip215",z),o&&(A=o(A));let ae=Gr(I.slice(Z,2*Z)),ce,fe,ve;try{ce=w.fromHex(R,z),fe=w.fromHex(I.slice(0,Z),z),ve=x.multiplyUnsafe(ae)}catch{return!1}if(!z&&ce.isSmallOrder())return!1;let Ne=N(q,fe.toRawBytes(),ce.toRawBytes(),A);return fe.add(ce.multiplyUnsafe(Ne)).subtract(ve).clearCofactor().equals(w.ZERO)}return x._setWindowSize(8),{CURVE:e,getPublicKey:F,sign:O,verify:L,ExtendedPoint:w,utils:{getExtendedPublicKey:_,randomPrivateKey:()=>s(t.BYTES),precompute(I=8,A=w.BASE){return A._setWindowSize(I),A.multiply(BigInt(3)),A}}}}var is=BigInt(0),a2=BigInt(1);function tS(r){return _r(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function c6(r){let e=tS(r),{P:t}=e,n=b=>_e(b,t),o=e.montgomeryBits,i=Math.ceil(o/8),s=e.nByteLength,a=e.adjustScalarBytes||(b=>b),c=e.powPminus2||(b=>t2(b,t-BigInt(2),t));function l(b,w,x){let T=n(b*(w-x));return w=n(w-T),x=n(x+T),[w,x]}let d=(e.a-BigInt(2))/BigInt(4);function u(b,w){bt("u",b,is,t),bt("scalar",w,is,t);let x=w,T=b,k=a2,v=is,S=b,_=a2,F=is,N;for(let B=BigInt(o-1);B>=is;B--){let L=x>>B&a2;F^=L,N=l(F,k,S),k=N[0],S=N[1],N=l(F,v,_),v=N[0],_=N[1],F=L;let D=k+v,I=n(D*D),A=k-v,R=n(A*A),P=I-R,q=S+_,z=S-_,Z=n(z*D),ae=n(q*A),ce=Z+ae,fe=Z-ae;S=n(ce*ce),_=n(T*n(fe*fe)),k=n(I*R),v=n(P*(I+n(d*P)))}N=l(F,k,S),k=N[0],S=N[1],N=l(F,v,_),v=N[0],_=N[1];let O=c(v);return n(k*O)}function f(b){return Un(n(b),i)}function h(b){let w=Ue("u coordinate",b,i);return s===32&&(w[31]&=127),Gr(w)}function p(b){let w=Ue("scalar",b),x=w.length;if(x!==i&&x!==s)throw new Error(`Expected ${i} or ${s} bytes, got ${x}`);return Gr(a(w))}function m(b,w){let x=h(w),T=p(b),k=u(x,T);if(k===is)throw new Error("Invalid private or public key received");return f(k)}let g=f(e.Gu);function y(b){return m(b,g)}return{scalarMult:m,scalarMultBase:y,getSharedSecret:(b,w)=>m(b,w),getPublicKey:b=>y(b),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:g}}var Ta=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),l6=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),DN=BigInt(0),rS=BigInt(1),u6=BigInt(2),nS=BigInt(3),oS=BigInt(5),iS=BigInt(8);function d6(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),i=Ta,a=r*r%i*r%i,c=Fe(a,u6,i)*a%i,l=Fe(c,rS,i)*r%i,d=Fe(l,oS,i)*l%i,u=Fe(d,e,i)*d%i,f=Fe(u,t,i)*u%i,h=Fe(f,n,i)*f%i,p=Fe(h,o,i)*h%i,m=Fe(p,o,i)*h%i,g=Fe(m,e,i)*d%i;return{pow_p_5_8:Fe(g,u6,i)*r%i,b2:a}}function f6(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function sS(r,e){let t=Ta,n=_e(e*e*e,t),o=_e(n*n*e,t),i=d6(r*o).pow_p_5_8,s=_e(r*n*i,t),a=_e(e*s*s,t),c=s,l=_e(s*l6,t),d=a===r,u=a===_e(-r,t),f=a===_e(-r*l6,t);return d&&(s=c),(u||f)&&(s=l),n6(s,t)&&(s=_e(-s,t)),{isValid:d||u,value:s}}var aS=Eo(Ta,void 0,!0),cS={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:aS,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:iS,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:wo,randomBytes:si,adjustScalarBytes:f6,uvRatio:sS},ka=a6(cS);var Ca=c6({P:Ta,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=Ta,{pow_p_5_8:t,b2:n}=d6(r);return _e(Fe(t,nS,e)*n,e)},adjustScalarBytes:f6,randomBytes:si});var ss=32,gn=64,c2=32;function h6(){let r=ka.utils.randomPrivateKey(),e=ka.getPublicKey(r);return{privateKey:lS(r,e),publicKey:e}}function p6(r,e){let t=r.subarray(0,c2);return ka.sign(e instanceof Uint8Array?e:e.subarray(),t)}function m6(r,e,t){return ka.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function lS(r,e){let t=new Uint8Array(gn);for(let n=0;n<c2;n++)t[n]=r[n],t[c2+n]=e[n];return t}var Pa=class{type="Ed25519";raw;constructor(e){this.raw=cs(e,ss)}toMultihash(){return Jt.digest(Lt(this))}toCID(){return X.createV1(114,this.toMultihash())}toString(){return Se.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}verify(e,t){return m6(this.raw,t,e)}},as=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=cs(e,gn),this.publicKey=new Pa(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}sign(e){return p6(this.raw,e)}};function l2(r){if(r.length>gn){r=cs(r,gn+ss);let n=r.subarray(0,gn),o=r.subarray(gn,r.length);return new as(n,o)}r=cs(r,gn);let e=r.subarray(0,gn),t=r.subarray(ss);return new as(e,t)}function u2(r){return r=cs(r,ss),new Pa(r)}async function y6(){let{privateKey:r,publicKey:e}=h6();return new as(r,e)}function cs(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new C(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var Ye;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1"})(Ye||(Ye={}));var d2;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1"})(d2||(d2={}));(function(r){r.codec=()=>He(d2)})(Ye||(Ye={}));var yn;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ye.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.Type=Ye.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(yn||(yn={}));var Ra;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ye.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.Type=Ye.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Ra||(Ra={}));var Ka={};Xe(Ka,{MAX_RSA_KEY_SIZE:()=>$u,generateRSAKeyPair:()=>v2,jwkToJWKKeyPair:()=>h8,jwkToPkcs1:()=>AS,jwkToPkix:()=>x2,jwkToRSAPrivateKey:()=>f8,pkcs1ToJwk:()=>u8,pkcs1ToRSAPrivateKey:()=>Vu,pkixToJwk:()=>d8,pkixToRSAPublicKey:()=>E2});var uS=new Uint32Array([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]),vo=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),So=new Uint32Array(64),f2=class extends mo{constructor(){super(64,32,8,!1),this.A=vo[0]|0,this.B=vo[1]|0,this.C=vo[2]|0,this.D=vo[3]|0,this.E=vo[4]|0,this.F=vo[5]|0,this.G=vo[6]|0,this.H=vo[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let u=0;u<16;u++,t+=4)So[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let f=So[u-15],h=So[u-2],p=qr(f,7)^qr(f,18)^f>>>3,m=qr(h,17)^qr(h,19)^h>>>10;So[u]=m+So[u-7]+p+So[u-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){let f=qr(a,6)^qr(a,11)^qr(a,25),h=d+f+Kl(a,c,l)+uS[u]+So[u]|0,m=(qr(n,2)^qr(n,13)^qr(n,22))+Hl(n,o,i)|0;d=l,l=c,c=a,a=s+h|0,s=i,i=o,o=n,n=h+m|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(n,o,i,s,a,c,l,d)}roundClean(){So.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Tr=ns(()=>new f2);var ye=fr(b6());function di(r,e){let t=0;if(r.length===1)return r[0];for(let n=r.length-1;n>=0;n--)t+=r[r.length-1-n]*Math.pow(2,e*n);return t}function Ao(r,e,t=-1){let n=t,o=r,i=0,s=Math.pow(2,e);for(let a=1;a<8;a++){if(r<s){let c;if(n<0)c=new ArrayBuffer(a),i=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),i=n}let l=new Uint8Array(c);for(let d=a-1;d>=0;d--){let u=Math.pow(2,d*e);l[i-d-1]=Math.floor(o/u),o-=l[i-d-1]*u}return c}s*=Math.pow(2,e)}return new ArrayBuffer(0)}function Jl(...r){let e=0,t=0;for(let i of r)e+=i.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let i of r)o.set(i,t),t+=i.length;return o}function p2(){let r=new Uint8Array(this.valueHex);if(this.valueHex.byteLength>=2){let a=r[0]===255&&r[1]&128,c=r[0]===0&&(r[1]&128)===0;(a||c)&&this.warnings.push("Needlessly long format")}let e=new ArrayBuffer(this.valueHex.byteLength),t=new Uint8Array(e);for(let a=0;a<this.valueHex.byteLength;a++)t[a]=0;t[0]=r[0]&128;let n=di(t,8),o=new ArrayBuffer(this.valueHex.byteLength),i=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)i[a]=r[a];return i[0]&=127,di(i,8)-n}function x6(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let s=t-e,a=Ao(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=Ao(e,8,n),i=new Uint8Array(o);if(i[0]&128){let s=o.slice(0),a=new Uint8Array(s);o=new ArrayBuffer(o.byteLength+1),i=new Uint8Array(o);for(let c=0;c<s.byteLength;c++)i[c+1]=a[c];i[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function E6(r,e){if(r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<t.length;o++)if(t[o]!==n[o])return!1;return!0}function tr(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let s=0;s<n;s++)o[s]="0";return o.join("").concat(t)}var JN=Math.log(2);function eu(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function m2(r){let e=0,t=0;for(let o=0;o<r.length;o++){let i=r[o];e+=i.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let i=r[o];n.set(new Uint8Array(i),t),t+=i.byteLength}return n.buffer}function Wn(r,e,t,n){return e instanceof Uint8Array?e.byteLength?t<0?(r.error="Wrong parameter: inputOffset less than zero",!1):n<0?(r.error="Wrong parameter: inputLength less than zero",!1):e.byteLength-t-n<0?(r.error="End of input reached before message was fully decoded (inconsistent offset and length values)",!1):!0:(r.error="Wrong parameter: inputBuffer has zero length",!1):(r.error="Wrong parameter: inputBuffer must be 'Uint8Array'",!1)}var Da=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return m2(this.items)}},La=[new Uint8Array([1])],v6="0123456789";var ds="",Yr=new ArrayBuffer(0),g2=new Uint8Array(0),Na="EndOfContent",A6="OCTET STRING",I6="BIT STRING";function zn(r){var e;return e=class extends r{constructor(...n){var o;super(...n);let i=n[0]||{};this.isHexOnly=(o=i.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=i.valueHex?ye.BufferSourceConverter.toUint8Array(i.valueHex):g2}get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}fromBER(n,o,i){let s=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!Wn(this,s,o,i))return-1;let a=o+i;return this.valueHexView=s.subarray(o,a),this.valueHexView.length?(this.blockLength=i,a):(this.warnings.push("Zero buffer length"),o)}toBER(n=!1){return this.isHexOnly?n?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.byteLength===this.valueHexView.buffer.byteLength?this.valueHexView.buffer:this.valueHexView.slice().buffer:(this.error="Flag 'isHexOnly' is not set, abort",Yr)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:ye.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var Vn=class{constructor({blockLength:e=0,error:t=ds,warnings:n=[],valueBeforeDecode:o=g2}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=ye.BufferSourceConverter.toUint8Array(o)}static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:ye.Convert.ToHex(this.valueBeforeDecodeView)}}};Vn.NAME="baseBlock";var Dt=class extends Vn{fromBER(e,t,n){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}toBER(e,t){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}};Dt.NAME="valueBlock";var tu=class extends zn(Vn){constructor({idBlock:e={}}={}){var t,n,o,i;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?ye.BufferSourceConverter.toUint8Array(e.valueHex):g2,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(i=e.isConstructed)!==null&&i!==void 0?i:!1):(this.tagClass=-1,this.tagNumber=-1,this.isConstructed=!1)}toBER(e=!1){let t=0;switch(this.tagClass){case 1:t|=0;break;case 2:t|=64;break;case 3:t|=128;break;case 4:t|=192;break;default:return this.error="Unknown tag class",Yr}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let i=this.tagNumber;i&=31,t|=i,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=Ao(this.tagNumber,7),i=new Uint8Array(o),s=o.byteLength,a=new Uint8Array(s+1);if(a[0]=t|31,!e){for(let c=0;c<s-1;c++)a[c+1]=i[c]|128;a[s]=i[s-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let i=0;i<o.length-1;i++)n[i+1]=o[i]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!Wn(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;switch(i[0]&192){case 0:this.tagClass=1;break;case 64:this.tagClass=2;break;case 128:this.tagClass=3;break;case 192:this.tagClass=4;break;default:return this.error="Unknown tag class",-1}this.isConstructed=(i[0]&32)===32,this.isHexOnly=!1;let a=i[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),d=255;for(;i[c]&128;){if(l[c-1]=i[c]&127,c++,c>=i.length)return this.error="End of input reached before message was fully decoded",-1;if(c===d){d+=255;let f=new Uint8Array(d);for(let h=0;h<l.length;h++)f[h]=l[h];l=this.valueHexView=new Uint8Array(d)}}this.blockLength=c+1,l[c-1]=i[c]&127;let u=new Uint8Array(c);for(let f=0;f<c;f++)u[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(u),this.blockLength<=9?this.tagNumber=di(l,7):(this.isHexOnly=!0,this.warnings.push("Tag too long, represented as hex-coded"))}if(this.tagClass===1&&this.isConstructed)switch(this.tagNumber){case 1:case 2:case 5:case 6:case 9:case 13:case 14:case 23:case 24:case 31:case 32:case 33:case 34:return this.error="Constructed encoding used for primitive type",-1}return t+this.blockLength}toJSON(){return{...super.toJSON(),tagClass:this.tagClass,tagNumber:this.tagNumber,isConstructed:this.isConstructed}}};tu.NAME="identificationBlock";var ru=class extends Vn{constructor({lenBlock:e={}}={}){var t,n,o;super(),this.isIndefiniteForm=(t=e.isIndefiniteForm)!==null&&t!==void 0?t:!1,this.longFormUsed=(n=e.longFormUsed)!==null&&n!==void 0?n:!1,this.length=(o=e.length)!==null&&o!==void 0?o:0}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!Wn(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;if(i[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=i[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(i[0]&128),this.longFormUsed===!1)return this.length=i[0],this.blockLength=1,t+this.blockLength;let s=i[0]&127;if(s>8)return this.error="Too big integer",-1;if(s+1>i.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+s);return c[s-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=di(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=s+1,t+this.blockLength}toBER(e=!1){let t,n;if(this.length>127&&(this.longFormUsed=!0),this.isIndefiniteForm)return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=128),t;if(this.longFormUsed){let o=Ao(this.length,8);if(o.byteLength>127)return this.error="Too big length",Yr;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let i=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let s=0;s<o.byteLength;s++)n[s+1]=i[s];return t}return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=this.length),t}toJSON(){return{...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,longFormUsed:this.longFormUsed,length:this.length}}};ru.NAME="lengthBlock";var G={},xt=class extends Vn{constructor({name:e=ds,optional:t=!1,primitiveSchema:n,...o}={},i){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new tu(o),this.lenBlock=new ru(o),this.valueBlock=i?new i(o):new Dt(o)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}toBER(e,t){let n=t||new Da;t||_6(this);let o=this.idBlock.toBER(e);if(n.write(o),this.lenBlock.isIndefiniteForm)n.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,n),n.write(new ArrayBuffer(2));else{let i=this.valueBlock.toBER(e);this.lenBlock.length=i.byteLength;let s=this.lenBlock.toBER(e);n.write(s),n.write(i)}return t?Yr:n.final()}toJSON(){let e={...super.toJSON(),idBlock:this.idBlock.toJSON(),lenBlock:this.lenBlock.toJSON(),valueBlock:this.valueBlock.toJSON(),name:this.name,optional:this.optional};return this.primitiveSchema&&(e.primitiveSchema=this.primitiveSchema.toJSON()),e}toString(e="ascii"){return e==="ascii"?this.onAsciiEncoding():ye.Convert.ToHex(this.toBER())}onAsciiEncoding(){return`${this.constructor.NAME} : ${ye.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return E6(t,n)}};xt.NAME="BaseBlock";function _6(r){if(r instanceof G.Constructed)for(let e of r.valueBlock.value)_6(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var nu=class extends xt{constructor({value:e=ds,...t}={},n){super(t,n),e&&this.fromString(e)}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.fromBuffer(this.valueBlock.valueHexView),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};nu.NAME="BaseStringBlock";var ou=class extends zn(Dt){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};ou.NAME="PrimitiveValueBlock";var T6,iu=class extends xt{constructor(e={}){super(e,ou),this.idBlock.isConstructed=!1}};T6=iu;G.Primitive=T6;iu.NAME="PRIMITIVE";function bS(r,e){if(r instanceof e)return r;let t=new e;return t.idBlock=r.idBlock,t.lenBlock=r.lenBlock,t.warnings=r.warnings,t.valueBeforeDecodeView=r.valueBeforeDecodeView,t}function Uu(r,e=0,t=r.length){let n=e,o=new xt({},Dt),i=new Vn;if(!Wn(i,r,e,t))return o.error=i.error,{offset:-1,result:o};if(!r.subarray(e,e+t).length)return o.error="Zero buffer length",{offset:-1,result:o};let a=o.idBlock.fromBER(r,e,t);if(o.idBlock.warnings.length&&o.warnings.concat(o.idBlock.warnings),a===-1)return o.error=o.idBlock.error,{offset:-1,result:o};if(e=a,t-=o.idBlock.blockLength,a=o.lenBlock.fromBER(r,e,t),o.lenBlock.warnings.length&&o.warnings.concat(o.lenBlock.warnings),a===-1)return o.error=o.lenBlock.error,{offset:-1,result:o};if(e=a,t-=o.lenBlock.blockLength,!o.idBlock.isConstructed&&o.lenBlock.isIndefiniteForm)return o.error="Indefinite length form used for primitive encoding form",{offset:-1,result:o};let c=xt;switch(o.idBlock.tagClass){case 1:if(o.idBlock.tagNumber>=37&&o.idBlock.isHexOnly===!1)return o.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:o};switch(o.idBlock.tagNumber){case 0:if(o.idBlock.isConstructed&&o.lenBlock.length>0)return o.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:o};c=G.EndOfContent;break;case 1:c=G.Boolean;break;case 2:c=G.Integer;break;case 3:c=G.BitString;break;case 4:c=G.OctetString;break;case 5:c=G.Null;break;case 6:c=G.ObjectIdentifier;break;case 10:c=G.Enumerated;break;case 12:c=G.Utf8String;break;case 13:c=G.RelativeObjectIdentifier;break;case 14:c=G.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=G.Sequence;break;case 17:c=G.Set;break;case 18:c=G.NumericString;break;case 19:c=G.PrintableString;break;case 20:c=G.TeletexString;break;case 21:c=G.VideotexString;break;case 22:c=G.IA5String;break;case 23:c=G.UTCTime;break;case 24:c=G.GeneralizedTime;break;case 25:c=G.GraphicString;break;case 26:c=G.VisibleString;break;case 27:c=G.GeneralString;break;case 28:c=G.UniversalString;break;case 29:c=G.CharacterString;break;case 30:c=G.BmpString;break;case 31:c=G.DATE;break;case 32:c=G.TimeOfDay;break;case 33:c=G.DateTime;break;case 34:c=G.Duration;break;default:{let l=o.idBlock.isConstructed?new G.Constructed:new G.Primitive;l.idBlock=o.idBlock,l.lenBlock=o.lenBlock,l.warnings=o.warnings,o=l}}break;case 2:case 3:case 4:default:c=o.idBlock.isConstructed?G.Constructed:G.Primitive}return o=bS(o,c),a=o.fromBER(r,e,o.lenBlock.isIndefiniteForm?t:o.lenBlock.length),o.valueBeforeDecodeView=r.subarray(n,n+o.blockLength),{offset:a,result:o}}function fi(r){if(!r.byteLength){let e=new xt({},Dt);return e.error="Input buffer has zero length",{offset:-1,result:e}}return Uu(ye.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function xS(r,e){return r?1:e}var wn=class extends Dt{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!Wn(this,o,t,n))return-1;if(this.valueBeforeDecodeView=o.subarray(t,t+n),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),t;let i=t;for(;xS(this.isIndefiniteForm,n)>0;){let s=Uu(o,i,n);if(s.offset===-1)return this.error=s.result.error,this.warnings.concat(s.result.warnings),-1;if(i=s.offset,this.blockLength+=s.result.blockLength,n-=s.result.blockLength,this.value.push(s.result),this.isIndefiniteForm&&s.result.constructor.NAME===Na)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Na?this.value.pop():this.warnings.push("No EndOfContent block encoded")),i}toBER(e,t){let n=t||new Da;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?Yr:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};wn.NAME="ConstructedValueBlock";var k6,Io=class extends xt{constructor(e={}){super(e,wn),this.idBlock.isConstructed=!0}fromBER(e,t,n){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){let e=[];for(let n of this.valueBlock.value)e.push(n.toString("ascii").split(`
4
4
  `).map(o=>` ${o}`).join(`
5
5
  `));let t=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${t} :
6
6
  ${e.join(`
7
- `)}`:`${t} :`}};I6=Ao;G.Constructed=I6;Ao.NAME="CONSTRUCTED";var iu=class extends Nt{fromBER(e,t,n){return t}toBER(e){return Xr}};iu.override="EndOfContentValueBlock";var T6,su=class extends Et{constructor(e={}){super(e,iu),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};T6=su;G.EndOfContent=T6;su.NAME=Pa;var k6,$n=class extends Et{constructor(e={}){super(e,Nt),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(e,t,n){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=n,t+n>e.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):t+n}toBER(e,t){let n=new ArrayBuffer(2);if(!e){let o=new Uint8Array(n);o[0]=5,o[1]=0}return t&&t.write(n),n}onAsciiEncoding(){return`${this.constructor.NAME}`}};k6=$n;G.Null=k6;$n.NAME="NULL";var au=class extends qn(Nt){constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=me.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}fromBER(e,t,n){let o=me.BufferSourceConverter.toUint8Array(e);return Hn(this,o,t,n)?(this.valueHexView=o.subarray(t,t+n),n>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,o2.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};au.NAME="BooleanValueBlock";var C6,cu=class extends Et{constructor(e={}){super(e,au),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};C6=cu;G.Boolean=C6;cu.NAME="BOOLEAN";var lu=class extends qn(yn){constructor({isConstructed:e=!1,...t}={}){super(t),this.isConstructed=e}fromBER(e,t,n){let o=0;if(this.isConstructed){if(this.isHexOnly=!1,o=yn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let i=0;i<this.value.length;i++){let s=this.value[i].constructor.NAME;if(s===Pa){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(s!==v6)return this.error="OCTET STRING may consists of OCTET STRINGs only",-1}}else this.isHexOnly=!0,o=super.fromBER(e,t,n),this.blockLength=n;return o}toBER(e,t){return this.isConstructed?yn.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};lu.NAME="OctetStringValueBlock";var P6,Kn=class r extends Et{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},lu),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,t,n){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,n===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),t;if(!this.valueBlock.isConstructed){let i=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(i.byteLength){let s=Mu(i,0,i.byteLength);s.offset!==-1&&s.offset===n&&(this.valueBlock.value=[s.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){return this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length?Ao.prototype.onAsciiEncoding.call(this):`${this.constructor.NAME} : ${me.Convert.ToHex(this.valueBlock.valueHexView)}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof r&&e.push(t.valueBlock.valueHexView);return me.BufferSourceConverter.concat(e)}};P6=Kn;G.OctetString=P6;Kn.NAME=v6;var uu=class extends qn(yn){constructor({unusedBits:e=0,isConstructed:t=!1,...n}={}){super(n),this.unusedBits=e,this.isConstructed=t,this.blockLength=this.valueHexView.byteLength}fromBER(e,t,n){if(!n)return t;let o=-1;if(this.isConstructed){if(o=yn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===Pa){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==S6)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let l=a.valueBlock;if(this.unusedBits>0&&l.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=l.unusedBits}return o}let i=me.BufferSourceConverter.toUint8Array(e);if(!Hn(this,i,t,n))return-1;let s=i.subarray(t,t+n);if(this.unusedBits=s[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=s.subarray(1);try{if(a.byteLength){let c=Mu(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=s.subarray(1),this.blockLength=s.length,t+n}toBER(e,t){if(this.isConstructed)return yn.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return Xr;let n=new Uint8Array(this.valueHexView.length+1);return n[0]=this.unusedBits,n.set(this.valueHexView,1),n.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};uu.NAME="BitStringValueBlock";var R6,ss=class extends Et{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},uu),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(e,t,n){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Ao.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let o of t)e.push(o.toString(2).padStart(8,"0"));let n=e.join("");return`${this.constructor.NAME} : ${n.substring(0,n.length-this.valueBlock.unusedBits)}`}}};R6=ss;G.BitString=R6;ss.NAME=S6;var D6;function gS(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l=0,d=c<s?s:c,u=0;for(let f=d;f>=0;f--,u++){switch(!0){case u<a.length:l=i[s-u]+a[c-u]+t[0];break;default:l=i[s-u]+t[0]}switch(t[0]=l/10,!0){case u>=i.length:i=Zl(new Uint8Array([l%10]),i);break;default:i[s-u]=l%10}}return t[0]>0&&(i=Zl(t,i)),i}function E6(r){if(r>=ka.length)for(let e=ka.length;e<=r;e++){let t=new Uint8Array([0]),n=ka[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let i=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=i[0]/10,n[o]=i[0]%10}t[0]>0&&(n=Zl(t,n)),ka.push(n)}return ka[r]}function yS(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l,d=0;for(let u=c;u>=0;u--,d++)switch(l=i[s-d]-a[c-d]-t,!0){case l<0:t=1,i[s-d]=l+10;break;default:t=0,i[s-d]=l}if(t>0)for(let u=s-c+1;u>=0;u--,d++)if(l=i[s-d]-t,l<0)t=1,i[s-d]=l+10;else{t=0,i[s-d]=l;break}return i.slice()}var Ra=class extends qn(Nt){constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=o2.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(w6(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let i=this.fromBER(e,t,n);if(i===-1)return i;let s=this.valueHexView;return s[0]===0&&s[1]&128?this.valueHexView=s.subarray(1):o!==0&&s.length<o&&(o-s.length>1&&(o=s.length+1),this.valueHexView=s.subarray(o-s.length)),i}toDER(e=!1){let t=this.valueHexView;switch(!0){case(t[0]&128)!==0:{let n=new Uint8Array(this.valueHexView.length+1);n[0]=0,n.set(t,1),this.valueHexView=n}break;case(t[0]===0&&(t[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(e)}fromBER(e,t,n){let o=super.fromBER(e,t,n);return o===-1||this.setValueHex(),o}toBER(e){return e?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){let e=this.valueHexView.length*8-1,t=new Uint8Array(this.valueHexView.length*8/3),n=0,o,i=this.valueHexView,s="",a=!1;for(let c=i.byteLength-1;c>=0;c--){o=i[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=yS(E6(n),t),s="-";break;default:t=gS(t,E6(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(s+=x6.charAt(t[c]));return a===!1&&(s+=x6.charAt(0)),s}};D6=Ra;Ra.NAME="IntegerValueBlock";Object.defineProperty(D6.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var L6,tt=class r extends Et{constructor(e={}){super(e,Ra),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return Jl(),BigInt(this.valueBlock.toString())}static fromBigInt(e){Jl();let t=BigInt(e),n=new Ca,o=t.toString(16).replace(/^-/,""),i=new Uint8Array(me.Convert.FromHex(o));if(t<0){let a=new Uint8Array(i.length+(i[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${me.Convert.ToHex(a)}`)+t,d=me.BufferSourceConverter.toUint8Array(me.Convert.FromHex(l.toString(16)));d[0]|=128,n.write(d)}else i[0]&128&&n.write(new Uint8Array([0])),n.write(i);return new r({valueHex:n.final()})}convertToDER(){let e=new r({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new r({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};L6=tt;G.Integer=L6;tt.NAME="INTEGER";var N6,du=class extends tt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};N6=du;G.Enumerated=N6;du.NAME="ENUMERATED";var Da=class extends qn(Nt){constructor({valueDec:e=-1,isFirstSid:t=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=t}fromBER(e,t,n){if(!n)return t;let o=me.BufferSourceConverter.toUint8Array(e);if(!Hn(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,!!(i[a]&128));a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,i[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=li(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){Jl();let t=BigInt(e).toString(2);for(;t.length%7;)t="0"+t;let n=new Uint8Array(t.length/7);for(let o=0;o<n.length;o++)n[o]=parseInt(t.slice(o*7,o*7+7),2)+(o+1<n.length?128:0);this.fromBER(n.buffer,0,n.length)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=So(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Xr;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n}toString(){let e="";if(this.isHexOnly)e=me.Convert.ToHex(this.valueHexView);else if(this.isFirstSid){let t=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",t-=40):(e="2.",t-=80),e+=t.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};Da.NAME="sidBlock";var fu=class extends Nt{constructor({value:e=as,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Da;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.value.length===0&&(i.isFirstSid=!0),this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e){let t=[];for(let n=0;n<this.value.length;n++){let o=this.value[n].toBER(e);if(o.byteLength===0)return this.error=this.value[n].error,Xr;t.push(o)}return i2(t)}fromString(e){this.value=[];let t=0,n=0,o="",i=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,i){let s=this.value[0],a=0;switch(s.valueDec){case 0:break;case 1:a=40;break;case 2:a=80;break;default:this.value=[];return}let c=parseInt(o,10);if(isNaN(c))return;s.valueDec=c+a,i=!1}else{let s=new Da;if(o>Number.MAX_SAFE_INTEGER){Jl();let a=BigInt(o);s.valueBigInt=a}else if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return;this.value.length||(s.isFirstSid=!0,i=!0),this.value.push(s)}while(n!==-1)}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t?(o=`{${o}}`,this.value[n].isFirstSid?e=`2.{${o} - 80}`:e+=o):e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};fu.NAME="ObjectIdentifierValueBlock";var B6,kr=class extends Et{constructor(e={}){super(e,fu),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};B6=kr;G.ObjectIdentifier=B6;kr.NAME="OBJECT IDENTIFIER";var La=class extends qn(Fn){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=me.BufferSourceConverter.toUint8Array(e);if(!Hn(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,!!(i[a]&128));a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,i[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=li(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=So(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Xr;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n.buffer}toString(){let e="";return this.isHexOnly?e=me.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};La.NAME="relativeSidBlock";var hu=class extends Nt{constructor({value:e=as,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new La;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let i=this.value[o].toBER(e);if(i.byteLength===0)return this.error=this.value[o].error,Xr;n.push(i)}return i2(n)}fromString(e){this.value=[];let t=0,n=0,o="";do{n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1;let i=new La;if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return!0;this.value.push(i)}while(n!==-1);return!0}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t&&(o=`{${o}}`),e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};hu.NAME="RelativeObjectIdentifierValueBlock";var O6,pu=class extends Et{constructor(e={}){super(e,hu),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};O6=pu;G.RelativeObjectIdentifier=O6;pu.NAME="RelativeObjectIdentifier";var M6,ht=class extends Ao{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};M6=ht;G.Sequence=M6;ht.NAME="SEQUENCE";var U6,mu=class extends Ao{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};U6=mu;G.Set=U6;mu.NAME="SET";var gu=class extends qn(Nt){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=as}toJSON(){return{...super.toJSON(),value:this.value}}};gu.NAME="StringValueBlock";var yu=class extends gu{};yu.NAME="SimpleStringValueBlock";var Kt=class extends ru{constructor({...e}={}){super(e,yu)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,me.BufferSourceConverter.toUint8Array(e))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);this.valueBlock.value=e}};Kt.NAME="SIMPLE STRING";var wu=class extends Kt{fromBuffer(e){this.valueBlock.valueHexView=me.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=me.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=me.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(me.Convert.FromUtf8String(e)),this.valueBlock.value=e}};wu.NAME="Utf8StringValueBlock";var F6,Vn=class extends wu{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};F6=Vn;G.Utf8String=F6;Vn.NAME="UTF8String";var bu=class extends Kt{fromBuffer(e){this.valueBlock.value=me.Convert.ToUtf16String(e),this.valueBlock.valueHexView=me.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(me.Convert.FromUtf16String(e))}};bu.NAME="BmpStringValueBlock";var $6,xu=class extends bu{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};$6=xu;G.BmpString=$6;xu.NAME="BMPString";var Eu=class extends Kt{fromBuffer(e){let t=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),n=new Uint8Array(t);for(let o=0;o<n.length;o+=4)n[o]=n[o+3],n[o+1]=n[o+2],n[o+2]=0,n[o+3]=0;this.valueBlock.value=String.fromCharCode.apply(null,new Uint32Array(t))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t*4);for(let o=0;o<t;o++){let i=So(e.charCodeAt(o),8),s=new Uint8Array(i);if(s.length>4)continue;let a=4-s.length;for(let c=s.length-1;c>=0;c--)n[o*4+c+a]=s[c]}this.valueBlock.value=e}};Eu.NAME="UniversalStringValueBlock";var K6,vu=class extends Eu{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};K6=vu;G.UniversalString=K6;vu.NAME="UniversalString";var V6,Su=class extends Kt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};V6=Su;G.NumericString=V6;Su.NAME="NumericString";var H6,Au=class extends Kt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};H6=Au;G.PrintableString=H6;Au.NAME="PrintableString";var q6,_u=class extends Kt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};q6=_u;G.TeletexString=q6;_u.NAME="TeletexString";var W6,Iu=class extends Kt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};W6=Iu;G.VideotexString=W6;Iu.NAME="VideotexString";var z6,Tu=class extends Kt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};z6=Tu;G.IA5String=z6;Tu.NAME="IA5String";var G6,ku=class extends Kt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};G6=ku;G.GraphicString=G6;ku.NAME="GraphicString";var Y6,Na=class extends Kt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};Y6=Na;G.VisibleString=Y6;Na.NAME="VisibleString";var Q6,Cu=class extends Kt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};Q6=Cu;G.GeneralString=Q6;Cu.NAME="GeneralString";var X6,Pu=class extends Kt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};X6=Pu;G.CharacterString=X6;Pu.NAME="CharacterString";var j6,Ba=class extends Na{constructor({value:e,valueDate:t,...n}={}){if(super(n),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let o=0;o<e.length;o++)this.valueBlock.valueHexView[o]=e.charCodeAt(o)}t&&(this.fromDate(t),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,me.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return t}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let n=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(n===null){this.error="Wrong input string for conversion";return}let o=parseInt(n[1],10);o>=50?this.year=1900+o:this.year=2e3+o,this.month=parseInt(n[2],10),this.day=parseInt(n[3],10),this.hour=parseInt(n[4],10),this.minute=parseInt(n[5],10),this.second=parseInt(n[6],10)}toString(e="iso"){if(e==="iso"){let t=new Array(7);return t[0]=tr(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=tr(this.month,2),t[2]=tr(this.day,2),t[3]=tr(this.hour,2),t[4]=tr(this.minute,2),t[5]=tr(this.second,2),t[6]="Z",t.join("")}return super.toString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}};j6=Ba;G.UTCTime=j6;Ba.NAME="UTCTime";var Z6,Ru=class extends Ba{constructor(e={}){var t;super(e),(t=this.millisecond)!==null&&t!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond))}fromString(e){let t=!1,n="",o="",i=0,s,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let u=new Number(e[e.length-1]);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let u=1,f=n.indexOf("+"),h="";if(f===-1&&(f=n.indexOf("-"),u=-1),f!==-1){if(h=n.substring(f+1),n=n.substring(0,f),h.length!==2&&h.length!==4)throw new Error("Wrong input string for conversion");let p=parseInt(h.substring(0,2),10);if(isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");if(a=u*p,h.length===4){if(p=parseInt(h.substring(2,4),10),isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");c=u*p}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let u=new Number(`0${n.substring(l)}`);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");i=u.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(s=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*i;this.minute=Math.floor(u),u=60*(u-this.minute),this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===12:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*i;this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===14:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=1e3*i;this.millisecond=Math.floor(u)}break;default:throw new Error("Wrong input string for conversion")}let d=s.exec(o);if(d===null)throw new Error("Wrong input string for conversion");for(let u=1;u<d.length;u++)switch(u){case 1:this.year=parseInt(d[u],10);break;case 2:this.month=parseInt(d[u],10);break;case 3:this.day=parseInt(d[u],10);break;case 4:this.hour=parseInt(d[u],10)+a;break;case 5:this.minute=parseInt(d[u],10)+c;break;case 6:this.second=parseInt(d[u],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let u=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=u.getUTCFullYear(),this.month=u.getUTCMonth(),this.day=u.getUTCDay(),this.hour=u.getUTCHours(),this.minute=u.getUTCMinutes(),this.second=u.getUTCSeconds(),this.millisecond=u.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(tr(this.year,4)),t.push(tr(this.month,2)),t.push(tr(this.day,2)),t.push(tr(this.hour,2)),t.push(tr(this.minute,2)),t.push(tr(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(tr(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};Z6=Ru;G.GeneralizedTime=Z6;Ru.NAME="GeneralizedTime";var J6,Du=class extends Vn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};J6=Du;G.DATE=J6;Du.NAME="DATE";var e8,Lu=class extends Vn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};e8=Lu;G.TimeOfDay=e8;Lu.NAME="TimeOfDay";var t8,Nu=class extends Vn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};t8=Nu;G.DateTime=t8;Nu.NAME="DateTime";var r8,Bu=class extends Vn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};r8=Bu;G.Duration=r8;Bu.NAME="Duration";var n8,Ou=class extends Vn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};n8=Ou;G.TIME=n8;Ou.NAME="TIME";function F(r,e="utf8"){let t=Ll[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}function pt(r){if(isNaN(r)||r<=0)throw new C("random bytes length must be a Number bigger than 0");return oi(r)}var Oa=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},Ma=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},Uu=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var o8={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new Uu("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api");return e}};var rr=o8;async function i8(r){let e=await rr.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await wS(e);return{privateKey:t[0],publicKey:t[1]}}async function s8(r,e){let t=await rr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await rr.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function a8(r,e,t){let n=await rr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return rr.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function wS(r){if(r.privateKey==null||r.publicKey==null)throw new C("Private and public key are required");return Promise.all([rr.get().subtle.exportKey("jwk",r.privateKey),rr.get().subtle.exportKey("jwk",r.publicKey)])}function c2(r){if(r.kty!=="RSA")throw new C("invalid key type");if(r.n==null)throw new C("invalid key modulus");return O(r.n,"base64url").length*8}var cs=class{type="RSA";_key;_raw;_multihash;constructor(e,t){this._key=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=Ua.jwkToPkix(this._key)),this._raw}toMultihash(){return this._multihash}toCID(){return Z.createV1(114,this._multihash)}toString(){return Se.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}verify(e,t){return a8(this._key,t,e)}},Fa=class{type="RSA";_key;_raw;publicKey;constructor(e,t){this._key=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=Ua.jwkToPkcs1(this._key)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}sign(e){return s8(this._key,e)}};var Fu=8192,l2=18;function c8(r){let{result:e}=ui(r),t=e.valueBlock.value;return{n:F(wn(t[1].toBigInt()),"base64url"),e:F(wn(t[2].toBigInt()),"base64url"),d:F(wn(t[3].toBigInt()),"base64url"),p:F(wn(t[4].toBigInt()),"base64url"),q:F(wn(t[5].toBigInt()),"base64url"),dp:F(wn(t[6].toBigInt()),"base64url"),dq:F(wn(t[7].toBigInt()),"base64url"),qi:F(wn(t[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function bS(r){if(r.n==null||r.e==null||r.d==null||r.p==null||r.q==null||r.dp==null||r.dq==null||r.qi==null)throw new C("JWK was missing components");let t=new ht({value:[new tt({value:0}),tt.fromBigInt(bn(O(r.n,"base64url"))),tt.fromBigInt(bn(O(r.e,"base64url"))),tt.fromBigInt(bn(O(r.d,"base64url"))),tt.fromBigInt(bn(O(r.p,"base64url"))),tt.fromBigInt(bn(O(r.q,"base64url"))),tt.fromBigInt(bn(O(r.dp,"base64url"))),tt.fromBigInt(bn(O(r.dq,"base64url"))),tt.fromBigInt(bn(O(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function l8(r){let{result:e}=ui(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:F(wn(t[0].toBigInt()),"base64url"),e:F(wn(t[1].toBigInt()),"base64url")}}function u2(r){if(r.n==null||r.e==null)throw new C("JWK was missing components");let t=new ht({value:[new ht({value:[new kr({value:"1.2.840.113549.1.1.1"}),new $n]}),new ss({valueHex:new ht({value:[tt.fromBigInt(bn(O(r.n,"base64url"))),tt.fromBigInt(bn(O(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function wn(r){let e=r.toString(16);e.length%2>0&&(e=`0${e}`);let t=e.length/2,n=new Uint8Array(t),o=0,i=0;for(;o<t;)n[o]=parseInt(e.slice(i,i+2),16),o+=1,i+=2;return n}function bn(r){let e=[];return r.forEach(function(t){let n=t.toString(16);n.length%2>0&&(n=`0${n}`),e.push(n)}),BigInt("0x"+e.join(""))}function $u(r){let e=c8(r);return u8(e)}function d2(r){let e=l8(r);if(c2(e)>Fu)throw new kn("Key size is too large");let t=Ir(gn.encode({Type:Qe.RSA,Data:r})),n=Zt(l2,t);return new cs(e,n)}function u8(r){if(c2(r)>Fu)throw new C("Key size is too large");let e=d8(r),t=Ir(gn.encode({Type:Qe.RSA,Data:u2(e.publicKey)})),n=Zt(l2,t);return new Fa(e.privateKey,new cs(e.publicKey,n))}async function f2(r){if(r>Fu)throw new C("Key size is too large");let e=await i8(r),t=Ir(gn.encode({Type:Qe.RSA,Data:u2(e.publicKey)})),n=Zt(l2,t);return new Fa(e.privateKey,new cs(e.publicKey,n))}function d8(r){if(r==null)throw new C("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}var Ku=class extends Zi{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,ti(e);let n=zr(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,i=new Uint8Array(o);i.set(n.length>o?e.create().update(n).digest():n);for(let s=0;s<i.length;s++)i[s]^=54;this.iHash.update(i),this.oHash=e.create();for(let s=0;s<i.length;s++)i[s]^=106;this.oHash.update(i),i.fill(0)}update(e){return ji(this),this.iHash.update(e),this}digestInto(e){ji(this),Xi(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:o,destroyed:i,blockLen:s,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=i,e.blockLen=s,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},_o=(r,e,t)=>new Ku(r,e).update(t).digest();_o.create=(r,e)=>new Ku(r,e);function f8(r){r.lowS!==void 0&&Gr("lowS",r.lowS),r.prehash!==void 0&&Gr("prehash",r.prehash)}function xS(r){let e=va(r);_r(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:ES,hexToBytes:vS}=Wl,Wn={Err:class extends Error{constructor(e=""){super(e)}},_tlv:{encode:(r,e)=>{let{Err:t}=Wn;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length&1)throw new t("tlv.encode: unpadded data");let n=e.length/2,o=ii(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let i=n>127?ii(o.length/2|128):"";return`${ii(r)}${i}${o}${e}`},decode(r,e){let{Err:t}=Wn,n=0;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length<2||e[n++]!==r)throw new t("tlv.decode: wrong tlv");let o=e[n++],i=!!(o&128),s=0;if(!i)s=o;else{let c=o&127;if(!c)throw new t("tlv.decode(long): indefinite length not supported");if(c>4)throw new t("tlv.decode(long): byte length is too big");let l=e.subarray(n,n+c);if(l.length!==c)throw new t("tlv.decode: length bytes not complete");if(l[0]===0)throw new t("tlv.decode(long): zero leftmost byte");for(let d of l)s=s<<8|d;if(n+=c,s<128)throw new t("tlv.decode(long): not minimal encoding")}let a=e.subarray(n,n+s);if(a.length!==s)throw new t("tlv.decode: wrong value length");return{v:a,l:e.subarray(n+s)}}},_int:{encode(r){let{Err:e}=Wn;if(r<zn)throw new e("integer: negative integers are not allowed");let t=ii(r);if(Number.parseInt(t[0],16)&8&&(t="00"+t),t.length&1)throw new e("unexpected assertion");return t},decode(r){let{Err:e}=Wn;if(r[0]&128)throw new e("Invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new e("Invalid signature integer: unnecessary leading zero");return ES(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Wn,o=typeof r=="string"?vS(r):r;es(o);let{v:i,l:s}=n.decode(48,o);if(s.length)throw new e("Invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,i),{v:l,l:d}=n.decode(2,c);if(d.length)throw new e("Invalid signature: left bytes after parsing");return{r:t.decode(a),s:t.decode(l)}},hexFromSig(r){let{_tlv:e,_int:t}=Wn,n=`${e.encode(2,t.encode(r.r))}${e.encode(2,t.encode(r.s))}`;return e.encode(48,n)}},zn=BigInt(0),gt=BigInt(1),FB=BigInt(2),h8=BigInt(3),$B=BigInt(4);function SS(r){let e=xS(r),{Fp:t}=e,n=xo(e.n,e.nBitLength),o=e.toBytes||((m,g,y)=>{let b=g.toAffine();return Mn(Uint8Array.from([4]),t.toBytes(b.x),t.toBytes(b.y))}),i=e.fromBytes||(m=>{let g=m.subarray(1),y=t.fromBytes(g.subarray(0,t.BYTES)),b=t.fromBytes(g.subarray(t.BYTES,2*t.BYTES));return{x:y,y:b}});function s(m){let{a:g,b:y}=e,b=t.sqr(m),w=t.mul(b,m);return t.add(t.add(w,t.mul(m,g)),y)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function a(m){return xa(m,gt,e.n)}function c(m){let{allowedPrivateKeyLengths:g,nByteLength:y,wrapPrivateKey:b,n:w}=e;if(g&&typeof m!="bigint"){if(wo(m)&&(m=Nn(m)),typeof m!="string"||!g.includes(m.length))throw new Error("Invalid key");m=m.padStart(y*2,"0")}let x;try{x=typeof m=="bigint"?m:Bn(Fe("private key",m,y))}catch{throw new Error(`private key must be ${y} bytes, hex or bigint, not ${typeof m}`)}return b&&(x=Ie(x,w)),xt("private key",x,gt,w),x}function l(m){if(!(m instanceof f))throw new Error("ProjectivePoint expected")}let d=ai((m,g)=>{let{px:y,py:b,pz:w}=m;if(t.eql(w,t.ONE))return{x:y,y:b};let x=m.is0();g==null&&(g=x?t.ONE:t.inv(w));let T=t.mul(y,g),k=t.mul(b,g),v=t.mul(w,g);if(x)return{x:t.ZERO,y:t.ZERO};if(!t.eql(v,t.ONE))throw new Error("invZ was invalid");return{x:T,y:k}}),u=ai(m=>{if(m.is0()){if(e.allowInfinityPoint&&!t.is0(m.py))return;throw new Error("bad point: ZERO")}let{x:g,y}=m.toAffine();if(!t.isValid(g)||!t.isValid(y))throw new Error("bad point: x or y not FE");let b=t.sqr(y),w=s(g);if(!t.eql(b,w))throw new Error("bad point: equation left != right");if(!m.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class f{constructor(g,y,b){if(this.px=g,this.py=y,this.pz=b,g==null||!t.isValid(g))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(b==null||!t.isValid(b))throw new Error("z required");Object.freeze(this)}static fromAffine(g){let{x:y,y:b}=g||{};if(!g||!t.isValid(y)||!t.isValid(b))throw new Error("invalid affine point");if(g instanceof f)throw new Error("projective point not allowed");let w=x=>t.eql(x,t.ZERO);return w(y)&&w(b)?f.ZERO:new f(y,b,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(g){let y=t.invertBatch(g.map(b=>b.pz));return g.map((b,w)=>b.toAffine(y[w])).map(f.fromAffine)}static fromHex(g){let y=f.fromAffine(i(Fe("pointHex",g)));return y.assertValidity(),y}static fromPrivateKey(g){return f.BASE.multiply(c(g))}static msm(g,y){return Yl(f,n,g,y)}_setWindowSize(g){p.setWindowSize(this,g)}assertValidity(){u(this)}hasEvenY(){let{y:g}=this.toAffine();if(t.isOdd)return!t.isOdd(g);throw new Error("Field doesn't support isOdd")}equals(g){l(g);let{px:y,py:b,pz:w}=this,{px:x,py:T,pz:k}=g,v=t.eql(t.mul(y,k),t.mul(x,w)),S=t.eql(t.mul(b,k),t.mul(T,w));return v&&S}negate(){return new f(this.px,t.neg(this.py),this.pz)}double(){let{a:g,b:y}=e,b=t.mul(y,h8),{px:w,py:x,pz:T}=this,k=t.ZERO,v=t.ZERO,S=t.ZERO,I=t.mul(w,w),$=t.mul(x,x),N=t.mul(T,T),M=t.mul(w,x);return M=t.add(M,M),S=t.mul(w,T),S=t.add(S,S),k=t.mul(g,S),v=t.mul(b,N),v=t.add(k,v),k=t.sub($,v),v=t.add($,v),v=t.mul(k,v),k=t.mul(M,k),S=t.mul(b,S),N=t.mul(g,N),M=t.sub(I,N),M=t.mul(g,M),M=t.add(M,S),S=t.add(I,I),I=t.add(S,I),I=t.add(I,N),I=t.mul(I,M),v=t.add(v,I),N=t.mul(x,T),N=t.add(N,N),I=t.mul(N,M),k=t.sub(k,I),S=t.mul(N,$),S=t.add(S,S),S=t.add(S,S),new f(k,v,S)}add(g){l(g);let{px:y,py:b,pz:w}=this,{px:x,py:T,pz:k}=g,v=t.ZERO,S=t.ZERO,I=t.ZERO,$=e.a,N=t.mul(e.b,h8),M=t.mul(y,x),B=t.mul(b,T),D=t.mul(w,k),L=t.add(y,b),_=t.add(x,T);L=t.mul(L,_),_=t.add(M,B),L=t.sub(L,_),_=t.add(y,w);let A=t.add(x,k);return _=t.mul(_,A),A=t.add(M,D),_=t.sub(_,A),A=t.add(b,w),v=t.add(T,k),A=t.mul(A,v),v=t.add(B,D),A=t.sub(A,v),I=t.mul($,_),v=t.mul(N,D),I=t.add(v,I),v=t.sub(B,I),I=t.add(B,I),S=t.mul(v,I),B=t.add(M,M),B=t.add(B,M),D=t.mul($,D),_=t.mul(N,_),B=t.add(B,D),D=t.sub(M,D),D=t.mul($,D),_=t.add(_,D),M=t.mul(B,_),S=t.add(S,M),M=t.mul(A,_),v=t.mul(L,v),v=t.sub(v,M),M=t.mul(L,B),I=t.mul(A,I),I=t.add(I,M),new f(v,S,I)}subtract(g){return this.add(g.negate())}is0(){return this.equals(f.ZERO)}wNAF(g){return p.wNAFCached(this,g,f.normalizeZ)}multiplyUnsafe(g){xt("scalar",g,zn,e.n);let y=f.ZERO;if(g===zn)return y;if(g===gt)return this;let{endo:b}=e;if(!b)return p.unsafeLadder(this,g);let{k1neg:w,k1:x,k2neg:T,k2:k}=b.splitScalar(g),v=y,S=y,I=this;for(;x>zn||k>zn;)x&gt&&(v=v.add(I)),k&gt&&(S=S.add(I)),I=I.double(),x>>=gt,k>>=gt;return w&&(v=v.negate()),T&&(S=S.negate()),S=new f(t.mul(S.px,b.beta),S.py,S.pz),v.add(S)}multiply(g){let{endo:y,n:b}=e;xt("scalar",g,gt,b);let w,x;if(y){let{k1neg:T,k1:k,k2neg:v,k2:S}=y.splitScalar(g),{p:I,f:$}=this.wNAF(k),{p:N,f:M}=this.wNAF(S);I=p.constTimeNegate(T,I),N=p.constTimeNegate(v,N),N=new f(t.mul(N.px,y.beta),N.py,N.pz),w=I.add(N),x=$.add(M)}else{let{p:T,f:k}=this.wNAF(g);w=T,x=k}return f.normalizeZ([w,x])[0]}multiplyAndAddUnsafe(g,y,b){let w=f.BASE,x=(k,v)=>v===zn||v===gt||!k.equals(w)?k.multiplyUnsafe(v):k.multiply(v),T=x(this,y).add(x(g,b));return T.is0()?void 0:T}toAffine(g){return d(this,g)}isTorsionFree(){let{h:g,isTorsionFree:y}=e;if(g===gt)return!0;if(y)return y(f,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:g,clearCofactor:y}=e;return g===gt?this:y?y(f,this):this.multiplyUnsafe(e.h)}toRawBytes(g=!0){return Gr("isCompressed",g),this.assertValidity(),o(f,this,g)}toHex(g=!0){return Gr("isCompressed",g),Nn(this.toRawBytes(g))}}f.BASE=new f(e.Gx,e.Gy,t.ONE),f.ZERO=new f(t.ZERO,t.ONE,t.ZERO);let h=e.nBitLength,p=Gl(f,e.endo?Math.ceil(h/2):h);return{CURVE:e,ProjectivePoint:f,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:a}}function AS(r){let e=va(r);return _r(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function p8(r){let e=AS(r),{Fp:t,n}=e,o=t.BYTES+1,i=2*t.BYTES+1;function s(D){return Ie(D,n)}function a(D){return zl(D,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:d,isWithinCurveOrder:u}=SS({...e,toBytes(D,L,_){let A=L.toAffine(),R=t.toBytes(A.x),P=Mn;return Gr("isCompressed",_),_?P(Uint8Array.from([L.hasEvenY()?2:3]),R):P(Uint8Array.from([4]),R,t.toBytes(A.y))},fromBytes(D){let L=D.length,_=D[0],A=D.subarray(1);if(L===o&&(_===2||_===3)){let R=Bn(A);if(!xa(R,gt,t.ORDER))throw new Error("Point is not on curve");let P=d(R),q;try{q=t.sqrt(P)}catch(ae){let le=ae instanceof Error?": "+ae.message:"";throw new Error("Point is not on curve"+le)}let z=(q&gt)===gt;return(_&1)===1!==z&&(q=t.neg(q)),{x:R,y:q}}else if(L===i&&_===4){let R=t.fromBytes(A.subarray(0,t.BYTES)),P=t.fromBytes(A.subarray(t.BYTES,2*t.BYTES));return{x:R,y:P}}else throw new Error(`Point of length ${L} was invalid. Expected ${o} compressed bytes or ${i} uncompressed bytes`)}}),f=D=>Nn(bo(D,e.nByteLength));function h(D){let L=n>>gt;return D>L}function p(D){return h(D)?s(-D):D}let m=(D,L,_)=>Bn(D.slice(L,_));class g{constructor(L,_,A){this.r=L,this.s=_,this.recovery=A,this.assertValidity()}static fromCompact(L){let _=e.nByteLength;return L=Fe("compactSignature",L,_*2),new g(m(L,0,_),m(L,_,2*_))}static fromDER(L){let{r:_,s:A}=Wn.toSig(Fe("DER",L));return new g(_,A)}assertValidity(){xt("r",this.r,gt,n),xt("s",this.s,gt,n)}addRecoveryBit(L){return new g(this.r,this.s,L)}recoverPublicKey(L){let{r:_,s:A,recovery:R}=this,P=k(Fe("msgHash",L));if(R==null||![0,1,2,3].includes(R))throw new Error("recovery id invalid");let q=R===2||R===3?_+e.n:_;if(q>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let z=R&1?"03":"02",j=c.fromHex(z+f(q)),ae=a(q),le=s(-P*ae),fe=s(A*ae),xe=c.BASE.multiplyAndAddUnsafe(j,le,fe);if(!xe)throw new Error("point at infinify");return xe.assertValidity(),xe}hasHighS(){return h(this.s)}normalizeS(){return this.hasHighS()?new g(this.r,s(-this.s),this.recovery):this}toDERRawBytes(){return si(this.toDERHex())}toDERHex(){return Wn.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return si(this.toCompactHex())}toCompactHex(){return f(this.r)+f(this.s)}}let y={isValidPrivateKey(D){try{return l(D),!0}catch{return!1}},normPrivateKeyToScalar:l,randomPrivateKey:()=>{let D=Y0(e.n);return n6(e.randomBytes(D),e.n)},precompute(D=8,L=c.BASE){return L._setWindowSize(D),L.multiply(BigInt(3)),L}};function b(D,L=!0){return c.fromPrivateKey(D).toRawBytes(L)}function w(D){let L=wo(D),_=typeof D=="string",A=(L||_)&&D.length;return L?A===o||A===i:_?A===2*o||A===2*i:D instanceof c}function x(D,L,_=!0){if(w(D))throw new Error("first arg must be private key");if(!w(L))throw new Error("second arg must be public key");return c.fromHex(L).multiply(l(D)).toRawBytes(_)}let T=e.bits2int||function(D){let L=Bn(D),_=D.length*8-e.nBitLength;return _>0?L>>BigInt(_):L},k=e.bits2int_modN||function(D){return s(T(D))},v=Ea(e.nBitLength);function S(D){return xt(`num < 2^${e.nBitLength}`,D,zn,v),bo(D,e.nByteLength)}function I(D,L,_=$){if(["recovered","canonical"].some(Oe=>Oe in _))throw new Error("sign() legacy options not supported");let{hash:A,randomBytes:R}=e,{lowS:P,prehash:q,extraEntropy:z}=_;P==null&&(P=!0),D=Fe("msgHash",D),f8(_),q&&(D=Fe("prehashed msgHash",A(D)));let j=k(D),ae=l(L),le=[S(ae),S(j)];if(z!=null&&z!==!1){let Oe=z===!0?R(t.BYTES):z;le.push(Fe("extraEntropy",Oe))}let fe=Mn(...le),xe=j;function Be(Oe){let Ke=T(Oe);if(!u(Ke))return;let Mt=a(Ke),ct=c.BASE.multiply(Ke).toAffine(),Gt=s(ct.x);if(Gt===zn)return;let Tn=s(Mt*s(xe+Gt*ae));if(Tn===zn)return;let aa=(ct.x===Gt?0:2)|Number(ct.y&gt),ca=Tn;return P&&h(Tn)&&(ca=p(Tn),aa^=1),new g(Gt,ca,aa)}return{seed:fe,k2sig:Be}}let $={lowS:e.lowS,prehash:!1},N={lowS:e.lowS,prehash:!1};function M(D,L,_=$){let{seed:A,k2sig:R}=I(D,L,_),P=e;return H0(P.hash.outputLen,P.nByteLength,P.hmac)(A,R)}c.BASE._setWindowSize(8);function B(D,L,_,A=N){let R=D;if(L=Fe("msgHash",L),_=Fe("publicKey",_),"strict"in A)throw new Error("options.strict was renamed to lowS");f8(A);let{lowS:P,prehash:q}=A,z,j;try{if(typeof R=="string"||wo(R))try{z=g.fromDER(R)}catch(ct){if(!(ct instanceof Wn.Err))throw ct;z=g.fromCompact(R)}else if(typeof R=="object"&&typeof R.r=="bigint"&&typeof R.s=="bigint"){let{r:ct,s:Gt}=R;z=new g(ct,Gt)}else throw new Error("PARSE");j=c.fromHex(_)}catch(ct){if(ct.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(P&&z.hasHighS())return!1;q&&(L=e.hash(L));let{r:ae,s:le}=z,fe=k(L),xe=a(le),Be=s(fe*xe),Oe=s(ae*xe),Ke=c.BASE.multiplyAndAddUnsafe(j,Be,Oe)?.toAffine();return Ke?s(Ke.x)===ae:!1}return{CURVE:e,getPublicKey:b,getSharedSecret:x,sign:M,verify:B,ProjectivePoint:c,Signature:g,utils:y}}function _S(r){return{hash:r,hmac:(e,...t)=>_o(r,e,B0(...t)),randomBytes:oi}}function m8(r,e){let t=n=>p8({...r,..._S(n)});return Object.freeze({...t(e),create:t})}var w8=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),g8=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),IS=BigInt(1),h2=BigInt(2),y8=(r,e)=>(r+e/h2)/e;function TS(r){let e=w8,t=BigInt(3),n=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,d=l*l*r%e,u=$e(d,t,e)*d%e,f=$e(u,t,e)*d%e,h=$e(f,h2,e)*l%e,p=$e(h,o,e)*h%e,m=$e(p,i,e)*p%e,g=$e(m,a,e)*m%e,y=$e(g,c,e)*g%e,b=$e(y,a,e)*m%e,w=$e(b,t,e)*d%e,x=$e(w,s,e)*p%e,T=$e(x,n,e)*l%e,k=$e(T,h2,e);if(!p2.eql(p2.sqr(k),r))throw new Error("Cannot find square root");return k}var p2=xo(w8,void 0,void 0,{sqrt:TS}),Cr=m8({a:BigInt(0),b:BigInt(7),Fp:p2,n:g8,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=g8,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-IS*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=t,s=BigInt("0x100000000000000000000000000000000"),a=y8(i*r,e),c=y8(-n*r,e),l=Ie(r-a*t-c*o,e),d=Ie(-a*n-c*i,e),u=l>s,f=d>s;if(u&&(l=e-l),f&&(d=e-d),l>s||d>s)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:u,k1:l,k2neg:f,k2:d}}}},Ir),QB=BigInt(0);var XB=Cr.ProjectivePoint;function m2(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function b8(r,e){let t=dt.digest(e instanceof Uint8Array?e:e.subarray());if(m2(t))return t.then(({digest:n})=>Cr.sign(n,r).toDERRawBytes()).catch(n=>{throw new Oa(String(n))});try{return Cr.sign(t.digest,r).toDERRawBytes()}catch(n){throw new Oa(String(n))}}function x8(r,e,t){let n=dt.digest(t instanceof Uint8Array?t:t.subarray());if(m2(n))return n.then(({digest:o})=>Cr.verify(e,o,r)).catch(o=>{throw new Ma(String(o))});try{return Cr.verify(e,n.digest,r)}catch(o){throw new Ma(String(o))}}var $a=class{type="secp256k1";raw;_key;constructor(e){this._key=S8(e),this.raw=E8(this._key)}toMultihash(){return Jt.digest(Lt(this))}toCID(){return Z.createV1(114,this.toMultihash())}toString(){return Se.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}verify(e,t){return x8(this._key,t,e)}},Ka=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=v8(e),this.publicKey=new $a(t??A8(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}sign(e){return b8(this.raw,e)}};function g2(r){return new Ka(r)}function y2(r){return new $a(r)}async function _8(){let r=kS();return new Ka(r)}function E8(r){return Cr.ProjectivePoint.fromHex(r).toRawBytes(!0)}function v8(r){try{return Cr.getPublicKey(r,!0),r}catch(e){throw new la(String(e))}}function S8(r){try{return Cr.ProjectivePoint.fromHex(r),r}catch(e){throw new kn(String(e))}}function A8(r){try{return Cr.getPublicKey(r,!0)}catch(e){throw new la(String(e))}}function kS(){return Cr.utils.randomPrivateKey()}async function Vu(r,e){if(r==="Ed25519")return m6();if(r==="secp256k1")return _8();if(r==="RSA")return f2(e??2048);throw new Kr}function rt(r){let{Type:e,Data:t}=gn.decode(r),n=t??new Uint8Array;switch(e){case Qe.RSA:return d2(n);case Qe.Ed25519:return e2(n);case Qe.secp256k1:return y2(n);default:throw new Kr}}function Hu(r){let{Type:e,Data:t}=gn.decode(r.digest),n=t??new Uint8Array;switch(e){case Qe.Ed25519:return e2(n);case Qe.secp256k1:return y2(n);default:throw new Kr}}function Lt(r){return gn.encode({Type:Qe[r.type],Data:r.raw})}function I8(r){let e=Ta.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Qe.RSA:return $u(t);case Qe.Ed25519:return J0(t);case Qe.secp256k1:return g2(t);default:throw new Kr}}function T8(r){return r.byteLength===64?J0(r):r.byteLength===32?g2(r):$u(r)}function ls(r){return Ta.encode({Type:Qe[r.type],Data:r.raw})}var k8=Symbol.for("nodejs.util.inspect.custom"),CS=114,Va=class{type;multihash;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[il]=!0;toString(){return this.string==null&&(this.string=Se.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return Z.createV1(CS,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return te(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return te(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[k8](){return`PeerId(${this.toString()})`}},Ha=class extends Va{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},qa=class extends Va{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},Wa=class extends Va{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},PS=2336,za=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Jt.digest(O(this.url))}[k8](){return`PeerId(${this.url})`}[il]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return Z.createV1(PS,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=F(e)),e.toString()===this.toString())}};var RS=114,C8=2336;function De(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=Ce(Se.decode(`z${r}`));else{if(e==null)throw new C('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=Ce(e.decode(r))}return yt(t)}function xn(r){if(r.type==="Ed25519")return new qa({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new Wa({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new Ha({multihash:r.toCID().multihash,publicKey:r});throw new Kr}function P8(r){return xn(r.publicKey)}function yt(r){if(LS(r))return new Ha({multihash:r});if(DS(r))try{let e=Hu(r);if(e.type==="Ed25519")return new qa({multihash:r,publicKey:e});if(e.type==="secp256k1")return new Wa({multihash:r,publicKey:e})}catch{let t=F(r.digest);return new za(new URL(t))}throw new ao("Supplied PeerID Multihash is invalid")}function En(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==RS&&r.code!==C8)throw new dl("Supplied PeerID CID is invalid");if(r.code===C8){let e=F(r.multihash.digest);return new za(new URL(e))}return yt(r.multihash)}function DS(r){return r.code===Jt.code}function LS(r){return r.code===dt.code}function di(r,e){let t={[Symbol.iterator]:()=>t,next:()=>{let n=r.next(),o=n.value;return n.done===!0||o==null?{done:!0,value:void 0}:{done:!1,value:e(o)}}};return t}function qu(r){let e=Ce(Se.decode(`z${r}`));return yt(e)}var st=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),{key:t,value:n})}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return di(this.map.entries(),e=>[e[1].key,e[1].value])}forEach(e){this.map.forEach((t,n)=>{e(t.value,t.key,this)})}get(e){return this.map.get(e.toString())?.value}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),{key:e,value:t})}keys(){return di(this.map.values(),e=>e.key)}values(){return di(this.map.values(),e=>e.value)}get size(){return this.map.size}};var nr=class r{set;constructor(e){if(this.set=new Set,e!=null)for(let t of e)this.set.add(t.toString())}get size(){return this.set.size}[Symbol.iterator](){return this.values()}add(e){this.set.add(e.toString())}clear(){this.set.clear()}delete(e){this.set.delete(e.toString())}entries(){return di(this.set.entries(),e=>{let t=qu(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=qu(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return di(this.set.values(),e=>qu(e))}intersection(e){let t=new r;for(let n of e)this.has(n)&&t.add(n);return t}difference(e){let t=new r;for(let n of this)e.has(n)||t.add(n);return t}union(e){let t=new r;for(let n of e)t.add(n);for(let n of this)t.add(n);return t}};function R8(r,e,t,n){ti(r);let o=Q4({dkLen:32,asyncTick:10},n),{c:i,dkLen:s,asyncTick:a}=o;if(ho(i),ho(s),ho(a),i<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=zr(e),l=zr(t),d=new Uint8Array(s),u=_o.create(r,c),f=u._cloneInto().update(l);return{c:i,dkLen:s,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function D8(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function L8(r,e,t,n){let{c:o,dkLen:i,DK:s,PRF:a,PRFSalt:c}=R8(r,e,t,n),l,d=new Uint8Array(4),u=ni(d),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<i;h++,p+=a.outputLen){let m=s.subarray(p,p+a.outputLen);u.setInt32(0,h,!1),(l=c._cloneInto(l)).update(d).digestInto(f),m.set(f.subarray(0,m.length));for(let g=1;g<o;g++){a._cloneInto(l).update(f).digestInto(f);for(let y=0;y<m.length;y++)m[y]^=f[y]}}return D8(a,c,s,l,f)}async function Wu(r,e,t,n){let{c:o,dkLen:i,asyncTick:s,DK:a,PRF:c,PRFSalt:l}=R8(r,e,t,n),d,u=new Uint8Array(4),f=ni(u),h=new Uint8Array(c.outputLen);for(let p=1,m=0;m<i;p++,m+=c.outputLen){let g=a.subarray(m,m+c.outputLen);f.setInt32(0,p,!1),(d=l._cloneInto(d)).update(u).digestInto(h),g.set(h.subarray(0,g.length)),await G4(o-1,s,()=>{c._cloneInto(d).update(h).digestInto(h);for(let y=0;y<g.length;y++)g[y]^=h[y]})}return D8(c,l,a,d,h)}var Ga=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),Io=new Uint32Array(80),w2=class extends po{constructor(){super(64,20,8,!1),this.A=Ga[0]|0,this.B=Ga[1]|0,this.C=Ga[2]|0,this.D=Ga[3]|0,this.E=Ga[4]|0}get(){let{A:e,B:t,C:n,D:o,E:i}=this;return[e,t,n,o,i]}set(e,t,n,o,i){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0}process(e,t){for(let c=0;c<16;c++,t+=4)Io[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Io[c]=$l(Io[c-3]^Io[c-8]^Io[c-14]^Io[c-16],1);let{A:n,B:o,C:i,D:s,E:a}=this;for(let c=0;c<80;c++){let l,d;c<20?(l=Kl(o,i,s),d=1518500249):c<40?(l=o^i^s,d=1859775393):c<60?(l=Vl(o,i,s),d=2400959708):(l=o^i^s,d=3395469782);let u=$l(n,5)+l+a+d+Io[c]|0;a=s,s=i,i=$l(o,30),o=n,n=u}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,this.set(n,o,i,s,a)}roundClean(){Io.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},N8=Ji(()=>new w2);var B8={sha1:N8,"sha2-256":Ir,"sha2-512":yo};function Ya(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(B8).join(" / ");throw new C(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let i=B8[o],s=L8(i,r,e,{c:t,dkLen:n});return it.encode(s).substring(1)}var b2=kt(Gu(),1);var BS=Math.LN2*Math.LN2,Yu=class{seeds;bits;buffer;constructor(e={}){e.seeds!=null?this.seeds=e.seeds:this.seeds=MS(e.hashes??8),this.bits=e.bits??1024,this.buffer=re(Math.ceil(this.bits/8))}add(e){typeof e=="string"&&(e=O(e));for(let t=0;t<this.seeds.length;t++){let o=b2.default.x86.hash32(e,this.seeds[t])%this.bits;this.setbit(o)}}has(e){typeof e=="string"&&(e=O(e));for(let t=0;t<this.seeds.length;t++){let o=b2.default.x86.hash32(e,this.seeds[t])%this.bits;if(!this.getbit(o))return!1}return!0}clear(){this.buffer.fill(0)}setbit(e){let t=Math.floor(e/8),n=e%8,o=this.buffer[t];o|=1<<n,this.buffer[t]=o}getbit(e){let t=Math.floor(e/8),n=e%8;return(this.buffer[t]&1<<n)!==0}};function x2(r,e=.005){let t=OS(r,e);return new Yu(t)}function OS(r,e=.005){let t=Math.round(-1*r*Math.log(e)/BS),n=Math.round(t/r*Math.LN2);return{bits:t,hashes:n}}function MS(r){let e,t,n=[];for(let o=0;o<r;o++)for(e=new ce(pt(4)),n[o]=e.getUint32(0,!0),t=0;t<o;t++)if(n[o]===n[t]){o--;break}return n}var E2=64,jr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>E2)throw new TypeError("Invalid Fingerprint Size");let i=t.hashV(e,n),s=re(o);for(let a=0;a<s.length;a++)s[a]=i[a];s.length===0&&(s[0]=7),this.fp=s,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?te(this.fp,e.fp):!1}};function fi(r,e){return Math.floor(Math.random()*(e-r))+r}var hi=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof jr))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof jr))throw new TypeError("Invalid Fingerprint");for(let t=0;t<this.contents.length;t++)if(this.contents[t]==null)return this.contents[t]=e,!0;return!0}swap(e){if(!(e instanceof jr))throw new TypeError("Invalid Fingerprint");let t=fi(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof jr))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var v2={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},U8={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},F8=new globalThis.TextEncoder;function US(r,e){let t=v2[e],n=U8[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function FS(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=v2[e],o=U8[e],i=r;for(;i.length>0;){let s=F8.encodeInto(i,t);i=i.slice(s.read);for(let a=0;a<s.written;a++)o^=BigInt(t[a]),o=BigInt.asUintN(e,o*n)}return o}function S2(r,{size:e=32,utf8Buffer:t}={}){if(!v2[e])throw new Error("The `size` option must be one of 32, 64, 128, 256, 512, or 1024");if(typeof r=="string"){if(t)return FS(r,e,t);r=F8.encode(r)}return US(r,e)}var $S=kt(Gu(),1);var Xa={hash:r=>Number(S2(r,{size:32})),hashV:(r,e)=>KS(Xa.hash(r,e))};function KS(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),O(e,"base16")}var VS=500,ja=class{bucketSize;filterSize;fingerprintSize;buckets;count;hash;seed;constructor(e){this.filterSize=e.filterSize,this.bucketSize=e.bucketSize??4,this.fingerprintSize=e.fingerprintSize??2,this.count=0,this.buckets=[],this.hash=e.hash??Xa,this.seed=e.seed??fi(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=O(e));let t=new jr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=(n^t.hash())%this.filterSize;if(this.buckets[n]==null&&(this.buckets[n]=new hi(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new hi(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let i=[n,o],s=i[fi(0,i.length-1)];this.buckets[s]==null&&(this.buckets[s]=new hi(this.bucketSize));for(let a=0;a<VS;a++){let c=this.buckets[s].swap(t);if(c!=null&&(s=(s^c.hash())%this.filterSize,this.buckets[s]==null&&(this.buckets[s]=new hi(this.bucketSize)),this.buckets[s].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=O(e));let t=new jr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.has(t)??!1;if(o)return o;let i=(n^t.hash())%this.filterSize;return this.buckets[i]?.has(t)??!1}remove(e){typeof e=="string"&&(e=O(e));let t=new jr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.remove(t)??!1;if(o)return this.count--,o;let i=(n^t.hash())%this.filterSize,s=this.buckets[i]?.remove(t)??!1;return s&&this.count--,s}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},HS={1:.5,2:.84,4:.95,8:.98};function qS(r=.001){return r>.002?2:r>1e-5?4:8}function $8(r,e=.001){let t=qS(e),n=HS[t],o=Math.round(r/n),i=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),E2);return{filterSize:o,bucketSize:t,fingerprintSize:i}}var Qu=class{filterSize;bucketSize;fingerprintSize;scale;filterSeries;hash;seed;constructor(e){this.bucketSize=e.bucketSize??4,this.filterSize=e.filterSize??(1<<18)/this.bucketSize,this.fingerprintSize=e.fingerprintSize??2,this.scale=e.scale??2,this.hash=e.hash??Xa,this.seed=e.seed??fi(0,Math.pow(2,10)),this.filterSeries=[new ja({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=O(e)),this.has(e))return!0;let t=this.filterSeries.find(n=>n.reliable);if(t==null){let n=this.filterSize*Math.pow(this.scale,this.filterSeries.length);t=new ja({filterSize:n,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed}),this.filterSeries.push(t)}return t.add(e)}has(e){typeof e=="string"&&(e=O(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].has(e))return!0;return!1}remove(e){typeof e=="string"&&(e=O(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].remove(e))return!0;return!1}get count(){return this.filterSeries.reduce((e,t)=>e+t.count,0)}};function Za(r,e=.001,t){return new Qu({...$8(r,e),...t??{}})}var Xu=class{filter;constructor(e,t){this.filter=Za(e,t)}has(e){return this.filter.has(e.toMultihash().bytes)}add(e){this.filter.add(e.toMultihash().bytes)}remove(e){this.filter.remove?.(e.toMultihash().bytes)}};function A2(r,e=.001){return new Xu(r,e)}var _2=class extends st{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function Ja(r){let{name:e,metrics:t}=r,n;return t!=null?n=new _2({name:e,metrics:t}):n=new st,n}var Gn=class{full;pendingBytes;wantlist;blocks;blockPresences;constructor(e=!1,t=0){this.full=e,this.wantlist=new Map,this.blocks=new Map,this.blockPresences=new Map,this.pendingBytes=0}addWantlistEntry(e,t){let n=it.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=it.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=it.encode(e.multihash.bytes);this.blocks.set(n,t)}};function WS(r){let e=new Uint8Array(r.reduce((n,o)=>n+pe(o),0)),t=0;for(let n of r)e=Ve(n,e,t),t+=pe(n);return e}var K8=WS;function I2(r){return K8([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var ju=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;constructor(e,t){this.peerId=e.peerId,this.blockstore=e.blockstore,this.network=e.network,this.wants=new Map,this.log=e.logger.forComponent(`helia:bitswap:ledger:${e.peerId}`),this.exchangeCount=0,this.bytesSent=0,this.bytesReceived=0,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock??1024}sentBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesSent+=e}receivedBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesReceived+=e}debtRatio(){return this.bytesSent/(this.bytesReceived+1)}async sendBlocksToPeer(e){let t=new Gn,n=new Set;for(let[o,i]of this.wants.entries())try{let s=await this.blockstore.get(i.cid,e);i.wantType===et.WantHave?s.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:I2(i.cid)})):(this.log("sending have for %c",i.cid),t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Ar.HaveBlock})):(this.log("sending block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:I2(i.cid)}))}catch(s){if(s.name!=="NotFoundError")throw s;if(this.log("do not have block for %c",i.cid),!i.sendDontHave||i.sentDontHave===!0)continue;i.sentDontHave=!0,t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Ar.DontHaveBlock})}if(t.blocks.size>0||t.blockPresences.size>0){this.log("sending message"),await this.network.sendMessage(this.peerId,t,e),this.log("sent message"),this.sentBytes([...t.blocks.values()].reduce((o,i)=>o+i.data.byteLength,0));for(let o of n)this.wants.delete(o)}}};var Zu=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=Ja({name:"helia_bitswap_ledger_map",metrics:e.metrics}),this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}ledgerForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return{peer:t.peerId,value:t.debtRatio(),sent:t.bytesSent,received:t.bytesReceived,exchanged:t.exchangeCount}}wantListForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return[...t.wants.values()]}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);if(n==null&&(n=new ju({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,i)=>o+i.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let o of t.wantlist.entries){let i=Z.decode(o.cid),s=F(i.multihash.bytes,"base64");o.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,i),n.wants.delete(s)):(o.wantType===et.WantHave?this.log("peer %p wanted block presence for %c",e,i):this.log("peer %p wanted block for %c",e,i),n.wants.set(s,{cid:i,priority:o.priority,wantType:o.wantType??et.WantBlock,sendDontHave:o.sendDontHave??!1}))}}this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=F(e.multihash.bytes,"base64"),o=[];for(let i of this.ledgerMap.values())i.wants.has(n)&&o.push(i);await Promise.all(o.map(async i=>i.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};function zS(r,e){try{if(typeof r=="string"&&r.length>0)return GS(r);if(typeof r=="number"&&isFinite(r))return e?.long?QS(r):YS(r);throw new Error("Value is not a string or number.")}catch(t){let n=XS(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function GS(r){if(r=String(r),r.length>100)throw new Error("Value exceeds the maximum length of 100 characters.");let e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(!e)return NaN;let t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*315576e5;case"weeks":case"week":case"w":return t*6048e5;case"days":case"day":case"d":return t*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return t*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return t*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return t*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:throw new Error(`The unit ${n} was matched, but no matching case exists.`)}}var e1=zS;function YS(r){let e=Math.abs(r);return e>=864e5?`${Math.round(r/864e5)}d`:e>=36e5?`${Math.round(r/36e5)}h`:e>=6e4?`${Math.round(r/6e4)}m`:e>=1e3?`${Math.round(r/1e3)}s`:`${r}ms`}function QS(r){let e=Math.abs(r);return e>=864e5?Ju(r,e,864e5,"day"):e>=36e5?Ju(r,e,36e5,"hour"):e>=6e4?Ju(r,e,6e4,"minute"):e>=1e3?Ju(r,e,1e3,"second"):`${r} ms`}function Ju(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function XS(r){return typeof r=="object"&&r!==null&&"message"in r}function T2(r){t.debug=t,t.default=t,t.coerce=c,t.disable=i,t.enable=o,t.enabled=s,t.humanize=e1,t.destroy=l,Object.keys(r).forEach(d=>{t[d]=r[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let u=0;for(let f=0;f<d.length;f++)u=(u<<5)-u+d.charCodeAt(f),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(d){let u,f=null,h,p;function m(...g){if(!m.enabled)return;let y=m,b=Number(new Date),w=b-(u||b);y.diff=w,y.prev=u,y.curr=b,u=b,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let x=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(k,v)=>{if(k==="%%")return"%";x++;let S=t.formatters[v];if(typeof S=="function"){let I=g[x];k=S.call(y,I),g.splice(x,1),x--}return k}),t.formatArgs.call(y,g),(y.log||t.log).apply(y,g)}return m.namespace=d,m.useColors=t.useColors(),m.color=t.selectColor(d),m.extend=n,m.destroy=t.destroy,Object.defineProperty(m,"enabled",{enumerable:!0,configurable:!1,get:()=>f!==null?f:(h!==t.namespaces&&(h=t.namespaces,p=t.enabled(d)),p),set:g=>{f=g}}),typeof t.init=="function"&&t.init(m),m}function n(d,u){let f=t(this.namespace+(typeof u>"u"?":":u)+d);return f.log=this.log,f}function o(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let u,f=(typeof d=="string"?d:"").split(/[\s,]+/),h=f.length;for(u=0;u<h;u++)f[u]&&(d=f[u].replace(/\*/g,".*?"),d[0]==="-"?t.skips.push(new RegExp("^"+d.substr(1)+"$")):t.names.push(new RegExp("^"+d+"$")))}function i(){let d=[...t.names.map(a),...t.skips.map(a).map(u=>"-"+u)].join(",");return t.enable(""),d}function s(d){if(d[d.length-1]==="*")return!0;let u,f;for(u=0,f=t.skips.length;u<f;u++)if(t.skips[u].test(d))return!1;for(u=0,f=t.names.length;u<f;u++)if(t.names[u].test(d))return!0;return!1}function a(d){return d.toString().substring(2,d.toString().length-2).replace(/\.\*\?$/,"*")}function c(d){return d instanceof Error?d.stack??d.message:d}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.setupFormatters(t.formatters),t.enable(t.load()),t}var t1=nA(),jS=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function ZS(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/(edge|trident)\/(\d+)/)!=null?!1:typeof document<"u"&&document.documentElement?.style?.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/firefox\/(\d+)/)!=null&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/applewebkit\/(\d+)/)}function JS(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+e1(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,n=0;r[0].replace(/%[a-zA-Z%]/g,o=>{o!=="%%"&&(t++,o==="%c"&&(n=t))}),r.splice(n,0,e)}var eA=console.debug??console.log??(()=>{});function tA(r){try{r?t1?.setItem("debug",r):t1?.removeItem("debug")}catch{}}function rA(){let r;try{r=t1?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function nA(){try{return localStorage}catch{}}function oA(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var V8=T2({formatArgs:JS,save:tA,load:rA,useColors:ZS,setupFormatters:oA,colors:jS,storage:t1,log:eA});var or=V8;or.formatters.b=r=>r==null?"undefined":Se.baseEncode(r);or.formatters.t=r=>r==null?"undefined":ut.baseEncode(r);or.formatters.m=r=>r==null?"undefined":it.baseEncode(r);or.formatters.p=r=>r==null?"undefined":r.toString();or.formatters.c=r=>r==null?"undefined":r.toString();or.formatters.k=r=>r==null?"undefined":r.toString();or.formatters.a=r=>r==null?"undefined":r.toString();or.formatters.e=r=>r==null?"undefined":r.stack??r.message;function iA(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e}function To(){return{forComponent(r){return pr(r)}}}function pr(r){let e=iA(`${r}:trace`);return or.enabled(`${r}:trace`)&&or.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=or(`${r}:trace`)),Object.assign(or(r),{error:or(`${r}:error`),trace:e})}var C2=kt(q8(),1);var us=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},P2=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},W8=r=>globalThis.DOMException===void 0?new P2(r):new DOMException(r),z8=r=>{let e=r.reason===void 0?W8("This operation was aborted."):r.reason;return e instanceof Error?e:W8(e)};function Zr(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,c=new Promise((l,d)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:f}=e;f.aborted&&d(z8(f)),f.addEventListener("abort",()=>{d(z8(f))})}if(t===Number.POSITIVE_INFINITY){r.then(l,d);return}let u=new us;s=i.setTimeout.call(void 0,()=>{if(n){try{l(n())}catch(f){d(f)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?l():o instanceof Error?d(o):(u.message=o??`Promise timed out after ${t} milliseconds`,d(u))},t),(async()=>{try{l(await r)}catch(f){d(f)}})()}).finally(()=>{c.clear()});return c.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},c}function R2(r,e,t){let n=0,o=r.length;for(;o>0;){let i=Math.trunc(o/2),s=n+i;t(r[s],e)<=0?(n=++s,o-=i+1):o=i}return n}var tc=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,run:e};if(this.size&&this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=R2(this.#e,n,(i,s)=>s.priority-i.priority);this.#e.splice(o,0,n)}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var Pr=class extends C2.default{#e;#t;#r=0;#o;#a;#l=0;#i;#u;#n;#m;#s=0;#d;#c;#g;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:tc,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#o=e.intervalCap,this.#a=e.interval,this.#n=new e.queueClass,this.#m=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#g=e.throwOnTimeout===!0,this.#c=e.autoStart===!1}get#b(){return this.#t||this.#r<this.#o}get#x(){return this.#s<this.#d}#E(){this.#s--,this.#f(),this.emit("next")}#v(){this.#w(),this.#y(),this.#u=void 0}get#S(){let e=Date.now();if(this.#i===void 0){let t=this.#l-e;if(t<0)this.#r=this.#e?this.#s:0;else return this.#u===void 0&&(this.#u=setTimeout(()=>{this.#v()},t)),!0}return!1}#f(){if(this.#n.size===0)return this.#i&&clearInterval(this.#i),this.#i=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#c){let e=!this.#S;if(this.#b&&this.#x){let t=this.#n.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#t||this.#i!==void 0||(this.#i=setInterval(()=>{this.#w()},this.#a),this.#l=Date.now()+this.#a)}#w(){this.#r===0&&this.#s===0&&this.#i&&(clearInterval(this.#i),this.#i=void 0),this.#r=this.#e?this.#s:0,this.#h()}#h(){for(;this.#f(););}get concurrency(){return this.#d}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#d=e,this.#h()}async#A(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}async add(e,t={}){return t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#n.enqueue(async()=>{this.#s++,this.#r++;try{t.signal?.throwIfAborted();let i=e({signal:t.signal});t.timeout&&(i=Zr(Promise.resolve(i),{milliseconds:t.timeout})),t.signal&&(i=Promise.race([i,this.#A(t.signal)]));let s=await i;n(s),this.emit("completed",s)}catch(i){if(i instanceof us&&!t.throwOnTimeout){n();return}o(i),this.emit("error",i)}finally{this.#E()}},t),this.emit("add"),this.#f()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#c?(this.#c=!1,this.#h(),this):this}pause(){this.#c=!0}clear(){this.#n=new this.#m}async onEmpty(){this.#n.size!==0&&await this.#p("empty")}async onSizeLessThan(e){this.#n.size<e||await this.#p("next",()=>this.#n.size<e)}async onIdle(){this.#s===0&&this.#n.size===0||await this.#p("idle")}async#p(e,t){return new Promise(n=>{let o=()=>{t&&!t()||(this.off(e,o),n())};this.on(e,o)})}get size(){return this.#n.size}sizeBy(e){return this.#n.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#c}};function n1(r){let e=[mr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var D2=60;function o1(r){return{Status:r.Status??0,TC:r.TC??r.flag_tc??!1,RD:r.RD??r.flag_rd??!1,RA:r.RA??r.flag_ra??!1,AD:r.AD??r.flag_ad??!1,CD:r.CD??r.flag_cd??!1,Question:(r.Question??r.questions??[]).map(e=>({name:e.name,type:mr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:mr[e.type],TTL:e.TTL??e.ttl??D2,data:e.data instanceof Uint8Array?F(e.data):e.data}))}}var cA=4;function L2(r,e={}){let t=new Pr({concurrency:e.queryConcurrency??cA});return async(n,o={})=>{let i=new URLSearchParams;i.set("name",n),n1(o.types).forEach(a=>{i.append("type",mr[a])}),o.onProgress?.(new H("dns:query",{detail:n}));let s=await t.add(async()=>{let a=await fetch(`${r}?${i}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=o1(await a.json());return o.onProgress?.(new H("dns:response",{detail:c})),c},{signal:o.signal});if(s==null)throw new Error("No DNS response received");return s}}function G8(){return[L2("https://cloudflare-dns.com/dns-query"),L2("https://dns.google/resolve")]}var Q8=kt(N2(),1);var B2=class{lru;constructor(e){this.lru=(0,Q8.default)(e)}get(e,t){let n=!0,o=[];for(let i of t){let s=this.getAnswers(e,i);if(s.length===0){n=!1;break}o.push(...s)}if(n)return o1({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let i=o.filter(s=>s.expires>Date.now()).map(({expires:s,value:a})=>({...a,TTL:Math.round((s-Date.now())/1e3),type:mr[a.type]}));return i.length===0&&this.lru.remove(n),i}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??D2)*1e3,value:t}),this.lru.set(n,o)}remove(e,t){let n=`${e.toLowerCase()}-${t}`;this.lru.remove(n)}clear(){this.lru.clear()}};function X8(r){return new B2(r)}var lA=1e3,i1=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=X8(e.cacheSize??lA),Object.entries(e.resolvers??{}).forEach(([t,n])=>{Array.isArray(n)||(n=[n]),t.endsWith(".")||(t=`${t}.`),this.resolvers[t]=n}),this.resolvers["."]==null&&(this.resolvers["."]=G8())}async query(e,t={}){let n=n1(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new H("dns:cache",{detail:o})),o;let i=`${e.split(".").pop()}.`,s=(this.resolvers[i]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of s){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,types:n});for(let d of l.Answer)this.cache.add(e,d);return l}catch(l){a.push(l),t.onProgress?.(new H("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var mr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(mr||(mr={}));function s1(r={}){return new i1(r)}var uA=["string","number","bigint","symbol"],dA=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function j8(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(uA.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(fA(r))return"Buffer";let t=hA(r);return t||"Object"}function fA(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function hA(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(dA.includes(e))return e}var E=class{constructor(e,t,n){this.major=e,this.majorEncoded=e<<5,this.name=t,this.terminal=n}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};E.uint=new E(0,"uint",!0);E.negint=new E(1,"negint",!0);E.bytes=new E(2,"bytes",!0);E.string=new E(3,"string",!0);E.array=new E(4,"array",!1);E.map=new E(5,"map",!1);E.tag=new E(6,"tag",!1);E.float=new E(7,"float",!0);E.false=new E(7,"false",!0);E.true=new E(7,"true",!0);E.null=new E(7,"null",!0);E.undefined=new E(7,"undefined",!0);E.break=new E(7,"break",!0);var U=class{constructor(e,t,n){this.type=e,this.value=t,this.encodedLength=n,this.encodedBytes=void 0,this.byteValue=void 0}toString(){return`Token[${this.type}].${this.value}`}};var ds=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",pA=new TextDecoder,mA=new TextEncoder;function a1(r){return ds&&globalThis.Buffer.isBuffer(r)}function rc(r){return r instanceof Uint8Array?a1(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var t5=ds?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):J8(r,e,t):(r,e,t)=>t-e>64?pA.decode(r.subarray(e,t)):J8(r,e,t),c1=ds?r=>r.length>64?globalThis.Buffer.from(r):Z8(r):r=>r.length>64?mA.encode(r):Z8(r),vn=r=>Uint8Array.from(r),fs=ds?(r,e,t)=>a1(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),r5=ds?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),rc(globalThis.Buffer.concat(r,e))):(r,e)=>{let t=new Uint8Array(e),n=0;for(let o of r)n+o.length>t.length&&(o=o.subarray(0,t.length-n)),t.set(o,n),n+=o.length;return t},n5=ds?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function o5(r,e){if(a1(r)&&a1(e))return r.compare(e);for(let t=0;t<r.length;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}function Z8(r){let e=[],t=0;for(let n=0;n<r.length;n++){let o=r.charCodeAt(n);o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&n+1<r.length&&(r.charCodeAt(n+1)&64512)===56320?(o=65536+((o&1023)<<10)+(r.charCodeAt(++n)&1023),e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}function J8(r,e,t){let n=[];for(;e<t;){let o=r[e],i=null,s=o>239?4:o>223?3:o>191?2:1;if(e+s<=t){let a,c,l,d;switch(s){case 1:o<128&&(i=o);break;case 2:a=r[e+1],(a&192)===128&&(d=(o&31)<<6|a&63,d>127&&(i=d));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(d=(o&15)<<12|(a&63)<<6|c&63,d>2047&&(d<55296||d>57343)&&(i=d));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(d=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,d>65535&&d<1114112&&(i=d))}}i===null?(i=65533,s=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|i&1023),n.push(i),e+=s}return O2(n)}var e5=4096;function O2(r){let e=r.length;if(e<=e5)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=e5));return t}var gA=256,nc=class{constructor(e=gA){this.chunkSize=e,this.cursor=0,this.maxCursor=-1,this.chunks=[],this._initReuseChunk=null}reset(){this.cursor=0,this.maxCursor=-1,this.chunks.length&&(this.chunks=[]),this._initReuseChunk!==null&&(this.chunks.push(this._initReuseChunk),this.maxCursor=this._initReuseChunk.length-1)}push(e){let t=this.chunks[this.chunks.length-1];if(this.cursor+e.length<=this.maxCursor+1){let o=t.length-(this.maxCursor-this.cursor)-1;t.set(e,o)}else{if(t){let o=t.length-(this.maxCursor-this.cursor)-1;o<t.length&&(this.chunks[this.chunks.length-1]=t.subarray(0,o),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(t=n5(this.chunkSize),this.chunks.push(t),this.maxCursor+=t.length,this._initReuseChunk===null&&(this._initReuseChunk=t),t.set(e,0)):(this.chunks.push(e),this.maxCursor+=e.length)}this.cursor+=e.length}toBytes(e=!1){let t;if(this.chunks.length===1){let n=this.chunks[0];e&&this.cursor>n.length/2?(t=this.cursor===n.length?n:n.subarray(0,this.cursor),this._initReuseChunk=null,this.chunks=[]):t=fs(n,0,this.cursor)}else t=r5(this.chunks,this.cursor);return e&&this.reset(),t}};var X="CBOR decode error:",Yn="CBOR encode error:",oc=[];oc[23]=1;oc[24]=2;oc[25]=3;oc[26]=5;oc[27]=9;function Qn(r,e,t){if(r.length-e<t)throw new Error(`${X} not enough data for type`)}var wt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function gr(r,e,t){Qn(r,e,1);let n=r[e];if(t.strict===!0&&n<wt[0])throw new Error(`${X} integer encoded in more bytes than necessary (strict decode)`);return n}function yr(r,e,t){Qn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<wt[1])throw new Error(`${X} integer encoded in more bytes than necessary (strict decode)`);return n}function wr(r,e,t){Qn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<wt[2])throw new Error(`${X} integer encoded in more bytes than necessary (strict decode)`);return n}function br(r,e,t){Qn(r,e,8);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3],o=r[e+4]*16777216+(r[e+5]<<16)+(r[e+6]<<8)+r[e+7],i=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&i<wt[3])throw new Error(`${X} integer encoded in more bytes than necessary (strict decode)`);if(i<=Number.MAX_SAFE_INTEGER)return Number(i);if(t.allowBigInt===!0)return i;throw new Error(`${X} integers outside of the safe integer range are not supported`)}function i5(r,e,t,n){return new U(E.uint,gr(r,e+1,n),2)}function s5(r,e,t,n){return new U(E.uint,yr(r,e+1,n),3)}function a5(r,e,t,n){return new U(E.uint,wr(r,e+1,n),5)}function c5(r,e,t,n){return new U(E.uint,br(r,e+1,n),9)}function Rr(r,e){return vt(r,0,e.value)}function vt(r,e,t){if(t<wt[0]){let n=Number(t);r.push([e|n])}else if(t<wt[1]){let n=Number(t);r.push([e|24,n])}else if(t<wt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<wt[3]){let n=Number(t);r.push([e|26,n>>>24&255,n>>>16&255,n>>>8&255,n&255])}else{let n=BigInt(t);if(n<wt[4]){let o=[e|27,0,0,0,0,0,0,0],i=Number(n&BigInt(4294967295)),s=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=i&255,i=i>>8,o[7]=i&255,i=i>>8,o[6]=i&255,i=i>>8,o[5]=i&255,o[4]=s&255,s=s>>8,o[3]=s&255,s=s>>8,o[2]=s&255,s=s>>8,o[1]=s&255,r.push(o)}else throw new Error(`${X} encountered BigInt larger than allowable range`)}}Rr.encodedSize=function(e){return vt.encodedSize(e.value)};vt.encodedSize=function(e){return e<wt[0]?1:e<wt[1]?2:e<wt[2]?3:e<wt[3]?5:9};Rr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function l5(r,e,t,n){return new U(E.negint,-1-gr(r,e+1,n),2)}function u5(r,e,t,n){return new U(E.negint,-1-yr(r,e+1,n),3)}function d5(r,e,t,n){return new U(E.negint,-1-wr(r,e+1,n),5)}var M2=BigInt(-1),f5=BigInt(1);function h5(r,e,t,n){let o=br(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new U(E.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${X} integers outside of the safe integer range are not supported`);return new U(E.negint,M2-BigInt(o),9)}function l1(r,e){let t=e.value,n=typeof t=="bigint"?t*M2-f5:t*-1-1;vt(r,e.type.majorEncoded,n)}l1.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*M2-f5:t*-1-1;return n<wt[0]?1:n<wt[1]?2:n<wt[2]?3:n<wt[3]?5:9};l1.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function ic(r,e,t,n){Qn(r,e,t+n);let o=fs(r,e+t,e+t+n);return new U(E.bytes,o,t+n)}function p5(r,e,t,n){return ic(r,e,1,t)}function m5(r,e,t,n){return ic(r,e,2,gr(r,e+1,n))}function g5(r,e,t,n){return ic(r,e,3,yr(r,e+1,n))}function y5(r,e,t,n){return ic(r,e,5,wr(r,e+1,n))}function w5(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${X} 64-bit integer bytes lengths not supported`);return ic(r,e,9,o)}function u1(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===E.string?c1(r.value):r.value),r.encodedBytes}function hs(r,e){let t=u1(e);vt(r,e.type.majorEncoded,t.length),r.push(t)}hs.encodedSize=function(e){let t=u1(e);return vt.encodedSize(t.length)+t.length};hs.compareTokens=function(e,t){return wA(u1(e),u1(t))};function wA(r,e){return r.length<e.length?-1:r.length>e.length?1:o5(r,e)}function sc(r,e,t,n,o){let i=t+n;Qn(r,e,i);let s=new U(E.string,t5(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=fs(r,e+t,e+i)),s}function b5(r,e,t,n){return sc(r,e,1,t,n)}function x5(r,e,t,n){return sc(r,e,2,gr(r,e+1,n),n)}function E5(r,e,t,n){return sc(r,e,3,yr(r,e+1,n),n)}function v5(r,e,t,n){return sc(r,e,5,wr(r,e+1,n),n)}function S5(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${X} 64-bit integer string lengths not supported`);return sc(r,e,9,o,n)}var A5=hs;function ps(r,e,t,n){return new U(E.array,n,t)}function _5(r,e,t,n){return ps(r,e,1,t)}function I5(r,e,t,n){return ps(r,e,2,gr(r,e+1,n))}function T5(r,e,t,n){return ps(r,e,3,yr(r,e+1,n))}function k5(r,e,t,n){return ps(r,e,5,wr(r,e+1,n))}function C5(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${X} 64-bit integer array lengths not supported`);return ps(r,e,9,o)}function P5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${X} indefinite length items not allowed`);return ps(r,e,1,1/0)}function d1(r,e){vt(r,E.array.majorEncoded,e.value)}d1.compareTokens=Rr.compareTokens;d1.encodedSize=function(e){return vt.encodedSize(e.value)};function ms(r,e,t,n){return new U(E.map,n,t)}function R5(r,e,t,n){return ms(r,e,1,t)}function D5(r,e,t,n){return ms(r,e,2,gr(r,e+1,n))}function L5(r,e,t,n){return ms(r,e,3,yr(r,e+1,n))}function N5(r,e,t,n){return ms(r,e,5,wr(r,e+1,n))}function B5(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${X} 64-bit integer map lengths not supported`);return ms(r,e,9,o)}function O5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${X} indefinite length items not allowed`);return ms(r,e,1,1/0)}function f1(r,e){vt(r,E.map.majorEncoded,e.value)}f1.compareTokens=Rr.compareTokens;f1.encodedSize=function(e){return vt.encodedSize(e.value)};function M5(r,e,t,n){return new U(E.tag,t,1)}function U5(r,e,t,n){return new U(E.tag,gr(r,e+1,n),2)}function F5(r,e,t,n){return new U(E.tag,yr(r,e+1,n),3)}function $5(r,e,t,n){return new U(E.tag,wr(r,e+1,n),5)}function K5(r,e,t,n){return new U(E.tag,br(r,e+1,n),9)}function h1(r,e){vt(r,E.tag.majorEncoded,e.value)}h1.compareTokens=Rr.compareTokens;h1.encodedSize=function(e){return vt.encodedSize(e.value)};var AA=20,_A=21,IA=22,TA=23;function V5(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${X} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new U(E.null,null,1):new U(E.undefined,void 0,1)}function H5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${X} indefinite length items not allowed`);return new U(E.break,void 0,1)}function U2(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${X} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${X} Infinity values are not supported`)}return new U(E.float,r,e)}function q5(r,e,t,n){return U2(F2(r,e+1),3,n)}function W5(r,e,t,n){return U2($2(r,e+1),5,n)}function z5(r,e,t,n){return U2(X5(r,e+1),9,n)}function p1(r,e,t){let n=e.value;if(n===!1)r.push([E.float.majorEncoded|AA]);else if(n===!0)r.push([E.float.majorEncoded|_A]);else if(n===null)r.push([E.float.majorEncoded|IA]);else if(n===void 0)r.push([E.float.majorEncoded|TA]);else{let o,i=!1;(!t||t.float64!==!0)&&(Y5(n),o=F2(Jr,1),n===o||Number.isNaN(n)?(Jr[0]=249,r.push(Jr.slice(0,3)),i=!0):(Q5(n),o=$2(Jr,1),n===o&&(Jr[0]=250,r.push(Jr.slice(0,5)),i=!0))),i||(kA(n),o=X5(Jr,1),Jr[0]=251,r.push(Jr.slice(0,9)))}}p1.encodedSize=function(e,t){let n=e.value;if(n===!1||n===!0||n===null||n===void 0)return 1;if(!t||t.float64!==!0){Y5(n);let o=F2(Jr,1);if(n===o||Number.isNaN(n))return 3;if(Q5(n),o=$2(Jr,1),n===o)return 5}return 9};var G5=new ArrayBuffer(9),Dr=new DataView(G5,1),Jr=new Uint8Array(G5,0);function Y5(r){if(r===1/0)Dr.setUint16(0,31744,!1);else if(r===-1/0)Dr.setUint16(0,64512,!1);else if(Number.isNaN(r))Dr.setUint16(0,32256,!1);else{Dr.setFloat32(0,r);let e=Dr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)Dr.setUint16(0,31744,!1);else if(t===0)Dr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?Dr.setUint16(0,0):o<-14?Dr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):Dr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function F2(r,e){if(r.length-e<2)throw new Error(`${X} not enough data for float16`);let t=(r[e]<<8)+r[e+1];if(t===31744)return 1/0;if(t===64512)return-1/0;if(t===32256)return NaN;let n=t>>10&31,o=t&1023,i;return n===0?i=o*2**-24:n!==31?i=(o+1024)*2**(n-25):i=o===0?1/0:NaN,t&32768?-i:i}function Q5(r){Dr.setFloat32(0,r,!1)}function $2(r,e){if(r.length-e<4)throw new Error(`${X} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function kA(r){Dr.setFloat64(0,r,!1)}function X5(r,e){if(r.length-e<8)throw new Error(`${X} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}p1.compareTokens=Rr.compareTokens;function Ae(r,e,t){throw new Error(`${X} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function m1(r){return()=>{throw new Error(`${X} ${r}`)}}var V=[];for(let r=0;r<=23;r++)V[r]=Ae;V[24]=i5;V[25]=s5;V[26]=a5;V[27]=c5;V[28]=Ae;V[29]=Ae;V[30]=Ae;V[31]=Ae;for(let r=32;r<=55;r++)V[r]=Ae;V[56]=l5;V[57]=u5;V[58]=d5;V[59]=h5;V[60]=Ae;V[61]=Ae;V[62]=Ae;V[63]=Ae;for(let r=64;r<=87;r++)V[r]=p5;V[88]=m5;V[89]=g5;V[90]=y5;V[91]=w5;V[92]=Ae;V[93]=Ae;V[94]=Ae;V[95]=m1("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)V[r]=b5;V[120]=x5;V[121]=E5;V[122]=v5;V[123]=S5;V[124]=Ae;V[125]=Ae;V[126]=Ae;V[127]=m1("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)V[r]=_5;V[152]=I5;V[153]=T5;V[154]=k5;V[155]=C5;V[156]=Ae;V[157]=Ae;V[158]=Ae;V[159]=P5;for(let r=160;r<=183;r++)V[r]=R5;V[184]=D5;V[185]=L5;V[186]=N5;V[187]=B5;V[188]=Ae;V[189]=Ae;V[190]=Ae;V[191]=O5;for(let r=192;r<=215;r++)V[r]=M5;V[216]=U5;V[217]=F5;V[218]=$5;V[219]=K5;V[220]=Ae;V[221]=Ae;V[222]=Ae;V[223]=Ae;for(let r=224;r<=243;r++)V[r]=m1("simple values are not supported");V[244]=Ae;V[245]=Ae;V[246]=Ae;V[247]=V5;V[248]=m1("simple values are not supported");V[249]=q5;V[250]=W5;V[251]=z5;V[252]=Ae;V[253]=Ae;V[254]=Ae;V[255]=H5;var en=[];for(let r=0;r<24;r++)en[r]=new U(E.uint,r,1);for(let r=-1;r>=-24;r--)en[31-r]=new U(E.negint,r,1);en[64]=new U(E.bytes,new Uint8Array(0),1);en[96]=new U(E.string,"",1);en[128]=new U(E.array,0,1);en[160]=new U(E.map,0,1);en[244]=new U(E.false,!1,1);en[245]=new U(E.true,!0,1);en[246]=new U(E.null,null,1);function j5(r){switch(r.type){case E.false:return vn([244]);case E.true:return vn([245]);case E.null:return vn([246]);case E.bytes:return r.value.length?void 0:vn([64]);case E.string:return r.value===""?vn([96]):void 0;case E.array:return r.value===0?vn([128]):void 0;case E.map:return r.value===0?vn([160]):void 0;case E.uint:return r.value<24?vn([Number(r.value)]):void 0;case E.negint:if(r.value>=-24)return vn([31-Number(r.value)])}}var PA={float64:!1,mapSorter:LA,quickEncodeToken:j5};function RA(){let r=[];return r[E.uint.major]=Rr,r[E.negint.major]=l1,r[E.bytes.major]=hs,r[E.string.major]=A5,r[E.array.major]=d1,r[E.map.major]=f1,r[E.tag.major]=h1,r[E.float.major]=p1,r}var Z5=RA(),K2=new nc,y1=class r{constructor(e,t){this.obj=e,this.parent=t}includes(e){let t=this;do if(t.obj===e)return!0;while(t=t.parent);return!1}static createCheck(e,t){if(e&&e.includes(t))throw new Error(`${Yn} object contains circular references`);return new r(t,e)}},ko={null:new U(E.null,null),undefined:new U(E.undefined,void 0),true:new U(E.true,!0),false:new U(E.false,!1),emptyArray:new U(E.array,0),emptyMap:new U(E.map,0)},Co={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new U(E.float,r):r>=0?new U(E.uint,r):new U(E.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new U(E.uint,r):new U(E.negint,r)},Uint8Array(r,e,t,n){return new U(E.bytes,r)},string(r,e,t,n){return new U(E.string,r)},boolean(r,e,t,n){return r?ko.true:ko.false},null(r,e,t,n){return ko.null},undefined(r,e,t,n){return ko.undefined},ArrayBuffer(r,e,t,n){return new U(E.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new U(E.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[ko.emptyArray,new U(E.break)]:ko.emptyArray;n=y1.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=g1(s,t,n);return t.addBreakTokens?[new U(E.array,r.length),o,new U(E.break)]:[new U(E.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",i=o?r.keys():Object.keys(r),s=o?r.size:i.length;if(!s)return t.addBreakTokens===!0?[ko.emptyMap,new U(E.break)]:ko.emptyMap;n=y1.createCheck(n,r);let a=[],c=0;for(let l of i)a[c++]=[g1(l,t,n),g1(o?r.get(l):r[l],t,n)];return DA(a,t),t.addBreakTokens?[new U(E.map,s),a,new U(E.break)]:[new U(E.map,s),a]}};Co.Map=Co.Object;Co.Buffer=Co.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))Co[`${r}Array`]=Co.DataView;function g1(r,e={},t){let n=j8(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||Co[n];if(typeof o=="function"){let s=o(r,n,e,t);if(s!=null)return s}let i=Co[n];if(!i)throw new Error(`${Yn} unsupported type: ${n}`);return i(r,n,e,t)}function DA(r,e){e.mapSorter&&r.sort(e.mapSorter)}function LA(r,e){let t=Array.isArray(r[0])?r[0][0]:r[0],n=Array.isArray(e[0])?e[0][0]:e[0];if(t.type!==n.type)return t.type.compare(n.type);let o=t.type.major,i=Z5[o].compareTokens(t,n);return i===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),i}function J5(r,e,t,n){if(Array.isArray(e))for(let o of e)J5(r,o,t,n);else t[e.type.major](r,e,n)}function V2(r,e,t){let n=g1(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let o=t.quickEncodeToken(n);if(o)return o;let i=e[n.type.major];if(i.encodedSize){let s=i.encodedSize(n,t),a=new nc(s);if(i(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return rc(a.chunks[0])}}return K2.reset(),J5(K2,n,e,t),K2.toBytes(!0)}function Po(r,e){return e=Object.assign({},PA,e),V2(r,Z5,e)}var NA={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},w1=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t}pos(){return this._pos}done(){return this._pos>=this.data.length}next(){let e=this.data[this._pos],t=en[e];if(t===void 0){let n=V[e];if(!n)throw new Error(`${X} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,"0")})`);let o=e&31;t=n(this.data,this._pos,o,this.options)}return this._pos+=t.encodedLength,t}},ac=Symbol.for("DONE"),b1=Symbol.for("BREAK");function BA(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=gs(e,t);if(i===b1){if(r.value===1/0)break;throw new Error(`${X} got unexpected break to lengthed array`)}if(i===ac)throw new Error(`${X} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function OA(r,e,t){let n=t.useMaps===!0,o=n?void 0:{},i=n?new Map:void 0;for(let s=0;s<r.value;s++){let a=gs(e,t);if(a===b1){if(r.value===1/0)break;throw new Error(`${X} got unexpected break to lengthed map`)}if(a===ac)throw new Error(`${X} found map but not enough entries (got ${s} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${X} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&i.has(a)||!n&&a in o))throw new Error(`${X} found repeat map key "${a}"`);let c=gs(e,t);if(c===ac)throw new Error(`${X} found map but not enough entries (got ${s} [no value], expected ${r.value})`);n?i.set(a,c):o[a]=c}return n?i:o}function gs(r,e){if(r.done())return ac;let t=r.next();if(t.type===E.break)return b1;if(t.type.terminal)return t.value;if(t.type===E.array)return BA(t,r,e);if(t.type===E.map)return OA(t,r,e);if(t.type===E.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=gs(r,e);return e.tags[t.value](n)}throw new Error(`${X} tag not supported (${t.value})`)}throw new Error("unsupported")}function H2(r,e){if(!(r instanceof Uint8Array))throw new Error(`${X} data to decode must be a Uint8Array`);e=Object.assign({},NA,e);let t=e.tokenizer||new w1(r,e),n=gs(t,e);if(n===ac)throw new Error(`${X} did not find any content to decode`);if(n===b1)throw new Error(`${X} got unexpected break`);return[n,r.subarray(t.pos())]}function xr(r,e){let[t,n]=H2(r,e);if(n.length>0)throw new Error(`${X} too many terminals, data makes no sense`);return t}var Xn="/",eg=new TextEncoder().encode(Xn),x1=eg[0],Le=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=O(e);else if(e instanceof Uint8Array)this._buf=e;else throw new Error("Invalid key, should be String of Uint8Array");if(t==null&&(t=!0),t&&this.clean(),this._buf.byteLength===0||this._buf[0]!==x1)throw new Error("Invalid key")}toString(e="utf8"){return F(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Xn))}static random(){return new r(Math.random().toString().substring(2))}static asKey(e){return e instanceof Uint8Array||typeof e=="string"?new r(e):typeof e.uint8Array=="function"?new r(e.uint8Array()):null}clean(){if((this._buf==null||this._buf.byteLength===0)&&(this._buf=eg),this._buf[0]!==x1){let e=new Uint8Array(this._buf.byteLength+1);e.fill(x1,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===x1;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let o=0;o<t.length;o++){if(n.length<o+1)return!1;let i=t[o],s=n[o];if(i<s)return!0;if(i>s)return!1}return t.length<n.length}reverse(){return r.withNamespaces(this.list().slice().reverse())}namespaces(){return this.list()}baseNamespace(){let e=this.namespaces();return e[e.length-1]}list(){return this.toString().split(Xn).slice(1)}type(){return MA(this.baseNamespace())}name(){return UA(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Xn)||(e+=Xn),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Xn):new r(e.slice(0,-1).join(Xn))}child(e){return this.toString()===Xn?e:e.toString()===Xn?this:new r(this.toString()+e.toString(),!1)}isAncestorOf(e){return e.toString()===this.toString()?!1:e.toString().startsWith(this.toString())}isDecendantOf(e){return e.toString()===this.toString()?!1:this.toString().startsWith(e.toString())}isTopLevel(){return this.list().length===1}concat(...e){return r.withNamespaces([...this.namespaces(),...FA(e.map(t=>t.namespaces()))])}};function MA(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function UA(r){let e=r.split(":");return e[e.length-1]}function FA(r){return[].concat(...r)}function E1({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*$A(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],i=Z.asCID(n);i!=null?yield[o.join("/"),i]:typeof n=="object"&&(yield*W2(n,o))}else{let t=Z.asCID(e);t!=null?yield[r.join("/"),t]:yield*W2(e,r)}}function*W2(r,e){if(r==null||r instanceof Uint8Array)return;let t=Z.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let i=[...e,n];yield*$A(i,o)}}function*KA(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&Z.asCID(n)==null&&(yield*z2(n,o))}else yield*z2(e,r)}function*z2(r,e){if(!(r==null||typeof r!="object"))for(let[t,n]of Object.entries(r)){let o=[...e,t];yield o.join("/"),n!=null&&!(n instanceof Uint8Array)&&typeof n=="object"&&Z.asCID(n)==null&&(yield*KA(o,n))}}function VA(r,e){let t=r;for(let[n,o]of e.entries()){if(t=t[o],t==null)throw new Error(`Object has no property at ${e.slice(0,n+1).map(s=>`[${JSON.stringify(s)}]`).join("")}`);let i=Z.asCID(t);if(i!=null)return{value:i,remaining:e.slice(n+1).join("/")}}return{value:t}}var G2=class{cid;bytes;value;asBlock;constructor({cid:e,bytes:t,value:n}){if(e==null||t==null||typeof n>"u")throw new Error("Missing required argument");this.cid=e,this.bytes=t,this.value=n,this.asBlock=this,Object.defineProperties(this,{cid:E1(),bytes:E1(),value:E1(),asBlock:E1()})}links(){return W2(this.value,[])}tree(){return z2(this.value,[])}get(e="/"){return VA(this.value,e.split("/").filter(Boolean))}};function tg({bytes:r,cid:e,value:t,codec:n}){let o=t!==void 0?t:n?.decode(r);if(o===void 0)throw new Error('Missing required argument, must either provide "value" or "codec"');return new G2({cid:e,bytes:r,value:o})}var og="/pin/",rg="/pinned-block/",Y2=pn,ng=1;function v1(r){return r.version===0&&(r=r.toV1()),new Le(`${og}${r.toString(Y2)}`)}var S1=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=v1(e);if(await this.datastore.has(n))throw new Error("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new Error("Depth must be greater than or equal to 0");let i=new fr({concurrency:ng});for await(let a of this.#e(e,i,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>te(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let s={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,Po(s),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=await this.getCodec(e.code),i=await this.blockstore.get(e,n),s=tg({bytes:i,cid:e,codec:o});yield e;for await(let[,a]of s.links())yield*await t.add(async()=>this.#e(a,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new Le(`${rg}${Y2.encode(e.multihash.bytes)}`),i={pinCount:0,pinnedBy:[]};try{i=xr(await this.datastore.get(o,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(i)){if(i.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,Po(i),n),n.onProgress?.(new H("helia:pin:add",e))}}async*rm(e,t={}){let n=v1(e),o=await this.datastore.get(n,t),i=xr(o);await this.datastore.delete(n,t);let s=new fr({concurrency:ng});for await(let a of this.#e(e,s,{...t,depth:i.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>te(l,e.bytes)),!0),{...t,depth:i.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:og+(e.cid!=null?`${e.cid.toString(pn)}`:"")},e)){let o=Z.parse(t.toString().substring(5),pn),i=xr(n);yield{cid:o,...i}}}async isPinned(e,t={}){let n=new Le(`${rg}${Y2.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=v1(e),o=await this.datastore.get(n,t);return xr(o)}async setMetadata(e,t,n){let o=v1(e),i=await this.datastore.get(o,n),s=xr(i);s.metadata=t??{},await this.datastore.put(o,Po(s),n)}};var Q2=1,X2=5;var cc=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Ro=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},lc=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},uc=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}};var HA=5,A1=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??HA}async start(){await bt(...this.routers)}async stop(){await Ct(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Ro("No content routers available");let n=new Ut({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let o of $t(n.toGenerator(),...ys(this.routers,"findProviders").map(i=>i.findProviders(e,t))))if(o!=null){if(o.multiaddrs.length===0){if(n.find(o.id)!=null)continue;n.add(async()=>{try{let i=await this.findPeer(o.id,t);return i.multiaddrs.length===0?null:i}catch(i){return this.log.error("could not load multiaddrs for peer %p",o.id,i),null}},{peerId:o.id,signal:t.signal}).catch(i=>{this.log.error("could not load multiaddrs for peer %p",o.id,i)})}yield o}}async provide(e,t={}){if(this.routers.length===0)throw new Ro("No content routers available");await Promise.all(ys(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async put(e,t,n){await Promise.all(ys(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(ys(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new Ro("No peer routers available");let n=this,o=$t(...ys(this.routers,"findPeer").map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i;throw new Me("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Ro("No peer routers available");for await(let n of $t(...ys(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function ys(r,e){return r.filter(t=>t[e]!=null)}var Do={},ws=r=>{r.addEventListener("message",e=>{ws.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{ws.dispatchEvent("message",r,e)})};ws.addEventListener=(r,e)=>{Do[r]==null&&(Do[r]=[]),Do[r].push(e)};ws.removeEventListener=(r,e)=>{Do[r]!=null&&(Do[r]=Do[r].filter(t=>t===e))};ws.dispatchEvent=function(r,e,t){Do[r]!=null&&Do[r].forEach(n=>n(e,t))};var j2=ws;var Z2="lock:worker:request-read",J2="lock:worker:release-read",ep="lock:master:grant-read",tp="lock:worker:request-write",rp="lock:worker:release-write",np="lock:master:grant-write";var ig=(r=21)=>Math.random().toString().substring(2);var sg=(r,e,t,n,o)=>(i,s)=>{if(s.data.type!==t)return;let a={type:s.data.type,name:s.data.name,identifier:s.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{i.postMessage({type:o,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=d=>{if(d==null||d.data==null)return;let u={type:d.data.type,name:d.data.name,identifier:d.data.identifier};u.type===n&&u.identifier===a.identifier&&(i.removeEventListener("message",l),c())};i.addEventListener("message",l)})}}}))},ag=(r,e,t,n)=>async()=>{let o=ig();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(i=>{let s=a=>{if(a==null||a.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===o&&(globalThis.removeEventListener("message",s),i(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",s)})},qA={singleProcess:!1},cg=r=>{if(r=Object.assign({},qA,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return j2.addEventListener("message",sg(t,"requestReadLock",Z2,J2,ep)),j2.addEventListener("message",sg(t,"requestWriteLock",tp,rp,np)),t}return{isWorker:!0,readLock:t=>ag(t,Z2,ep,J2),writeLock:t=>ag(t,tp,np,rp)}};var mi={},Lo;async function op(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>Zr((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var WA=(r,e)=>{if(Lo.isWorker===!0)return{readLock:Lo.readLock(r,e),writeLock:Lo.writeLock(r,e)};let t=new Pr({concurrency:1}),n;return{async readLock(){if(n!=null)return op(n,e);n=new Pr({concurrency:e.concurrency,autoStart:!1});let o=n,i=op(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),i},async writeLock(){return n=null,op(t,e)}}},zA={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function dc(r){let e=Object.assign({},zA,r);return Lo==null&&(Lo=cg(e),Lo.isWorker!==!0&&(Lo.addEventListener("requestReadLock",t=>{mi[t.data.name]!=null&&mi[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),Lo.addEventListener("requestWriteLock",async t=>{mi[t.data.name]!=null&&mi[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),mi[e.name]==null&&(mi[e.name]=WA(e.name,e)),mi[e.name]}var _1=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=dc({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await bt(this.child),this.started=!0}async stop(){await Ct(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){n?.signal?.throwIfAborted();let o=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{o()}}async*putMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new Error("CID was pinned");await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{let o=this;yield*this.child.deleteMany(async function*(){for await(let i of e){if(await o.pins.isPinned(i))throw new Error("CID was pinned");yield i}}(),t)}finally{n()}}async has(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){e?.signal?.throwIfAborted();let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}createSession(e,t){return t?.signal?.throwIfAborted(),this.child.createSession(e,t)}};var ip=new Le("/version"),lg=1;async function ug(r){if(!await r.has(ip)){await r.put(ip,O(`${lg}`));return}let e=await r.get(ip),t=F(e);if(parseInt(t,10)!==lg)throw new Error("Unknown datastore version, a datastore migration may be required")}var cp={};Xe(cp,{code:()=>ap,decode:()=>t_,decodeOptions:()=>ZA,encode:()=>e_,encodeOptions:()=>XA,name:()=>JA,toByteView:()=>fg});var dg=42;function fg(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function GA(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=Z.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new U(E.tag,dg),new U(E.bytes,t)]}function YA(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function QA(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var sp={float64:!0,typeEncoders:{Object:GA,undefined:YA,number:QA}},XA={...sp,typeEncoders:{...sp.typeEncoders}};function jA(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return Z.decode(r.subarray(1))}var I1={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};I1.tags[dg]=jA;var ZA={...I1,tags:I1.tags.slice()},JA="dag-cbor",ap=113,e_=r=>Po(r,sp),t_=r=>xr(fg(r),I1);var mp={};Xe(mp,{code:()=>pp,decode:()=>pg,encode:()=>hg,format:()=>f_,name:()=>d_,parse:()=>p_,stringify:()=>f_});var lp=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===E.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===E.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[E.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i);e.push(o)}[E.negint.major](e,t){this[E.uint.major](e,t)}[E.bytes.major](e,t){throw new Error(`${Yn} unsupported type: Uint8Array`)}[E.string.major](e,t){this.prefix(e);let n=c1(JSON.stringify(t.value));e.push(n.length>32?rc(n):n)}[E.array.major](e,t){this.prefix(e),this.inRecursive.push({type:E.array,elements:0}),e.push([91])}[E.map.major](e,t){this.prefix(e),this.inRecursive.push({type:E.map,elements:0}),e.push([123])}[E.tag.major](e,t){}[E.float.major](e,t){if(t.type.name==="break"){let s=this.inRecursive.pop();if(s){if(s.type===E.array)e.push([93]);else if(s.type===E.map)e.push([125]);else throw new Error("Unexpected recursive type; this should not happen!");return}throw new Error("Unexpected break; this should not happen!")}if(t.value===void 0)throw new Error(`${Yn} unsupported type: undefined`);if(this.prefix(e),t.type.name==="true"){e.push([116,114,117,101]);return}else if(t.type.name==="false"){e.push([102,97,108,115,101]);return}else if(t.type.name==="null"){e.push([110,117,108,108]);return}let n=String(t.value),o=[],i=!1;for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s),!i&&(o[s]===46||o[s]===101||o[s]===69)&&(i=!0);i||(o.push(46),o.push(48)),e.push(o)}};function r_(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${Yn} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==E.string||n.type!==E.string)throw new Error(`${Yn} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${Yn} unexpected duplicate map keys, this is not supported`)}var n_={addBreakTokens:!0,mapSorter:r_};function up(r,e){return e=Object.assign({},n_,e),V2(r,new lp,e)}var bs=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t,this.modeStack=["value"],this.lastToken=""}pos(){return this._pos}done(){return this._pos>=this.data.length}ch(){return this.data[this._pos]}currentMode(){return this.modeStack[this.modeStack.length-1]}skipWhitespace(){let e=this.ch();for(;e===32||e===9||e===13||e===10;)e=this.data[++this._pos]}expect(e){if(this.data.length-this._pos<e.length)throw new Error(`${X} unexpected end of input at position ${this._pos}`);for(let t=0;t<e.length;t++)if(this.data[this._pos++]!==e[t])throw new Error(`${X} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...e)}'`)}parseNumber(){let e=this._pos,t=!1,n=!1,o=a=>{for(;!this.done();){let c=this.ch();if(a.includes(c))this._pos++;else break}};if(this.ch()===45&&(t=!0,this._pos++),this.ch()===48)if(this._pos++,this.ch()===46)this._pos++,n=!0;else return new U(E.uint,0,this._pos-e);if(o([48,49,50,51,52,53,54,55,56,57]),t&&this._pos===e+1)throw new Error(`${X} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${X} unexpected token at position ${this._pos}`);n=!0,this._pos++,o([48,49,50,51,52,53,54,55,56,57])}!this.done()&&(this.ch()===101||this.ch()===69)&&(n=!0,this._pos++,!this.done()&&(this.ch()===43||this.ch()===45)&&this._pos++,o([48,49,50,51,52,53,54,55,56,57]));let i=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),s=parseFloat(i);return n?new U(E.float,s,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(s)?new U(s>=0?E.uint:E.negint,s,this._pos-e):new U(s>=0?E.uint:E.negint,BigInt(i),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${X} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let i=this._pos,s=0;i<this.data.length&&s<65536;i++,s++){let a=this.data[i];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,i));return this._pos=i+1,new U(E.string,c,s)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${X} unexpected end of unicode escape sequence at position ${this._pos}`);let i=0;for(let s=0;s<4;s++){let a=this.ch();if(a>=48&&a<=57)a-=48;else if(a>=97&&a<=102)a=a-97+10;else if(a>=65&&a<=70)a=a-65+10;else throw new Error(`${X} unexpected unicode escape character at position ${this._pos}`);i=i*16+a,this._pos++}return i},o=()=>{let i=this.ch(),s=null,a=i>239?4:i>223?3:i>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${X} unexpected unicode sequence at position ${this._pos}`);let c,l,d,u;switch(a){case 1:i<128&&(s=i);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(u=(i&31)<<6|c&63,u>127&&(s=u));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(u=(i&15)<<12|(c&63)<<6|l&63,u>2047&&(u<55296||u>57343)&&(s=u));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],d=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(d&192)===128&&(u=(i&15)<<18|(c&63)<<12|(l&63)<<6|d&63,u>65535&&u<1114112&&(s=u))}s===null?(s=65533,a=1):s>65535&&(s-=65536,t.push(s>>>10&1023|55296),s=56320|s&1023),t.push(s),this._pos+=a};for(;!this.done();){let i=this.ch(),s;switch(i){case 92:if(this._pos++,this.done())throw new Error(`${X} unexpected string termination at position ${this._pos}`);switch(s=this.ch(),this._pos++,s){case 34:case 39:case 92:case 47:t.push(s);break;case 98:t.push(8);break;case 116:t.push(9);break;case 110:t.push(10);break;case 102:t.push(12);break;case 114:t.push(13);break;case 117:t.push(n());break;default:throw new Error(`${X} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new U(E.string,O2(t),this._pos-e);default:if(i<32)throw new Error(`${X} invalid control character at position ${this._pos}`);i<128?(t.push(i),this._pos++):o()}}throw new Error(`${X} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new U(E.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new U(E.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new U(E.null,null,4);case 102:return this.expect([102,97,108,115,101]),new U(E.false,!1,5);case 116:return this.expect([116,114,117,101]),new U(E.true,!0,4);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.parseNumber();default:throw new Error(`${X} unexpected character at position ${this._pos}`)}}next(){switch(this.skipWhitespace(),this.currentMode()){case"value":return this.modeStack.pop(),this.parseValue();case"array-value":{if(this.modeStack.pop(),this.ch()===93)return this._pos++,this.skipWhitespace(),new U(E.break,void 0,1);if(this.ch()!==44)throw new Error(`${X} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue()}case"array-start":return this.modeStack.pop(),this.ch()===93?(this._pos++,this.skipWhitespace(),new U(E.break,void 0,1)):(this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue());case"obj-key":if(this.ch()===125)return this.modeStack.pop(),this._pos++,this.skipWhitespace(),new U(E.break,void 0,1);if(this.ch()!==44)throw new Error(`${X} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`);this._pos++,this.skipWhitespace();case"obj-start":{if(this.modeStack.pop(),this.ch()===125)return this._pos++,this.skipWhitespace(),new U(E.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${X} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("obj-value"),e}case"obj-value":return this.modeStack.pop(),this.modeStack.push("obj-key"),this.skipWhitespace(),this.parseValue();default:throw new Error(`${X} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function dp(r,e){return e=Object.assign({tokenizer:new bs(r,e)},e),xr(r,e)}function i_(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function s_(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=Z.asCID(r);if(!e)return null;let t=e.toString();return[new U(E.map,1/0,1),new U(E.string,"/",1),new U(E.string,t,t.length),new U(E.break,void 0,1)]}function T1(r){let e=it.encode(r).slice(1);return[new U(E.map,1/0,1),new U(E.string,"/",1),new U(E.map,1/0,1),new U(E.string,"bytes",5),new U(E.string,e,e.length),new U(E.break,void 0,1),new U(E.break,void 0,1)]}function tn(r){return T1(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function a_(r){return T1(new Uint8Array(r))}function c_(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function l_(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var u_={typeEncoders:{Object:s_,Buffer:T1,Uint8Array:T1,Int8Array:tn,Uint16Array:tn,Int16Array:tn,Uint32Array:tn,Int32Array:tn,Float32Array:tn,Float64Array:tn,Uint8ClampedArray:tn,BigInt64Array:tn,BigUint64Array:tn,DataView:tn,ArrayBuffer:a_,undefined:c_,number:l_}},fp=class extends bs{constructor(e,t){super(e,t),this.tokenBuffer=[]}done(){return this.tokenBuffer.length===0&&super.done()}_next(){return this.tokenBuffer.length>0?this.tokenBuffer.pop():super.next()}next(){let e=this._next();if(e.type===E.map){let t=this._next();if(t.type===E.string&&t.value==="/"){let n=this._next();if(n.type===E.string){if(this._next().type!==E.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new U(E.tag,42,0)}if(n.type===E.map){let o=this._next();if(o.type===E.string&&o.value==="bytes"){let i=this._next();if(i.type===E.string){for(let a=0;a<2;a++)if(this._next().type!==E.break)throw new Error("Invalid encoded Bytes form");let s=it.decode(`m${i.value}`);return new U(E.bytes,s,i.value.length)}this.tokenBuffer.push(i)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},hp={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};hp.tags[42]=Z.parse;var d_="dag-json",pp=297,hg=r=>up(r,u_),pg=r=>{let e=i_(r),t=Object.assign(hp,{tokenizer:new fp(e,hp)});return dp(e,t)},f_=r=>h_.decode(hg(r));var h_=new TextDecoder,p_=r=>pg(m_.encode(r)),m_=new TextEncoder;var Ep={};Xe(Ep,{code:()=>xp,createLink:()=>Ag,createNode:()=>Sg,decode:()=>k_,encode:()=>T_,name:()=>I_,prepare:()=>wp,validate:()=>bp});var g_=new TextDecoder;function gp(r,e){let t=0;for(let n=0;;n+=7){if(n>=64)throw new Error("protobuf: varint overflow");if(e>=r.length)throw new Error("protobuf: unexpected end of data");let o=r[e++];if(t+=n<28?(o&127)<<n:(o&127)*2**n,o<128)break}return[t,e]}function k1(r,e){let t;[t,e]=gp(r,e);let n=e+t;if(t<0||n<0)throw new Error("protobuf: invalid length");if(n>r.length)throw new Error("protobuf: unexpected end of data");return[r.subarray(e,n),n]}function mg(r,e){let t;return[t,e]=gp(r,e),[t&7,t>>3,e]}function y_(r){let e={},t=r.length,n=0;for(;n<t;){let o,i;if([o,i,n]=mg(r,n),i===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Hash`);if(e.Name!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Name before Hash");if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Hash");[e.Hash,n]=k1(r,n)}else if(i===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let s;[s,n]=k1(r,n),e.Name=g_.decode(s)}else if(i===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(o!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Tsize`);[e.Tsize,n]=gp(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${i}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function gg(r){let e=r.length,t=0,n,o=!1,i;for(;t<e;){let a,c;if([a,c,t]=mg(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(i)throw new Error("protobuf: (PBNode) duplicate Data section");[i,t]=k1(r,t),n&&(o=!0)}else if(c===2){if(o)throw new Error("protobuf: (PBNode) duplicate Links section");n||(n=[]);let l;[l,t]=k1(r,t),n.push(y_(l))}else throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${c}`)}if(t>e)throw new Error("protobuf: (PBNode) unexpected end of data");let s={};return i&&(s.Data=i),s.Links=n||[],s}var wg=new TextEncoder,yg=2**32,w_=2**31;function b_(r,e){let t=e.length;if(typeof r.Tsize=="number"){if(r.Tsize<0)throw new Error("Tsize cannot be negative");if(!Number.isSafeInteger(r.Tsize))throw new Error("Tsize too large for encoding");t=fc(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=wg.encode(r.Name);t-=n.length,e.set(n,t),t=fc(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=fc(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function bg(r){let e=E_(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=fc(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let i=b_(r.Links[o],t.subarray(0,n));n-=i,n=fc(t,n,i)-1,t[n]=18}return t}function x_(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+xs(t)}if(typeof r.Name=="string"){let t=wg.encode(r.Name).length;e+=1+t+xs(t)}return typeof r.Tsize=="number"&&(e+=1+xs(r.Tsize)),e}function E_(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+xs(t)}if(r.Links)for(let t of r.Links){let n=x_(t);e+=1+n+xs(n)}return e}function fc(r,e,t){e-=xs(t);let n=e;for(;t>=w_;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function xs(r){return r%2===0&&r++,Math.floor((v_(r)+6)/7)}function v_(r){let e=0;return r>=yg&&(r=Math.floor(r/yg),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+S_[r]}var S_=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8];var A_=["Data","Links"],__=["Hash","Name","Tsize"],yp=new TextEncoder;function Eg(r,e){if(r===e)return 0;let t=r.Name?yp.encode(r.Name):[],n=e.Name?yp.encode(e.Name):[],o=t.length,i=n.length;for(let s=0,a=Math.min(o,i);s<a;++s)if(t[s]!==n[s]){o=t[s],i=n[s];break}return o<i?-1:i<o?1:0}function xg(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function vg(r){if(typeof r.asCID=="object"){let t=Z.asCID(r);if(!t)throw new TypeError("Invalid DAG-PB form");return{Hash:t}}if(typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Hash){let t=Z.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=Z.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=Z.decode(r.Hash)))}catch(n){throw new TypeError(`Invalid DAG-PB form: ${n.message}`)}t&&(e.Hash=t)}if(!e.Hash)throw new TypeError("Invalid DAG-PB form");return typeof r.Name=="string"&&(e.Name=r.Name),typeof r.Tsize=="number"&&(e.Tsize=r.Tsize),e}function wp(r){if((r instanceof Uint8Array||typeof r=="string")&&(r={Data:r}),typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Data!==void 0)if(typeof r.Data=="string")e.Data=yp.encode(r.Data);else if(r.Data instanceof Uint8Array)e.Data=r.Data;else throw new TypeError("Invalid DAG-PB form");if(r.Links!==void 0)if(Array.isArray(r.Links))e.Links=r.Links.map(vg),e.Links.sort(Eg);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function bp(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!xg(r,A_))throw new TypeError("Invalid DAG-PB form (extraneous properties)");if(r.Data!==void 0&&!(r.Data instanceof Uint8Array))throw new TypeError("Invalid DAG-PB form (Data must be bytes)");if(!Array.isArray(r.Links))throw new TypeError("Invalid DAG-PB form (Links must be a list)");for(let e=0;e<r.Links.length;e++){let t=r.Links[e];if(!t||typeof t!="object"||Array.isArray(t)||t instanceof Uint8Array||t["/"]&&t["/"]===t.bytes)throw new TypeError("Invalid DAG-PB form (bad link)");if(!xg(t,__))throw new TypeError("Invalid DAG-PB form (extraneous properties on link)");if(t.Hash===void 0)throw new TypeError("Invalid DAG-PB form (link must have a Hash)");if(t.Hash==null||!t.Hash["/"]||t.Hash["/"]!==t.Hash.bytes)throw new TypeError("Invalid DAG-PB form (link Hash must be a CID)");if(t.Name!==void 0&&typeof t.Name!="string")throw new TypeError("Invalid DAG-PB form (link Name must be a string)");if(t.Tsize!==void 0){if(typeof t.Tsize!="number"||t.Tsize%1!==0)throw new TypeError("Invalid DAG-PB form (link Tsize must be an integer)");if(t.Tsize<0)throw new TypeError("Invalid DAG-PB form (link Tsize cannot be negative)")}if(e>0&&Eg(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function Sg(r,e=[]){return wp({Data:r,Links:e})}function Ag(r,e,t){return vg({Hash:t,Name:r,Tsize:e})}function _g(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var I_="dag-pb",xp=112;function T_(r){bp(r);let e={};return r.Links&&(e.Links=r.Links.map(t=>{let n={};return t.Hash&&(n.Hash=t.Hash.bytes),t.Name!==void 0&&(n.Name=t.Name),t.Tsize!==void 0&&(n.Tsize=t.Tsize),n})),r.Data&&(e.Data=r.Data),bg(e)}function k_(r){let e=_g(r),t=gg(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let i={};try{i.Hash=Z.decode(o.Hash)}catch{}if(!i.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(i.Name=o.Name),o.Tsize!==void 0&&(i.Tsize=o.Tsize),i})),n}function Es(r){return r?.then!=null}function Ig(r=[],e){let t={[xp]:Ep,[fa]:ha,[ap]:cp,[pp]:mp,[y0]:Pl};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Es(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new uc(`Could not load codec for ${n}`)}}function Tg(r=[],e){let t={[dt.code]:dt,[Dl.code]:Dl,[Jt.code]:Jt};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Es(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new lc(`No hasher configured for multihash code 0x${n.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`)}}var Lr=class r extends Error{static name="NotFoundError";static code="ERR_NOT_FOUND";name=r.name;code=r.code;constructor(e="Not Found"){super(e)}};var jn=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,block:o}of e)await this.put(n,o,t),yield n}get(e,t){return Promise.reject(new Error(".get is not implemented"))}async*getMany(e,t){for await(let n of e)yield{cid:n,block:await this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};var C1=0,P1=class extends jn{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===C1||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===C1)return e.multihash.digest;if(this.child==null)throw new Lr;return this.child.get(e)}has(e){return e.multihash.code===C1?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==C1&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function C_(r){return r[Symbol.asyncIterator]!=null}function P_(r,e){let t=0;if(C_(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=Vi(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){await s&&(yield o);for await(let c of n)await e(c,t++)&&(yield c)}();let a=e;return function*(){s===!0&&(yield o);for(let c of n)a(c,t++)&&(yield c)}()}var rn=P_;function R_(r){return r[Symbol.asyncIterator]!=null}function kg(r){return r?.then!=null}function D_(r,e){let t=0;if(R_(r))return async function*(){for await(let c of r){let l=e(c,t++);kg(l)&&await l,yield c}}();let n=Vi(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();if(typeof e(o,t++)?.then=="function")return async function*(){yield o;for await(let c of n){let l=e(c,t++);kg(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var gi=D_;var R1=class{child;getHasher;log;logger;components;constructor(e){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.components=e,this.child=new P1(e.blockstore),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new H("blocks:put:duplicate",e)),e):(n.onProgress?.(new H("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,t,n))),n.onProgress?.(new H("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=rn(e,async({cid:i})=>{let s=await this.child.has(i,t);return s&&t.onProgress?.(new H("blocks:put-many:duplicate",i)),!s}),o=gi(n,async({cid:i,block:s})=>{t.onProgress?.(new H("blocks:put-many:providers:notify",i)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(i,s,t)))});t.onProgress?.(new H("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async get(e,t={}){if(t.offline!==!0&&!await this.child.has(e,t)){let n=await this.getHasher(e.multihash.code);t.onProgress?.(new H("blocks:get:providers:get",e));let o=await Cg(e,this.components.blockBrokers,n,{...t,log:this.log});return t.onProgress?.(new H("blocks:get:blockstore:put",e)),await this.child.put(e,o,t),t.onProgress?.(new H("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async i=>i.announce?.(e,o,t))),o}return t.onProgress?.(new H("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new H("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(gi(e,async n=>{if(t.offline!==!0&&!await this.child.has(n,t)){let o=await this.getHasher(n.multihash.code);t.onProgress?.(new H("blocks:get-many:providers:get",n));let i=await Cg(n,this.components.blockBrokers,o,{...t,log:this.log});t.onProgress?.(new H("blocks:get-many:blockstore:put",n)),await this.child.put(n,i,t),t.onProgress?.(new H("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(n,i,t)))}}))}async delete(e,t={}){t.onProgress?.(new H("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new H("blocks:delete-many:blockstore:delete-many")),yield*this.child.deleteMany(async function*(){for await(let n of e)yield n}(),t)}async has(e,t={}){return this.child.has(e,t)}async*getAll(e={}){e.onProgress?.(new H("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}},D1=class extends R1{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await bt(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await Ct(this.child,...this.components.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){let n=this.components.blockBrokers.map(o=>o.createSession==null?o:o.createSession(t));return new vp({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}},vp=class extends R1{closeController;constructor(e,t){super(e),this.closeController=new AbortController,K(1/0,this.closeController.signal),this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async put(e,t,n={}){let o=he([this.closeController.signal,n.signal]);K(1/0,o);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=he([this.closeController.signal,t.signal]);K(1/0,n);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=he([this.closeController.signal,t.signal]);K(1/0,n);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=he([this.closeController.signal,t.signal]);K(1/0,n);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=he([this.closeController.signal,t.signal]);K(1/0,n);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=he([this.closeController.signal,t.signal]);K(1/0,n);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=he([this.closeController.signal,t.signal]);K(1/0,n);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=he([this.closeController.signal,e.signal]);K(1/0,t);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function L_(r){return typeof r.retrieve=="function"}var N_=(r,e)=>{if(e==null)throw new C(`No hasher configured for multihash code 0x${r.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`);return async t=>{let n,o=e.digest(t);if(Es(o)?n=await o:n=o,!te(n.digest,r.multihash.digest))throw new ao("Hash of downloaded block did not match multihash from passed CID")}};async function Cg(r,e,t,n){let o=N_(r,t),i=new AbortController,s=he([i.signal,n.signal]);K(1/0,i.signal,s);let a=[];for(let c of e)L_(c)&&a.push(c);try{return await Promise.any(a.map(async c=>{try{let l=!1,d=await c.retrieve(r,{...n,signal:s,validateFn:async u=>{await o(u),l=!0}});return l||await o(d),d}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{i.abort(),s.clear()}}var Sp=kt(Gu(),1);var B_=Math.LN2*Math.LN2,L1=class r{static create(e,t=.005){let n=O_(e,t);return new r(n)}seeds;bits;buffer;constructor(e={}){e.seeds!=null?this.seeds=e.seeds:this.seeds=M_(e.hashes??8),this.bits=e.bits??1024,this.buffer=re(Math.ceil(this.bits/8))}add(e){typeof e=="string"&&(e=O(e));for(let t=0;t<this.seeds.length;t++){let o=Sp.default.x86.hash32(e,this.seeds[t])%this.bits;this.setbit(o)}}has(e){typeof e=="string"&&(e=O(e));for(let t=0;t<this.seeds.length;t++){let o=Sp.default.x86.hash32(e,this.seeds[t])%this.bits;if(!this.getbit(o))return!1}return!0}clear(){this.buffer.fill(0)}setbit(e){let t=0,n=e;for(;n>7;)t++,n-=8;let o=this.buffer[t];o|=1<<n,this.buffer[t]=o}getbit(e){let t=0,n=e;for(;n>7;)t++,n-=8;return(this.buffer[t]&1<<n)!==0}};function O_(r,e=.005){let t=Math.round(-1*r*Math.log(e)/B_),n=Math.round(t/r*Math.LN2);return{bits:t,hashes:n}}function M_(r){let e,t,n=[];for(let o=0;o<r;o++)for(e=new ce(pt(4)),n[o]=e.getUint32(0,!0),t=0;t<o;t++)if(n[o]===n[t]){o--;break}return n}var yi=class extends Ee{intialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),K(1/0,this),this.name=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.name),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.providers=[],this.evictionFilter=L1.create(this.maxProviders)}async retrieve(e,t={}){let n=it.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o;let i=J();if(this.requests.set(n,i.promise),this.providers.length===0){let l=!1;this.intialPeerSearchComplete==null&&(l=!0,this.log=this.logger.forComponent(`${this.name}:${e}`),this.intialPeerSearchComplete=this.findProviders(e,this.minProviders,t)),await this.intialPeerSearchComplete,l&&this.log("found initial session peers for %c",e)}let s=!1,a=new fr({concurrency:this.maxProviders});a.addEventListener("error",()=>{}),a.addEventListener("failure",l=>{this.log.error("error querying provider %o, evicting from session",l.detail.job.options.provider,l.detail.error),this.evict(l.detail.job.options.provider)}),a.addEventListener("success",l=>{s=!0,i.resolve(l.detail.result)}),a.addEventListener("idle",()=>{s||t.signal?.aborted===!0||Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let l=0;l<this.minProviders&&this.providers.length!==0;l++){let d=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(d)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),i.resolve(await this.retrieve(e,t))}).catch(l=>{this.log.error("could not find new providers for %c",e,l),i.reject(l)})});let c=l=>{a.add(async()=>this.queryProvider(e,l.detail,t),{provider:l.detail}).catch(d=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,d)})};this.addEventListener("provider",c),Promise.all([...this.providers].map(async l=>a.add(async()=>this.queryProvider(e,l,t),{provider:l}))).catch(l=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,l)});try{return await i.promise}finally{this.removeEventListener("provider",c),a.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toEvictionKey(e));let t=this.providers.findIndex(n=>this.equals(n,e));t!==-1&&this.providers.splice(t,1)}isEvicted(e){return this.evictionFilter.has(this.toEvictionKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async findProviders(e,t,n){let o=J(),i=0;return Promise.resolve().then(async()=>{this.log("finding %d-%d new provider(s) for %c",t,this.maxProviders,e);for await(let s of this.findNewProviders(e,n)){if(i===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(s)&&(this.log("found %d/%d new providers",i,this.maxProviders),this.providers.push(s),this.safeDispatchEvent("provider",{detail:s}),i++,i===t&&(this.log("session is ready"),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",i);break}}if(this.log("found %d/%d new session peers",i,this.maxProviders),i<t)throw new cc(`Found ${i} of ${t} ${this.name} providers for ${e}`)}).catch(s=>{this.log.error("error searching routing for potential session peers for %c",e,s.errors??s),o.reject(s)}),o.promise}};var N1=class{blockstore;datastore;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??To(),this.log=this.logger.forComponent("helia"),this.getHasher=Tg(e.hashers,e.loadHasher),this.getCodec=Ig(e.codecs,e.loadCodec),this.dns=e.dns??s1(),this.metrics=e.metrics;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new A1(t,{routers:(e.routers??[]).flatMap(o=>{let i=[o];return o[ln]!=null&&i.push(o[ln]),o[un]!=null&&i.push(o[un]),i}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new D1(t);this.pins=new S1(e.datastore,n,this.getCodec),this.blockstore=new _1(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await ug(this.datastore),await bt(this.blockstore,this.datastore,this.routing)}async stop(){await Ct(this.blockstore,this.datastore,this.routing)}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await Yt(o.deleteMany(async function*(){for await(let{cid:i}of o.getAll())try{if(await n.pins.isPinned(i,e))continue;yield i,e.onProgress?.(new H("helia:gc:deleted",i))}catch(s){n.log.error("Error during gc",s),e.onProgress?.(new H("helia:gc:error",s))}}()))}finally{t()}this.log("gc finished")}};var Ap=class extends yi{wantList;network;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t,n);if(this.log("%p %s %c",t,o.has?"has":"does not have",e),o.has&&o.block!=null)return o.block;throw new Error("Provider did not have block")}async*findNewProviders(e,t={}){for await(let n of this.network.findProviders(e,t))yield n.id}toEvictionKey(e){return e.toMultihash().bytes}equals(e,t){return e.equals(t)}};function Pg(r,e){return new Ap(r,e)}var B1=class{blocksReceived;duplicateBlocksReceived;dataReceived;duplicateDataReceived;constructor(e){this.blocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_received_blocks"),this.duplicateBlocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_received_blocks"),this.dataReceived=e.metrics?.registerMetricGroup("helia_bitswap_data_received_bytes"),this.duplicateDataReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_data_received_bytes")}updateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.blocksReceived?.increment(n)}updateDuplicateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateBlocksReceived?.increment(n)}updateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.dataReceived?.increment(n)}updateDuplicateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateDataReceived?.increment(n)}};var _p=class extends Map{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function O1(r){let{name:e,metrics:t}=r,n;return t!=null?n=new _p({name:e,metrics:t}):n=new Map,n}function U_(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=Ft(r);e.push(t),r=r.slice(pe(t))}return e}var Rg=U_;var M1=class extends Ee{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),K(1/0,this),this.peers=Ja({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=O1({name:"helia_bitswap_wantlist",metrics:e.metrics}),this.network=e.network,this.sendMessagesDelay=t.sendMessagesDelay??10,this.log=e.logger.forComponent("helia:bitswap:wantlist"),this.hashLoader=t.hashLoader,this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:connected",n=>{this.peerConnected(n.detail).catch(o=>{this.log.error("error processing newly connected bitswap peer %p",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=F(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??et.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===et.WantHave&&t.wantType===et.WantBlock&&(o.wantType=et.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===et.WantBlock?(await dr(this,"block",t?.signal,{filter:a=>te(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await dr(this,"presence",t?.signal,{filter:s=>te(e.multihash.digest,s.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail}finally{t.signal?.aborted===!0&&(this.log("want for %c was aborted, cancelling want",e),o.cancel=!0,await this.sendMessagesDebounced())}}async sendMessagesDebounced(){await this.sendingMessages?.promise,clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(e=>{this.log("error sending messages to peers",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=J(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new Gn;for(let[i,s]of this.wants.entries())t.has(i)||s.cancel||(n.add(i),o.addWantlistEntry(s.cid,{cid:s.cid.bytes,priority:s.priority,wantType:s.wantType,cancel:s.cancel,sendDontHave:s.sendDontHave}));if(o.wantlist.size!==0)try{await this.network.sendMessage(e,o);for(let i of n)t.add(i)}catch(i){this.log.error("error sending full wantlist to new peer",i)}})).catch(e=>{this.log.error("error sending messages",e)});for(let[e,t]of this.wants)if(t.cancel){this.wants.delete(e);for(let n of this.peers.values())n.delete(e)}this.sendingMessages.resolve()}has(e){let t=F(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new Gn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:et.WantHave,priority:1}),await this.network.sendMessage(t,o),(await dr(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&te(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:et.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new Gn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:et.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await dr(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&te(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=F(e.multihash.bytes,"base64"),o=this.wants.get(n);o!=null&&(o.cancel=!0,await this.sendMessagesDebounced())}async receiveMessage(e,t){this.log("received message from %p with %d blocks",e,t.blocks.length);let n=!1;for(let o of t.blocks){if(o.prefix==null||o.data==null)continue;let i=Rg(o.prefix),s=i[0],a=i[1],c=i[2],l=c===dt.code?dt:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let d=l.digest(o.data);d.then!=null&&(d=await d);let u=Z.create(s===0?0:1,a,d);this.log("received block from %p for %c",e,u),this.safeDispatchEvent("block",{detail:{sender:e,cid:u,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:u,has:!0,block:o.data}});let f=F(u.multihash.bytes,"base64"),h=this.wants.get(f);h!=null&&(h.cancel=!0,n=!0)}for(let{cid:o,type:i}of t.blockPresences){let s=Z.decode(o);this.log("received %s from %p for %c",i,e,s),this.safeDispatchEvent("presence",{detail:{sender:e,cid:s,has:i===Ar.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new Gn(!0);for(let[o,i]of this.wants.entries())i.cancel||(t.add(o),n.addWantlistEntry(i.cid,{cid:i.cid.bytes,priority:1,wantType:et.WantBlock,cancel:!1,sendDontHave:!1}));if(n.wantlist.size===0){this.peers.set(e,t);return}try{await this.network.sendMessage(e,n),this.peers.set(e,t)}catch(o){this.log.error("error sending full wantlist to new peer %p",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var U1=class{log;logger;stats;network;blockstore;peerWantLists;wantList;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.stats=new B1(e),this.network=new Fl(e,t),this.peerWantLists=new Zu({...e,network:this.network},t),this.wantList=new M1({...e,network:this.network},t)}createSession(e={}){return Pg({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,o=he([n.signal,t.signal]);K(1/0,n.signal,o),this.network.findAndConnect(e,{...t,signal:o}).catch(i=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c",e,i)});try{return(await this.wantList.wantBlock(e,{...t,signal:o})).block}finally{n.abort(),o.clear()}}async notify(e,t,n={}){await Promise.all([this.peerWantLists.receivedBlock(e,n),this.wantList.receivedBlock(e,n)])}getWantlist(){return[...this.wantList.wants.values()].filter(e=>!e.cancel).map(e=>({cid:e.cid,priority:e.priority,wantType:e.wantType}))}getPeerWantlist(e){return this.peerWantLists.wantListForPeer(e)}async start(){this.wantList.start(),await this.network.start()}async stop(){this.wantList.stop(),await this.network.stop()}};var Dg=(r,e={})=>new U1(r,e);var Ip=class{bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=Dg(e,{hashLoader:{getHasher:async o=>n(o)},...t}),this.started=!1}isStarted(){return this.started}async start(){await this.bitswap.start(),this.started=!0}async stop(){await this.bitswap.stop(),this.started=!1}async announce(e,t,n){await this.bitswap.notify(e,t,n)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{announce:async(n,o,i)=>{await this.bitswap.notify(n,o,i)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function Tp(r={}){return e=>new Ip(e,r)}var F1=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let i=0,s=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let d=this.readAtomically(()=>{let u=this.readChar();if(u===void 0)return;let f=Number.parseInt(u,e);if(!Number.isNaN(f))return f});if(d===void 0)break;if(i*=e,i+=d,i>l||(s+=1,t!==void 0&&s>t))return}if(s!==0)return!n&&c&&s>1?void 0:i})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let s=this.readSeparator(":",n,()=>this.readIPv4Addr());if(s!==void 0)return t[o]=s[0],t[o+1]=s[1],t[o+2]=s[2],t[o+3]=s[3],[o+4,!0]}let i=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(i===void 0)return[o,!1];t[o]=i>>8,t[o+1]=i&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let i=new Uint8Array(14),s=16-(n+2),[a]=e(i.subarray(0,s));return t.set(i.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var Lg=45,F_=15,vs=new F1;function kp(r){if(!(r.length>F_))return vs.new(r).parseWith(()=>vs.readIPv4Addr())}function Cp(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>Lg))return vs.new(r).parseWith(()=>vs.readIPv6Addr())}function $1(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>Lg))return vs.new(r).parseWith(()=>vs.readIPAddr())}function Ss(r){return!!kp(r)}function As(r){return!!Cp(r)}function K1(r){return!!$1(r)}var Bg=kt(Ng(),1),$_=["0.0.0.0/8","10.0.0.0/8","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","172.16.0.0/12","192.0.0.0/24","192.0.0.0/29","192.0.0.8/32","192.0.0.9/32","192.0.0.10/32","192.0.0.170/32","192.0.0.171/32","192.0.2.0/24","192.31.196.0/24","192.52.193.0/24","192.88.99.0/24","192.168.0.0/16","192.175.48.0/24","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","240.0.0.0/4","255.255.255.255/32"],K_=$_.map(r=>new Bg.Netmask(r));function Pp(r){for(let e of K_)if(e.contains(r))return!0;return!1}function V_(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function H_(r){let e=r.split(":");if(e.length<2)return!1;let t=e[e.length-1].padStart(4,"0"),n=e[e.length-2].padStart(4,"0"),o=`${parseInt(n.substring(0,2),16)}.${parseInt(n.substring(2),16)}.${parseInt(t.substring(0,2),16)}.${parseInt(t.substring(2),16)}`;return Pp(o)}function q_(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function W_(r){let e=r.split(":"),t=e[e.length-1];return Pp(t)}function z_(r){return/^::$/.test(r)||/^::1$/.test(r)||/^64:ff9b::([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^100::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:2[0-9a-fA-F]:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:db8:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2002:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^f[c-d]([0-9a-fA-F]{2,2}):/i.test(r)||/^fe[8-9a-bA-B][0-9a-fA-F]:/i.test(r)||/^ff([0-9a-fA-F]{2,2}):/i.test(r)}function Ot(r){return Ss(r)?Pp(r):V_(r)?H_(r):q_(r)?W_(r):As(r)?z_(r):void 0}var G_=r=>r.toString().split("/").slice(1),_s=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),ye=r=>({match:e=>_s(t=>t===r).match(e),pattern:r}),pc=()=>({match:r=>_s(e=>typeof e=="string").match(r),pattern:"{string}"}),mc=()=>({match:r=>_s(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),Ne=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{Se.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),gc=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{h0.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),Pe=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Ht=(...r)=>({match:e=>{let t;for(let n of r){let o=n.match(e);o!==!1&&(t==null||o.length<t.length)&&(t=o)}return t??!1},pattern:`or(${r.map(e=>e.pattern).join(", ")})`}),ve=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e},pattern:`and(${r.map(e=>e.pattern).join(", ")})`});function We(...r){function e(o){let i=G_(o);for(let s of r){let a=s.match(i);if(a===!1)return!1;i=a}return i}function t(o){return e(o)!==!1}function n(o){let i=e(o);return i===!1?!1:i.length===0}return{matchers:r,matches:t,exactMatch:n}}var H1=ve(ye("dns4"),pc()),q1=ve(ye("dns6"),pc()),W1=ve(ye("dnsaddr"),pc()),Dp=ve(ye("dns"),pc()),cH=We(H1,Pe(Ne())),lH=We(q1,Pe(Ne())),uH=We(W1,Pe(Ne())),z1=We(Ht(Dp,W1,H1,q1),Pe(Ne())),Og=ve(ye("ip4"),_s(Ss)),Mg=ve(ye("ip6"),_s(As)),Lp=Ht(Og,Mg),Zn=Ht(Lp,Dp,H1,q1,W1),Ug=We(Ht(Lp,ve(Ht(Dp,W1,H1,q1),Pe(Ne())))),dH=We(Og),fH=We(Mg),Fg=We(Lp),Np=ve(Zn,ye("tcp"),mc()),yc=ve(Zn,ye("udp"),mc()),Bp=We(ve(Np,Pe(Ne()))),hH=We(yc),Op=ve(yc,ye("quic")),G1=ve(yc,ye("quic-v1")),Y_=Ht(Op,G1),pH=We(Op),mH=We(G1),Rp=Ht(Zn,Np,yc,Op,G1),$g=Ht(ve(Rp,ye("ws"),Pe(Ne()))),Mp=We($g),Kg=Ht(ve(Rp,ye("wss"),Pe(Ne())),ve(Rp,ye("tls"),ye("ws"),Pe(Ne()))),Up=We(Kg),Vg=ve(yc,ye("webrtc-direct"),Pe(gc()),Pe(gc()),Pe(Ne())),wc=We(Vg),Hg=ve(G1,ye("webtransport"),Pe(gc()),Pe(gc()),Pe(Ne())),wi=We(Hg),V1=Ht($g,Kg,ve(Np,Pe(Ne())),ve(Y_,Pe(Ne())),ve(Zn,Pe(Ne())),Vg,Hg,Ne()),qg=We(V1),Q_=ve(V1,ye("p2p-circuit"),Ne()),Nr=We(Q_),X_=Ht(ve(V1,ye("p2p-circuit"),ye("webrtc"),Pe(Ne())),ve(V1,ye("webrtc"),Pe(Ne())),ye("webrtc")),bc=We(X_),j_=Ht(ve(Zn,ye("tcp"),mc(),ye("http"),Pe(Ne())),ve(Zn,ye("http"),Pe(Ne()))),Wg=We(j_),Z_=Ht(ve(Zn,ye("tcp"),Ht(ve(ye("443"),ye("http")),ve(mc(),ye("https"))),Pe(Ne())),ve(Zn,ye("tls"),ye("http"),Pe(Ne())),ve(Zn,ye("https"),Pe(Ne()))),zg=We(Z_);var SH=parseInt("0xFFFF",16),AH=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);var Qg=Ss,nI=As,Fp=function(r){let e=0;if(r=r.toString().trim(),Qg(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(nI(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let i=Qg(t[n]),s;i&&(s=Fp(t[n]),t[n]=F(s.slice(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,F(s.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let i=[n,1];for(n=9-t.length;n>0;n--)i.push("0");t.splice.apply(t,i)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let i=parseInt(t[n],16);o[e++]=i>>8&255,o[e++]=i&255}return o}throw new Error("invalid ip address")},Xg=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let i=0;i<t;i++)o.push(r[e+i]);return o.join(".")}if(t===16){let o=[];for(let i=0;i<t;i+=2)o.push(n.getUint16(e+i).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var Is={},$p={},iI=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[481,-1,"http-path"],[777,-1,"memory"]];iI.forEach(r=>{let e=sI(...r);$p[e.code]=e,Is[e.name]=e});function sI(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function ee(r){if(typeof r=="number"){if($p[r]!=null)return $p[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(Is[r]!=null)return Is[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var iq=ee("ip4"),sq=ee("ip6"),aq=ee("ipcidr");function qp(r,e){switch(ee(r).code){case 4:case 41:return cI(e);case 42:return Hp(e);case 6:case 273:case 33:case 132:return Jg(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return Hp(e);case 421:return fI(e);case 444:return Zg(e);case 445:return Zg(e);case 466:return dI(e);case 481:return globalThis.encodeURIComponent(Hp(e));default:return F(e,"base16")}}function Wp(r,e){switch(ee(r).code){case 4:return jg(e);case 41:return jg(e);case 42:return Vp(e);case 6:case 273:case 33:case 132:return zp(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return Vp(e);case 421:return lI(e);case 444:return hI(e);case 445:return pI(e);case 466:return uI(e);case 481:return Vp(globalThis.decodeURIComponent(e));default:return O(e,"base16")}}var Kp=Object.values(Dn).map(r=>r.decoder),aI=function(){let r=Kp[0].or(Kp[1]);return Kp.slice(2).forEach(e=>r=r.or(e)),r}();function jg(r){if(!K1(r))throw new Error("invalid ip address");return Fp(r)}function cI(r){let e=Xg(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!K1(e))throw new Error("invalid ip address");return e}function zp(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function Jg(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function Vp(r){let e=O(r),t=Uint8Array.from(Ve(e.length));return Re([t,e],t.length+e.length)}function Hp(r){let e=Ft(r);if(r=r.slice(pe(e)),r.length!==e)throw new Error("inconsistent lengths");return F(r)}function lI(r){let e;r[0]==="Q"||r[0]==="1"?e=Ce(Se.decode(`z${r}`)).bytes:e=Z.parse(r).multihash.bytes;let t=Uint8Array.from(Ve(e.length));return Re([t,e],t.length+e.length)}function uI(r){let e=aI.decode(r),t=Uint8Array.from(Ve(e.length));return Re([t,e],t.length+e.length)}function dI(r){let e=Ft(r),t=r.slice(pe(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+F(t,"base64url")}function fI(r){let e=Ft(r),t=r.slice(pe(e));if(t.length!==e)throw new Error("inconsistent lengths");return F(t,"base58btc")}function hI(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let t=ut.decode("b"+e[0]),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=zp(n);return Re([t,o],t.length+o.length)}function pI(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let t=ut.decode(`b${e[0]}`),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=zp(n);return Re([t,o],t.length+o.length)}function Zg(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=F(e,"base32"),o=Jg(t);return`${n}:${o}`}function e7(r){r=Gp(r);let e=[],t=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let i=0;i<o.length;i++){let s=o[i],a=ee(s);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(i++,i>=o.length)throw r7("invalid address: "+r);if(a.path===!0){n=Gp(o.slice(i).join("/")),e.push([a.code,Wp(a.code,n)]),t.push([a.code,n]);break}let c=Wp(a.code,o[i]);e.push([a.code,c]),t.push([a.code,qp(a.code,c)])}return{string:t7(t),bytes:Qp(e),tuples:e,stringTuples:t,path:n}}function Yp(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let i=Ft(r,o),s=pe(i),a=ee(i),c=mI(a,r.slice(o+s));if(c===0){e.push([i]),t.push([i]),o+=s;continue}let l=r.slice(o+s,o+s+c);if(o+=c+s,o>r.length)throw r7("Invalid address Uint8Array: "+F(r,"base16"));e.push([i,l]);let d=qp(i,l);if(t.push([i,d]),a.path===!0){n=d;break}}return{bytes:Uint8Array.from(r),string:t7(t),tuples:e,stringTuples:t,path:n}}function t7(r){let e=[];return r.map(t=>{let n=ee(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),Gp(e.join("/"))}function Qp(r){return Re(r.map(e=>{let t=ee(e[0]),n=Uint8Array.from(Ve(t.code));return e.length>1&&e[1]!=null&&(n=Re([n,e[1]])),n}))}function mI(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=Ft(e instanceof Uint8Array?e:Uint8Array.from(e));return t+pe(t)}}function Gp(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}function r7(r){return new Error("Error parsing address: "+r)}var gI=Symbol.for("nodejs.util.inspect.custom"),jp=Symbol.for("@multiformats/js-multiaddr/multiaddr"),yI=[ee("dns").code,ee("dns4").code,ee("dns6").code,ee("dnsaddr").code],Xp=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},Y1=class r{bytes;#e;#t;#r;#o;[jp]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=Yp(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=e7(e)}else if(No(e))t=Yp(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#t=t.tuples,this.#r=t.stringTuples,this.#o=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,i="",s=ee("tcp"),a=ee("udp"),c=ee("ip4"),l=ee("ip6"),d=ee("dns6"),u=ee("ip6zone");for(let[h,p]of this.stringTuples())h===u.code&&(i=`%${p??""}`),yI.includes(h)&&(t=s.name,o=443,n=`${p??""}${i}`,e=h===d.code?6:4),(h===s.code||h===a.code)&&(t=ee(h).name,o=parseInt(p??"")),(h===c.code||h===l.code)&&(t=ee(h).name,n=`${p??""}${i}`,e=h===l.code?6:4);if(e==null||t==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},ee(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>ee(e).name)}tuples(){return this.#t}stringTuples(){return this.#r}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(Qp(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===Is.p2p.code&&e.push([n,o]),n===Is["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?F(Se.decode(`z${n}`),"base58btc"):F(Z.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#o}equals(e){return te(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(i=>i.resolvable);if(t==null)return[this];let n=Ts.get(t.name);if(n==null)throw new Xp(`no available resolver for ${t.name}`);return(await n(this,e)).map(i=>Y(i))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[gI](){return`Multiaddr(${this.#e})`}};var Ts=new Map;function No(r){return!!r?.[jp]}function Y(r){return new Y1(r)}var wI=[ee("tcp").code,ee("dns").code,ee("dnsaddr").code,ee("dns4").code,ee("dns6").code];function n7(r){let e;try{e=ee("sni").code}catch{return null}for(let[t,n]of r)if(t===e&&n!==void 0)return n;return null}function o7(r){return r.some(([e,t])=>e===ee("tls").code)}function ir(r,e,t){let n=i7[ee(r).name];if(n===void 0)throw new Error(`Can't interpret protocol ${ee(r).name}`);let o=n(e,t);return r===ee("ip6").code?`[${o}]`:o}var i7={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`tcp://${ir(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`udp://${ir(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${ir(t[0],t[1]??"",e)}/ipfs/${r}`},p2p:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${ir(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=o7(e),n=n7(e);if(t&&n!==null)return`https://${n}`;let o=t?"https://":"http://",i=e.pop();if(i===void 0)throw new Error("Unexpected end of multiaddr");let s=ir(i[0],i[1]??"",e);return s=s.replace("tcp://",""),`${o}${s}`},"http-path":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=ir(t[0],t[1]??"",e),o=decodeURIComponent(r);return`${n}/${o}`},tls:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return ir(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return ir(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=ir(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=o7(e),n=n7(e);if(t&&n!==null)return`wss://${n}`;let o=t?"wss://":"ws://",i=e.pop();if(i===void 0)throw new Error("Unexpected end of multiaddr");let s=ir(i[0],i[1]??"",e);return s=s.replace("tcp://",""),`${o}${s}`},wss:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=ir(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`},"p2p-websocket-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${ir(t[0],t[1]??"",e)}/p2p-websocket-star`},"p2p-webrtc-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${ir(t[0],t[1]??"",e)}/p2p-webrtc-star`},"p2p-webrtc-direct":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${ir(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function Q1(r,e){let n=Y(r).stringTuples(),o=n.pop();if(o===void 0)throw new Error("Unexpected end of multiaddr");let i=ee(o[0]),s=i7[i.name];if(s==null)throw new Error(`No interpreter found for ${i.name}`);let a=s(o[1]??"",n);return e?.assumeHttp!==!1&&wI.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var X1=class{url;#e=0;#t=0;#r=0;#o=0;#a=new Map;log;constructor(e,t){this.url=e instanceof URL?e:new URL(e),this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}#l(e){let t=e.multihash.bytes;return it.encode(t)}async getRawBlock(e,t){let n=new URL(this.url.toString());if(n.pathname=`/ipfs/${e.toString()}`,n.search="?format=raw",t?.aborted===!0)throw new Error(`Signal to fetch raw block for CID ${e} from gateway ${this.url} was aborted prior to fetch`);let o=this.#l(e),i=new AbortController,s=()=>{i.abort()};t?.addEventListener("abort",s);try{let a=this.#a.get(o);return a==null&&(this.#e++,a=fetch(n.toString(),{signal:i.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"}).then(async c=>{if(this.log("GET %s %d",n,c.status),!c.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#o++,new Uint8Array(await c.arrayBuffer())}),this.#a.set(o,a)),await a}catch{throw t?.aborted===!0?new Error(`fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#t++,new Error(`unable to fetch raw block for CID ${e}`))}finally{t?.removeEventListener("abort",s),this.#a.delete(o)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#o/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#o,pendingResponses:this.#a.size}}};function bI(r,e,t){return r.filter(n=>{if(zg.matches(n)||e&&Wg.matches(n))return t||z1.matches(n)?!0:Ot(n.toOptions().host)===!1;if(!e&&t){let{host:o}=n.toOptions();if(o==="127.0.0.1"||o==="localhost"||o.endsWith(".localhost"))return!0}return!1})}async function*j1(r,e,t,n,o,i){for await(let s of e.findProviders(r,i)){let a=bI(s.multiaddrs,n,o);if(a.length===0)continue;let c=Q1(a[0]);yield new X1(c,t)}}var Zp=class extends yi{routing;allowInsecure;allowLocal;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??Z1,this.allowLocal=t.allowLocal??J1}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let o=await t.getRawBlock(e,n.signal);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*j1(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,t)}toEvictionKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}};function s7(r,e){return new Zp(r,e)}var ed=class{allowInsecure;allowLocal;routing;log;logger;constructor(e,t={}){this.log=e.logger.forComponent("helia:trustless-gateway-block-broker"),this.logger=e.logger,this.routing=e.routing,this.allowInsecure=t.allowInsecure??Z1,this.allowLocal=t.allowLocal??J1}async retrieve(e,t={}){let n=[];for await(let o of j1(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,t)){this.log("getting block for %c from %s",e,o.url);try{let i=await o.getRawBlock(e,t.signal);this.log.trace("got block for %c from %s",e,o.url);try{await t.validateFn?.(i)}catch(s){this.log.error("failed to validate block for %c from %s",e,o.url,s);continue}return i}catch(i){if(this.log.error("failed to get block for %c from %s",e,o.url,i),i instanceof Error?n.push(i):n.push(new Error(`Unable to fetch raw block for CID ${e} from gateway ${o.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,o.url);break}}}throw n.length>0?new AggregateError(n,`Unable to fetch raw block for CID ${e} from any gateway`):new Error(`Unable to fetch raw block for CID ${e} from any gateway`)}createSession(e={}){return s7({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure})}};var Z1=!1,J1=!1;function Jp(r={}){return e=>new ed(e,r)}async function*td(r,e={}){let t=r.getReader();try{for(;;){let n=await t.read();if(n.done)return;yield n.value}}finally{e.preventCancel!==!0&&await t.cancel(),t.releaseLock()}}var _I=kt(rd(),1);var nn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},nd=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},ks=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},od=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},id=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},sd=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},xc=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var sr;(function(r){let e;(function(o){o.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(o){o[o.EOL=0]="EOL"})(t||(t={})),function(o){o.codec=()=>He(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=ie((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.value!=null&&(i.uint32(10),i.bytes(o.value)),o.signatureV1!=null&&(i.uint32(18),i.bytes(o.signatureV1)),o.validityType!=null&&(i.uint32(24),r.ValidityType.codec().encode(o.validityType,i)),o.validity!=null&&(i.uint32(34),i.bytes(o.validity)),o.sequence!=null&&(i.uint32(40),i.uint64(o.sequence)),o.ttl!=null&&(i.uint32(48),i.uint64(o.ttl)),o.pubKey!=null&&(i.uint32(58),i.bytes(o.pubKey)),o.signatureV2!=null&&(i.uint32(66),i.bytes(o.signatureV2)),o.data!=null&&(i.uint32(74),i.bytes(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.value=o.bytes();break}case 2:{a.signatureV1=o.bytes();break}case 3:{a.validityType=r.ValidityType.codec().decode(o);break}case 4:{a.validity=o.bytes();break}case 5:{a.sequence=o.uint64();break}case 6:{a.ttl=o.uint64();break}case 7:{a.pubKey=o.bytes();break}case 8:{a.signatureV2=o.bytes();break}case 9:{a.data=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>oe(o,r.codec()),r.decode=(o,i)=>ne(o,r.codec(),i)})(sr||(sr={}));var xI=pr("ipns:utils"),a7=O("/ipns/");var EI=0,vI=18;function c7(r){let e;if(r.pubKey!=null)try{e=rt(r.pubKey)}catch(t){throw xI.error(t),t}if(e!=null)return e}function l7(r){let e=O("ipns-signature:");return Re([e,r])}function Ec(r){return"signatureV1"in r?sr.encode({value:O(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:O(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):sr.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function Sn(r){let e=sr.decode(r);if(e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),e.signatureV2==null||e.data==null)throw new nn("Missing data or signatureV2");let t=u7(e.data),n=SI(t.Value),o=F(t.Validity);if(e.value!=null&&e.signatureV1!=null)return AI(e),{value:n,validityType:sr.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV1:e.signatureV1,signatureV2:e.signatureV2,data:e.data};if(e.signatureV2!=null)return{value:n,validityType:sr.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV2:e.signatureV2,data:e.data};throw new Error("invalid record: does not include signatureV1 or signatureV2")}function vc(r){return Re([a7,r.bytes])}function Cs(r){let e=Ce(r.slice(a7.length));if(!ad(e,EI)&&!ad(e,vI))throw new ao("Multihash in IPNS key was not identity or sha2-256");return e}function u7(r){let e=xr(r);if(e.ValidityType===0)e.ValidityType=sr.ValidityType.EOL;else throw new ks("The validity type is unsupported");return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e}function SI(r){let e=F(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${Z.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${Z.parse(e).toV1().toString()}`}catch{}throw new id("Value must be a valid content path starting with /")}function AI(r){if(r.data==null)throw new sd("Record data is missing");let e=u7(r.data);if(!te(e.Value,r.value??new Uint8Array(0)))throw new nn('Field "value" did not match between protobuf and CBOR');if(!te(e.Validity,r.validity??new Uint8Array(0)))throw new nn('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new nn('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new nn('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new nn('Field "ttl" did not match between protobuf and CBOR')}function ad(r,e){return r.code===e}var xW=pr("ipns"),EW=60*60*1e9,II="/ipns/",vW=II.length;var d7=kt(rd(),1);var cd=pr("ipns:validator"),TI=1024*10,kI=async(r,e)=>{let t=Sn(e),n;try{let o=l7(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw cd.error("record signature verification failed"),new nn("Record signature verification failed");if(t.validityType===sr.ValidityType.EOL){if(d7.default.fromString(t.validity).toDate().getTime()<Date.now())throw cd.error("record has expired"),new nd("record has expired")}else if(t.validityType!=null)throw cd.error("the validity type is unsupported"),new ks("The validity type is unsupported");cd("ipns record for %s is valid",t.value)};async function ld(r,e){if(e.byteLength>TI)throw new od("The record is too large");let t=Cs(r),n;ad(t,0)&&(n=Hu(t));let o=Sn(e),i=c7(o)??n;if(i==null)throw new xc("Could not extract public key from IPNS record or routing key");let s=vc(i.toMultihash());if(!te(r,s))throw new xc("Embedded public key did not match routing key");await kI(i,e)}async function*Sc(r){let e=/\r?\n/,t=new TextDecoder("utf8"),n="";for await(let o of r){typeof o=="string"&&(o=new TextEncoder().encode(o)),n+=t.decode(o,{stream:!0});let i=n.split(e);n=i.pop()??"";for(let s=0;s<i.length;s++)yield JSON.parse(i[s])}n+=t.decode(),n!==""&&(yield JSON.parse(n))}var Ps=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},bi=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function CI(r){return r[Symbol.asyncIterator]!=null}function PI(r){if(CI(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var Ac=PI;var f7=O("/ipns/");function h7(r){return te(r.subarray(0,f7.byteLength),f7)}var ud=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*jt(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async put(e,t,n){if(!h7(e))return;let o=Cs(e),i=Z.createV1(114,o),s=Sn(t);await this.client.putIPNS(i,s,n)}async get(e,t){if(!h7(e))throw new Me("Not found");let n=Cs(e),o=Z.createV1(114,n);try{let i=await this.client.getIPNS(o,t);return Ec(i)}catch(i){throw i.name==="BadResponseError"?new Me("Not found"):i}}},dd=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await Ac(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Me("Not found")}async*getClosestPeers(e,t={}){}};var qt=pr("delegated-routing-v1-http-api-client"),p7={concurrentRequests:4,timeout:3e4},fd=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,K(1/0,this.shutDownController.signal),this.httpQueue=new Pr({concurrency:t.concurrentRequests??p7.concurrentRequests}),this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??p7.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new ud(this),this.peerRouting=new dd(this)}get[ln](){return this.contentRouting}get[un](){return this.peerRouting}isStarted(){return this.started}start(){this.started=!0}stop(){this.httpQueue.clear(),this.shutDownController.abort(),this.started=!1}async*getProviders(e,t={}){qt("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=he([this.shutDownController.signal,n,t.signal]);K(1/0,n,o);let i=J(),s=J();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}routing/v1/providers/${e.toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let l=await fetch(a,{headers:{Accept:"application/x-ndjson"},signal:o});if(l.status===404)throw new Me("No matching records found");if(l.status===422)throw new Ps("Request does not conform to schema or semantic constraints");if(l.body==null)throw new bi("Routing response had no body");if(l.headers.get("Content-Type")==="application/json"){let u=await l.json();for(let f of u.Providers){let h=this.#e(f);h!=null&&(yield h)}}else for await(let u of Sc(td(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){qt.error("getProviders errored:",a)}finally{o.clear(),s.resolve(),qt("getProviders finished: %c",e)}}async*getPeers(e,t={}){qt("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=he([this.shutDownController.signal,n,t.signal]);K(1/0,n,o);let i=J(),s=J();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}routing/v1/peers/${e.toCID().toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let l=await fetch(a,{headers:{Accept:"application/x-ndjson"},signal:o});if(l.status===404)throw new Me("No matching records found");if(l.status===422)throw new Ps("Request does not conform to schema or semantic constraints");if(l.body==null)throw new bi("Routing response had no body");if(l.headers.get("Content-Type")==="application/json"){let u=await l.json();for(let f of u.Peers){let h=this.#e(f);h!=null&&(yield h)}}else for await(let u of Sc(td(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){qt.error("getPeers errored:",a)}finally{o.clear(),s.resolve(),qt("getPeers finished: %c",e)}}async getIPNS(e,t={}){qt("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=he([this.shutDownController.signal,n,t.signal]);K(1/0,n,o);let i=J(),s=J();this.httpQueue.add(async()=>(i.resolve(),s.promise));let a=`${this.clientUrl}routing/v1/ipns/${e}`;try{await i.promise;let l=await fetch(a,{headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o});if(qt("getIPNS GET %s %d",a,l.status),l.status===404)throw new Me("No matching records found");if(l.status===422)throw new Ps("Request does not conform to schema or semantic constraints");if(l.body==null)throw new bi("GET ipns response had no body");let d=await l.arrayBuffer(),u=new Uint8Array(d,0,d.byteLength);return t.validate!==!1&&await ld(vc(e.multihash),u),Sn(u)}catch(c){throw qt.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),s.resolve(),qt("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){qt("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),i=he([this.shutDownController.signal,o,n.signal]);K(1/0,o,i);let s=J(),a=J();this.httpQueue.add(async()=>(s.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e}`;try{await s.promise;let l=Ec(t),u=await fetch(c,{method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:i});if(qt("putIPNS PUT %s %d",c,u.status),u.status!==200)throw new bi("PUT ipns response had status other than 200")}catch(l){throw qt.error("putIPNS PUT %s error:",c,l.stack),l}finally{i.clear(),a.resolve(),qt("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(Y)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:De(e.ID),Addrs:n,Protocols:t}}catch(t){qt.error("could not conform record to peer schema",t)}}#t(e,t,n){if(t!=null||this.filterAddrs!=null){let o=t?.join(",")??this.filterAddrs?.join(",")??"";o!==""&&e.searchParams.set("filter-addrs",o)}if(n!=null||this.filterProtocols!=null){let o=n?.join(",")??this.filterProtocols?.join(",")??"";o!==""&&e.searchParams.set("filter-protocols",o)}}};function m7(r,e={}){return new fd(new URL(r),e)}var g7="[a-fA-F\\d:]",Bo=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${g7})|(?<=${g7})(?=\\s|$))`:"",on="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",at="[a-fA-F\\d]{1,4}",hd=`
7
+ `)}`:`${t} :`}};k6=Io;G.Constructed=k6;Io.NAME="CONSTRUCTED";var su=class extends Dt{fromBER(e,t,n){return t}toBER(e){return Yr}};su.override="EndOfContentValueBlock";var C6,au=class extends xt{constructor(e={}){super(e,su),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};C6=au;G.EndOfContent=C6;au.NAME=Na;var P6,Kn=class extends xt{constructor(e={}){super(e,Dt),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(e,t,n){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=n,t+n>e.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):t+n}toBER(e,t){let n=new ArrayBuffer(2);if(!e){let o=new Uint8Array(n);o[0]=5,o[1]=0}return t&&t.write(n),n}onAsciiEncoding(){return`${this.constructor.NAME}`}};P6=Kn;G.Null=P6;Kn.NAME="NULL";var cu=class extends zn(Dt){constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=ye.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);return Wn(this,o,t,n)?(this.valueHexView=o.subarray(t,t+n),n>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,p2.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};cu.NAME="BooleanValueBlock";var R6,lu=class extends xt{constructor(e={}){super(e,cu),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};R6=lu;G.Boolean=R6;lu.NAME="BOOLEAN";var uu=class extends zn(wn){constructor({isConstructed:e=!1,...t}={}){super(t),this.isConstructed=e}fromBER(e,t,n){let o=0;if(this.isConstructed){if(this.isHexOnly=!1,o=wn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let i=0;i<this.value.length;i++){let s=this.value[i].constructor.NAME;if(s===Na){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(s!==A6)return this.error="OCTET STRING may consists of OCTET STRINGs only",-1}}else this.isHexOnly=!0,o=super.fromBER(e,t,n),this.blockLength=n;return o}toBER(e,t){return this.isConstructed?wn.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};uu.NAME="OctetStringValueBlock";var L6,Hn=class r extends xt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},uu),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,t,n){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,n===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),t;if(!this.valueBlock.isConstructed){let i=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(i.byteLength){let s=Uu(i,0,i.byteLength);s.offset!==-1&&s.offset===n&&(this.valueBlock.value=[s.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){return this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length?Io.prototype.onAsciiEncoding.call(this):`${this.constructor.NAME} : ${ye.Convert.ToHex(this.valueBlock.valueHexView)}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof r&&e.push(t.valueBlock.valueHexView);return ye.BufferSourceConverter.concat(e)}};L6=Hn;G.OctetString=L6;Hn.NAME=A6;var du=class extends zn(wn){constructor({unusedBits:e=0,isConstructed:t=!1,...n}={}){super(n),this.unusedBits=e,this.isConstructed=t,this.blockLength=this.valueHexView.byteLength}fromBER(e,t,n){if(!n)return t;let o=-1;if(this.isConstructed){if(o=wn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===Na){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==I6)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let l=a.valueBlock;if(this.unusedBits>0&&l.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=l.unusedBits}return o}let i=ye.BufferSourceConverter.toUint8Array(e);if(!Wn(this,i,t,n))return-1;let s=i.subarray(t,t+n);if(this.unusedBits=s[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=s.subarray(1);try{if(a.byteLength){let c=Uu(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=s.subarray(1),this.blockLength=s.length,t+n}toBER(e,t){if(this.isConstructed)return wn.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return Yr;let n=new Uint8Array(this.valueHexView.length+1);return n[0]=this.unusedBits,n.set(this.valueHexView,1),n.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};du.NAME="BitStringValueBlock";var D6,us=class extends xt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},du),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(e,t,n){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Io.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let o of t)e.push(o.toString(2).padStart(8,"0"));let n=e.join("");return`${this.constructor.NAME} : ${n.substring(0,n.length-this.valueBlock.unusedBits)}`}}};D6=us;G.BitString=D6;us.NAME=I6;var N6;function ES(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l=0,d=c<s?s:c,u=0;for(let f=d;f>=0;f--,u++){switch(!0){case u<a.length:l=i[s-u]+a[c-u]+t[0];break;default:l=i[s-u]+t[0]}switch(t[0]=l/10,!0){case u>=i.length:i=Jl(new Uint8Array([l%10]),i);break;default:i[s-u]=l%10}}return t[0]>0&&(i=Jl(t,i)),i}function S6(r){if(r>=La.length)for(let e=La.length;e<=r;e++){let t=new Uint8Array([0]),n=La[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let i=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=i[0]/10,n[o]=i[0]%10}t[0]>0&&(n=Jl(t,n)),La.push(n)}return La[r]}function vS(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l,d=0;for(let u=c;u>=0;u--,d++)switch(l=i[s-d]-a[c-d]-t,!0){case l<0:t=1,i[s-d]=l+10;break;default:t=0,i[s-d]=l}if(t>0)for(let u=s-c+1;u>=0;u--,d++)if(l=i[s-d]-t,l<0)t=1,i[s-d]=l+10;else{t=0,i[s-d]=l;break}return i.slice()}var Ba=class extends zn(Dt){constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=p2.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(x6(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let i=this.fromBER(e,t,n);if(i===-1)return i;let s=this.valueHexView;return s[0]===0&&s[1]&128?this.valueHexView=s.subarray(1):o!==0&&s.length<o&&(o-s.length>1&&(o=s.length+1),this.valueHexView=s.subarray(o-s.length)),i}toDER(e=!1){let t=this.valueHexView;switch(!0){case(t[0]&128)!==0:{let n=new Uint8Array(this.valueHexView.length+1);n[0]=0,n.set(t,1),this.valueHexView=n}break;case(t[0]===0&&(t[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(e)}fromBER(e,t,n){let o=super.fromBER(e,t,n);return o===-1||this.setValueHex(),o}toBER(e){return e?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){let e=this.valueHexView.length*8-1,t=new Uint8Array(this.valueHexView.length*8/3),n=0,o,i=this.valueHexView,s="",a=!1;for(let c=i.byteLength-1;c>=0;c--){o=i[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=vS(S6(n),t),s="-";break;default:t=ES(t,S6(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(s+=v6.charAt(t[c]));return a===!1&&(s+=v6.charAt(0)),s}};N6=Ba;Ba.NAME="IntegerValueBlock";Object.defineProperty(N6.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var B6,tt=class r extends xt{constructor(e={}){super(e,Ba),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return eu(),BigInt(this.valueBlock.toString())}static fromBigInt(e){eu();let t=BigInt(e),n=new Da,o=t.toString(16).replace(/^-/,""),i=new Uint8Array(ye.Convert.FromHex(o));if(t<0){let a=new Uint8Array(i.length+(i[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${ye.Convert.ToHex(a)}`)+t,d=ye.BufferSourceConverter.toUint8Array(ye.Convert.FromHex(l.toString(16)));d[0]|=128,n.write(d)}else i[0]&128&&n.write(new Uint8Array([0])),n.write(i);return new r({valueHex:n.final()})}convertToDER(){let e=new r({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new r({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};B6=tt;G.Integer=B6;tt.NAME="INTEGER";var O6,fu=class extends tt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};O6=fu;G.Enumerated=O6;fu.NAME="ENUMERATED";var Oa=class extends zn(Dt){constructor({valueDec:e=-1,isFirstSid:t=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=t}fromBER(e,t,n){if(!n)return t;let o=ye.BufferSourceConverter.toUint8Array(e);if(!Wn(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,!!(i[a]&128));a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,i[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=di(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){eu();let t=BigInt(e).toString(2);for(;t.length%7;)t="0"+t;let n=new Uint8Array(t.length/7);for(let o=0;o<n.length;o++)n[o]=parseInt(t.slice(o*7,o*7+7),2)+(o+1<n.length?128:0);this.fromBER(n.buffer,0,n.length)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=Ao(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Yr;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n}toString(){let e="";if(this.isHexOnly)e=ye.Convert.ToHex(this.valueHexView);else if(this.isFirstSid){let t=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",t-=40):(e="2.",t-=80),e+=t.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};Oa.NAME="sidBlock";var hu=class extends Dt{constructor({value:e=ds,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Oa;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.value.length===0&&(i.isFirstSid=!0),this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e){let t=[];for(let n=0;n<this.value.length;n++){let o=this.value[n].toBER(e);if(o.byteLength===0)return this.error=this.value[n].error,Yr;t.push(o)}return m2(t)}fromString(e){this.value=[];let t=0,n=0,o="",i=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,i){let s=this.value[0],a=0;switch(s.valueDec){case 0:break;case 1:a=40;break;case 2:a=80;break;default:this.value=[];return}let c=parseInt(o,10);if(isNaN(c))return;s.valueDec=c+a,i=!1}else{let s=new Oa;if(o>Number.MAX_SAFE_INTEGER){eu();let a=BigInt(o);s.valueBigInt=a}else if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return;this.value.length||(s.isFirstSid=!0,i=!0),this.value.push(s)}while(n!==-1)}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t?(o=`{${o}}`,this.value[n].isFirstSid?e=`2.{${o} - 80}`:e+=o):e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};hu.NAME="ObjectIdentifierValueBlock";var M6,Cr=class extends xt{constructor(e={}){super(e,hu),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};M6=Cr;G.ObjectIdentifier=M6;Cr.NAME="OBJECT IDENTIFIER";var Ma=class extends zn(Vn){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=ye.BufferSourceConverter.toUint8Array(e);if(!Wn(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,!!(i[a]&128));a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,i[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=di(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=Ao(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Yr;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n.buffer}toString(){let e="";return this.isHexOnly?e=ye.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};Ma.NAME="relativeSidBlock";var pu=class extends Dt{constructor({value:e=ds,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Ma;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let i=this.value[o].toBER(e);if(i.byteLength===0)return this.error=this.value[o].error,Yr;n.push(i)}return m2(n)}fromString(e){this.value=[];let t=0,n=0,o="";do{n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1;let i=new Ma;if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return!0;this.value.push(i)}while(n!==-1);return!0}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t&&(o=`{${o}}`),e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};pu.NAME="RelativeObjectIdentifierValueBlock";var U6,mu=class extends xt{constructor(e={}){super(e,pu),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};U6=mu;G.RelativeObjectIdentifier=U6;mu.NAME="RelativeObjectIdentifier";var F6,ft=class extends Io{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};F6=ft;G.Sequence=F6;ft.NAME="SEQUENCE";var $6,gu=class extends Io{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};$6=gu;G.Set=$6;gu.NAME="SET";var yu=class extends zn(Dt){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=ds}toJSON(){return{...super.toJSON(),value:this.value}}};yu.NAME="StringValueBlock";var wu=class extends yu{};wu.NAME="SimpleStringValueBlock";var Vt=class extends nu{constructor({...e}={}){super(e,wu)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,ye.BufferSourceConverter.toUint8Array(e))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);this.valueBlock.value=e}};Vt.NAME="SIMPLE STRING";var bu=class extends Vt{fromBuffer(e){this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=ye.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=ye.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf8String(e)),this.valueBlock.value=e}};bu.NAME="Utf8StringValueBlock";var V6,qn=class extends bu{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};V6=qn;G.Utf8String=V6;qn.NAME="UTF8String";var xu=class extends Vt{fromBuffer(e){this.valueBlock.value=ye.Convert.ToUtf16String(e),this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf16String(e))}};xu.NAME="BmpStringValueBlock";var K6,Eu=class extends xu{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};K6=Eu;G.BmpString=K6;Eu.NAME="BMPString";var vu=class extends Vt{fromBuffer(e){let t=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),n=new Uint8Array(t);for(let o=0;o<n.length;o+=4)n[o]=n[o+3],n[o+1]=n[o+2],n[o+2]=0,n[o+3]=0;this.valueBlock.value=String.fromCharCode.apply(null,new Uint32Array(t))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t*4);for(let o=0;o<t;o++){let i=Ao(e.charCodeAt(o),8),s=new Uint8Array(i);if(s.length>4)continue;let a=4-s.length;for(let c=s.length-1;c>=0;c--)n[o*4+c+a]=s[c]}this.valueBlock.value=e}};vu.NAME="UniversalStringValueBlock";var H6,Su=class extends vu{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};H6=Su;G.UniversalString=H6;Su.NAME="UniversalString";var q6,Au=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};q6=Au;G.NumericString=q6;Au.NAME="NumericString";var W6,Iu=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};W6=Iu;G.PrintableString=W6;Iu.NAME="PrintableString";var z6,_u=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};z6=_u;G.TeletexString=z6;_u.NAME="TeletexString";var G6,Tu=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};G6=Tu;G.VideotexString=G6;Tu.NAME="VideotexString";var Q6,ku=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};Q6=ku;G.IA5String=Q6;ku.NAME="IA5String";var Y6,Cu=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};Y6=Cu;G.GraphicString=Y6;Cu.NAME="GraphicString";var X6,Ua=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};X6=Ua;G.VisibleString=X6;Ua.NAME="VisibleString";var j6,Pu=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};j6=Pu;G.GeneralString=j6;Pu.NAME="GeneralString";var Z6,Ru=class extends Vt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};Z6=Ru;G.CharacterString=Z6;Ru.NAME="CharacterString";var J6,Fa=class extends Ua{constructor({value:e,valueDate:t,...n}={}){if(super(n),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let o=0;o<e.length;o++)this.valueBlock.valueHexView[o]=e.charCodeAt(o)}t&&(this.fromDate(t),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,ye.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return t}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let n=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(n===null){this.error="Wrong input string for conversion";return}let o=parseInt(n[1],10);o>=50?this.year=1900+o:this.year=2e3+o,this.month=parseInt(n[2],10),this.day=parseInt(n[3],10),this.hour=parseInt(n[4],10),this.minute=parseInt(n[5],10),this.second=parseInt(n[6],10)}toString(e="iso"){if(e==="iso"){let t=new Array(7);return t[0]=tr(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=tr(this.month,2),t[2]=tr(this.day,2),t[3]=tr(this.hour,2),t[4]=tr(this.minute,2),t[5]=tr(this.second,2),t[6]="Z",t.join("")}return super.toString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}};J6=Fa;G.UTCTime=J6;Fa.NAME="UTCTime";var e8,Lu=class extends Fa{constructor(e={}){var t;super(e),(t=this.millisecond)!==null&&t!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond))}fromString(e){let t=!1,n="",o="",i=0,s,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let u=new Number(e[e.length-1]);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let u=1,f=n.indexOf("+"),h="";if(f===-1&&(f=n.indexOf("-"),u=-1),f!==-1){if(h=n.substring(f+1),n=n.substring(0,f),h.length!==2&&h.length!==4)throw new Error("Wrong input string for conversion");let p=parseInt(h.substring(0,2),10);if(isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");if(a=u*p,h.length===4){if(p=parseInt(h.substring(2,4),10),isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");c=u*p}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let u=new Number(`0${n.substring(l)}`);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");i=u.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(s=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*i;this.minute=Math.floor(u),u=60*(u-this.minute),this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===12:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*i;this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===14:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=1e3*i;this.millisecond=Math.floor(u)}break;default:throw new Error("Wrong input string for conversion")}let d=s.exec(o);if(d===null)throw new Error("Wrong input string for conversion");for(let u=1;u<d.length;u++)switch(u){case 1:this.year=parseInt(d[u],10);break;case 2:this.month=parseInt(d[u],10);break;case 3:this.day=parseInt(d[u],10);break;case 4:this.hour=parseInt(d[u],10)+a;break;case 5:this.minute=parseInt(d[u],10)+c;break;case 6:this.second=parseInt(d[u],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let u=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=u.getUTCFullYear(),this.month=u.getUTCMonth(),this.day=u.getUTCDay(),this.hour=u.getUTCHours(),this.minute=u.getUTCMinutes(),this.second=u.getUTCSeconds(),this.millisecond=u.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(tr(this.year,4)),t.push(tr(this.month,2)),t.push(tr(this.day,2)),t.push(tr(this.hour,2)),t.push(tr(this.minute,2)),t.push(tr(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(tr(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};e8=Lu;G.GeneralizedTime=e8;Lu.NAME="GeneralizedTime";var t8,Du=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};t8=Du;G.DATE=t8;Du.NAME="DATE";var r8,Nu=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};r8=Nu;G.TimeOfDay=r8;Nu.NAME="TimeOfDay";var n8,Bu=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};n8=Bu;G.DateTime=n8;Bu.NAME="DateTime";var o8,Ou=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};o8=Ou;G.Duration=o8;Ou.NAME="Duration";var i8,Mu=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};i8=Mu;G.TIME=i8;Mu.NAME="TIME";function V(r,e="utf8"){let t=Nl[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}function Kt(r){if(isNaN(r)||r<=0)throw new C("random bytes length must be a Number bigger than 0");return si(r)}var $a=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},Va=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},Fu=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var s8={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new Fu("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api");return e}};var rr=s8;async function a8(r){let e=await rr.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await SS(e);return{privateKey:t[0],publicKey:t[1]}}async function c8(r,e){let t=await rr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await rr.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function l8(r,e,t){let n=await rr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return rr.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function SS(r){if(r.privateKey==null||r.publicKey==null)throw new C("Private and public key are required");return Promise.all([rr.get().subtle.exportKey("jwk",r.privateKey),rr.get().subtle.exportKey("jwk",r.publicKey)])}function w2(r){if(r.kty!=="RSA")throw new C("invalid key type");if(r.n==null)throw new C("invalid key modulus");return M(r.n,"base64url").length*8}var fs=class{type="RSA";_key;_raw;_multihash;constructor(e,t){this._key=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=Ka.jwkToPkix(this._key)),this._raw}toMultihash(){return this._multihash}toCID(){return X.createV1(114,this._multihash)}toString(){return Se.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}verify(e,t){return l8(this._key,t,e)}},Ha=class{type="RSA";_key;_raw;publicKey;constructor(e,t){this._key=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=Ka.jwkToPkcs1(this._key)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}sign(e){return c8(this._key,e)}};var $u=8192,b2=18;function u8(r){let{result:e}=fi(r),t=e.valueBlock.value;return{n:bn(t[1]),e:bn(t[2]),d:bn(t[3]),p:bn(t[4]),q:bn(t[5]),dp:bn(t[6]),dq:bn(t[7]),qi:bn(t[8]),kty:"RSA",alg:"RS256"}}function AS(r){if(r.n==null||r.e==null||r.d==null||r.p==null||r.q==null||r.dp==null||r.dq==null||r.qi==null)throw new C("JWK was missing components");let t=new ft({value:[new tt({value:0}),tt.fromBigInt(xn(M(r.n,"base64url"))),tt.fromBigInt(xn(M(r.e,"base64url"))),tt.fromBigInt(xn(M(r.d,"base64url"))),tt.fromBigInt(xn(M(r.p,"base64url"))),tt.fromBigInt(xn(M(r.q,"base64url"))),tt.fromBigInt(xn(M(r.dp,"base64url"))),tt.fromBigInt(xn(M(r.dq,"base64url"))),tt.fromBigInt(xn(M(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function d8(r){let{result:e}=fi(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:bn(t[0]),e:bn(t[1])}}function x2(r){if(r.n==null||r.e==null)throw new C("JWK was missing components");let t=new ft({value:[new ft({value:[new Cr({value:"1.2.840.113549.1.1.1"}),new Kn]}),new us({valueHex:new ft({value:[tt.fromBigInt(xn(M(r.n,"base64url"))),tt.fromBigInt(xn(M(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function bn(r){let e=r.valueBlock.valueHexView;for(;e[0]===0;)e=e.subarray(1);return V(e,"base64url")}function xn(r){let e=[];return r.forEach(function(t){let n=t.toString(16);n.length%2>0&&(n=`0${n}`),e.push(n)}),BigInt("0x"+e.join(""))}function Vu(r){let e=u8(r);return f8(e)}function E2(r){let e=d8(r);if(w2(e)>$u)throw new Rn("Key size is too large");let t=Tr(yn.encode({Type:Ye.RSA,Data:r})),n=Zt(b2,t);return new fs(e,n)}function f8(r){if(w2(r)>$u)throw new C("Key size is too large");let e=h8(r),t=Tr(yn.encode({Type:Ye.RSA,Data:x2(e.publicKey)})),n=Zt(b2,t);return new Ha(e.privateKey,new fs(e.publicKey,n))}async function v2(r){if(r>$u)throw new C("Key size is too large");let e=await a8(r),t=Tr(yn.encode({Type:Ye.RSA,Data:x2(e.publicKey)})),n=Zt(b2,t);return new Ha(e.privateKey,new fs(e.publicKey,n))}function h8(r){if(r==null)throw new C("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}var Ku=class extends rs{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,ni(e);let n=Wr(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,i=new Uint8Array(o);i.set(n.length>o?e.create().update(n).digest():n);for(let s=0;s<i.length;s++)i[s]^=54;this.iHash.update(i),this.oHash=e.create();for(let s=0;s<i.length;s++)i[s]^=106;this.oHash.update(i),i.fill(0)}update(e){return ts(this),this.iHash.update(e),this}digestInto(e){ts(this),es(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:o,destroyed:i,blockLen:s,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=i,e.blockLen=s,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},_o=(r,e,t)=>new Ku(r,e).update(t).digest();_o.create=(r,e)=>new Ku(r,e);function p8(r){r.lowS!==void 0&&zr("lowS",r.lowS),r.prehash!==void 0&&zr("prehash",r.prehash)}function IS(r){let e=_a(r);_r(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:_S,hexToBytes:TS}=zl,Gn={Err:class extends Error{constructor(e=""){super(e)}},_tlv:{encode:(r,e)=>{let{Err:t}=Gn;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length&1)throw new t("tlv.encode: unpadded data");let n=e.length/2,o=ai(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let i=n>127?ai(o.length/2|128):"";return`${ai(r)}${i}${o}${e}`},decode(r,e){let{Err:t}=Gn,n=0;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length<2||e[n++]!==r)throw new t("tlv.decode: wrong tlv");let o=e[n++],i=!!(o&128),s=0;if(!i)s=o;else{let c=o&127;if(!c)throw new t("tlv.decode(long): indefinite length not supported");if(c>4)throw new t("tlv.decode(long): byte length is too big");let l=e.subarray(n,n+c);if(l.length!==c)throw new t("tlv.decode: length bytes not complete");if(l[0]===0)throw new t("tlv.decode(long): zero leftmost byte");for(let d of l)s=s<<8|d;if(n+=c,s<128)throw new t("tlv.decode(long): not minimal encoding")}let a=e.subarray(n,n+s);if(a.length!==s)throw new t("tlv.decode: wrong value length");return{v:a,l:e.subarray(n+s)}}},_int:{encode(r){let{Err:e}=Gn;if(r<Qn)throw new e("integer: negative integers are not allowed");let t=ai(r);if(Number.parseInt(t[0],16)&8&&(t="00"+t),t.length&1)throw new e("unexpected assertion");return t},decode(r){let{Err:e}=Gn;if(r[0]&128)throw new e("Invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new e("Invalid signature integer: unnecessary leading zero");return _S(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Gn,o=typeof r=="string"?TS(r):r;os(o);let{v:i,l:s}=n.decode(48,o);if(s.length)throw new e("Invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,i),{v:l,l:d}=n.decode(2,c);if(d.length)throw new e("Invalid signature: left bytes after parsing");return{r:t.decode(a),s:t.decode(l)}},hexFromSig(r){let{_tlv:e,_int:t}=Gn,n=`${e.encode(2,t.encode(r.r))}${e.encode(2,t.encode(r.s))}`;return e.encode(48,n)}},Qn=BigInt(0),pt=BigInt(1),NB=BigInt(2),m8=BigInt(3),BB=BigInt(4);function kS(r){let e=IS(r),{Fp:t}=e,n=Eo(e.n,e.nBitLength),o=e.toBytes||((m,g,y)=>{let b=g.toAffine();return Fn(Uint8Array.from([4]),t.toBytes(b.x),t.toBytes(b.y))}),i=e.fromBytes||(m=>{let g=m.subarray(1),y=t.fromBytes(g.subarray(0,t.BYTES)),b=t.fromBytes(g.subarray(t.BYTES,2*t.BYTES));return{x:y,y:b}});function s(m){let{a:g,b:y}=e,b=t.sqr(m),w=t.mul(b,m);return t.add(t.add(w,t.mul(m,g)),y)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function a(m){return Aa(m,pt,e.n)}function c(m){let{allowedPrivateKeyLengths:g,nByteLength:y,wrapPrivateKey:b,n:w}=e;if(g&&typeof m!="bigint"){if(bo(m)&&(m=On(m)),typeof m!="string"||!g.includes(m.length))throw new Error("Invalid key");m=m.padStart(y*2,"0")}let x;try{x=typeof m=="bigint"?m:Mn(Ue("private key",m,y))}catch{throw new Error(`private key must be ${y} bytes, hex or bigint, not ${typeof m}`)}return b&&(x=_e(x,w)),bt("private key",x,pt,w),x}function l(m){if(!(m instanceof f))throw new Error("ProjectivePoint expected")}let d=li((m,g)=>{let{px:y,py:b,pz:w}=m;if(t.eql(w,t.ONE))return{x:y,y:b};let x=m.is0();g==null&&(g=x?t.ONE:t.inv(w));let T=t.mul(y,g),k=t.mul(b,g),v=t.mul(w,g);if(x)return{x:t.ZERO,y:t.ZERO};if(!t.eql(v,t.ONE))throw new Error("invZ was invalid");return{x:T,y:k}}),u=li(m=>{if(m.is0()){if(e.allowInfinityPoint&&!t.is0(m.py))return;throw new Error("bad point: ZERO")}let{x:g,y}=m.toAffine();if(!t.isValid(g)||!t.isValid(y))throw new Error("bad point: x or y not FE");let b=t.sqr(y),w=s(g);if(!t.eql(b,w))throw new Error("bad point: equation left != right");if(!m.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class f{constructor(g,y,b){if(this.px=g,this.py=y,this.pz=b,g==null||!t.isValid(g))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(b==null||!t.isValid(b))throw new Error("z required");Object.freeze(this)}static fromAffine(g){let{x:y,y:b}=g||{};if(!g||!t.isValid(y)||!t.isValid(b))throw new Error("invalid affine point");if(g instanceof f)throw new Error("projective point not allowed");let w=x=>t.eql(x,t.ZERO);return w(y)&&w(b)?f.ZERO:new f(y,b,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(g){let y=t.invertBatch(g.map(b=>b.pz));return g.map((b,w)=>b.toAffine(y[w])).map(f.fromAffine)}static fromHex(g){let y=f.fromAffine(i(Ue("pointHex",g)));return y.assertValidity(),y}static fromPrivateKey(g){return f.BASE.multiply(c(g))}static msm(g,y){return Yl(f,n,g,y)}_setWindowSize(g){p.setWindowSize(this,g)}assertValidity(){u(this)}hasEvenY(){let{y:g}=this.toAffine();if(t.isOdd)return!t.isOdd(g);throw new Error("Field doesn't support isOdd")}equals(g){l(g);let{px:y,py:b,pz:w}=this,{px:x,py:T,pz:k}=g,v=t.eql(t.mul(y,k),t.mul(x,w)),S=t.eql(t.mul(b,k),t.mul(T,w));return v&&S}negate(){return new f(this.px,t.neg(this.py),this.pz)}double(){let{a:g,b:y}=e,b=t.mul(y,m8),{px:w,py:x,pz:T}=this,k=t.ZERO,v=t.ZERO,S=t.ZERO,_=t.mul(w,w),F=t.mul(x,x),N=t.mul(T,T),O=t.mul(w,x);return O=t.add(O,O),S=t.mul(w,T),S=t.add(S,S),k=t.mul(g,S),v=t.mul(b,N),v=t.add(k,v),k=t.sub(F,v),v=t.add(F,v),v=t.mul(k,v),k=t.mul(O,k),S=t.mul(b,S),N=t.mul(g,N),O=t.sub(_,N),O=t.mul(g,O),O=t.add(O,S),S=t.add(_,_),_=t.add(S,_),_=t.add(_,N),_=t.mul(_,O),v=t.add(v,_),N=t.mul(x,T),N=t.add(N,N),_=t.mul(N,O),k=t.sub(k,_),S=t.mul(N,F),S=t.add(S,S),S=t.add(S,S),new f(k,v,S)}add(g){l(g);let{px:y,py:b,pz:w}=this,{px:x,py:T,pz:k}=g,v=t.ZERO,S=t.ZERO,_=t.ZERO,F=e.a,N=t.mul(e.b,m8),O=t.mul(y,x),B=t.mul(b,T),L=t.mul(w,k),D=t.add(y,b),I=t.add(x,T);D=t.mul(D,I),I=t.add(O,B),D=t.sub(D,I),I=t.add(y,w);let A=t.add(x,k);return I=t.mul(I,A),A=t.add(O,L),I=t.sub(I,A),A=t.add(b,w),v=t.add(T,k),A=t.mul(A,v),v=t.add(B,L),A=t.sub(A,v),_=t.mul(F,I),v=t.mul(N,L),_=t.add(v,_),v=t.sub(B,_),_=t.add(B,_),S=t.mul(v,_),B=t.add(O,O),B=t.add(B,O),L=t.mul(F,L),I=t.mul(N,I),B=t.add(B,L),L=t.sub(O,L),L=t.mul(F,L),I=t.add(I,L),O=t.mul(B,I),S=t.add(S,O),O=t.mul(A,I),v=t.mul(D,v),v=t.sub(v,O),O=t.mul(D,B),_=t.mul(A,_),_=t.add(_,O),new f(v,S,_)}subtract(g){return this.add(g.negate())}is0(){return this.equals(f.ZERO)}wNAF(g){return p.wNAFCached(this,g,f.normalizeZ)}multiplyUnsafe(g){bt("scalar",g,Qn,e.n);let y=f.ZERO;if(g===Qn)return y;if(g===pt)return this;let{endo:b}=e;if(!b)return p.unsafeLadder(this,g);let{k1neg:w,k1:x,k2neg:T,k2:k}=b.splitScalar(g),v=y,S=y,_=this;for(;x>Qn||k>Qn;)x&pt&&(v=v.add(_)),k&pt&&(S=S.add(_)),_=_.double(),x>>=pt,k>>=pt;return w&&(v=v.negate()),T&&(S=S.negate()),S=new f(t.mul(S.px,b.beta),S.py,S.pz),v.add(S)}multiply(g){let{endo:y,n:b}=e;bt("scalar",g,pt,b);let w,x;if(y){let{k1neg:T,k1:k,k2neg:v,k2:S}=y.splitScalar(g),{p:_,f:F}=this.wNAF(k),{p:N,f:O}=this.wNAF(S);_=p.constTimeNegate(T,_),N=p.constTimeNegate(v,N),N=new f(t.mul(N.px,y.beta),N.py,N.pz),w=_.add(N),x=F.add(O)}else{let{p:T,f:k}=this.wNAF(g);w=T,x=k}return f.normalizeZ([w,x])[0]}multiplyAndAddUnsafe(g,y,b){let w=f.BASE,x=(k,v)=>v===Qn||v===pt||!k.equals(w)?k.multiplyUnsafe(v):k.multiply(v),T=x(this,y).add(x(g,b));return T.is0()?void 0:T}toAffine(g){return d(this,g)}isTorsionFree(){let{h:g,isTorsionFree:y}=e;if(g===pt)return!0;if(y)return y(f,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:g,clearCofactor:y}=e;return g===pt?this:y?y(f,this):this.multiplyUnsafe(e.h)}toRawBytes(g=!0){return zr("isCompressed",g),this.assertValidity(),o(f,this,g)}toHex(g=!0){return zr("isCompressed",g),On(this.toRawBytes(g))}}f.BASE=new f(e.Gx,e.Gy,t.ONE),f.ZERO=new f(t.ZERO,t.ONE,t.ZERO);let h=e.nBitLength,p=Ql(f,e.endo?Math.ceil(h/2):h);return{CURVE:e,ProjectivePoint:f,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:a}}function CS(r){let e=_a(r);return _r(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function g8(r){let e=CS(r),{Fp:t,n}=e,o=t.BYTES+1,i=2*t.BYTES+1;function s(L){return _e(L,n)}function a(L){return Gl(L,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:d,isWithinCurveOrder:u}=kS({...e,toBytes(L,D,I){let A=D.toAffine(),R=t.toBytes(A.x),P=Fn;return zr("isCompressed",I),I?P(Uint8Array.from([D.hasEvenY()?2:3]),R):P(Uint8Array.from([4]),R,t.toBytes(A.y))},fromBytes(L){let D=L.length,I=L[0],A=L.subarray(1);if(D===o&&(I===2||I===3)){let R=Mn(A);if(!Aa(R,pt,t.ORDER))throw new Error("Point is not on curve");let P=d(R),q;try{q=t.sqrt(P)}catch(ae){let ce=ae instanceof Error?": "+ae.message:"";throw new Error("Point is not on curve"+ce)}let z=(q&pt)===pt;return(I&1)===1!==z&&(q=t.neg(q)),{x:R,y:q}}else if(D===i&&I===4){let R=t.fromBytes(A.subarray(0,t.BYTES)),P=t.fromBytes(A.subarray(t.BYTES,2*t.BYTES));return{x:R,y:P}}else throw new Error(`Point of length ${D} was invalid. Expected ${o} compressed bytes or ${i} uncompressed bytes`)}}),f=L=>On(xo(L,e.nByteLength));function h(L){let D=n>>pt;return L>D}function p(L){return h(L)?s(-L):L}let m=(L,D,I)=>Mn(L.slice(D,I));class g{constructor(D,I,A){this.r=D,this.s=I,this.recovery=A,this.assertValidity()}static fromCompact(D){let I=e.nByteLength;return D=Ue("compactSignature",D,I*2),new g(m(D,0,I),m(D,I,2*I))}static fromDER(D){let{r:I,s:A}=Gn.toSig(Ue("DER",D));return new g(I,A)}assertValidity(){bt("r",this.r,pt,n),bt("s",this.s,pt,n)}addRecoveryBit(D){return new g(this.r,this.s,D)}recoverPublicKey(D){let{r:I,s:A,recovery:R}=this,P=k(Ue("msgHash",D));if(R==null||![0,1,2,3].includes(R))throw new Error("recovery id invalid");let q=R===2||R===3?I+e.n:I;if(q>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let z=R&1?"03":"02",Z=c.fromHex(z+f(q)),ae=a(q),ce=s(-P*ae),fe=s(A*ae),ve=c.BASE.multiplyAndAddUnsafe(Z,ce,fe);if(!ve)throw new Error("point at infinify");return ve.assertValidity(),ve}hasHighS(){return h(this.s)}normalizeS(){return this.hasHighS()?new g(this.r,s(-this.s),this.recovery):this}toDERRawBytes(){return ci(this.toDERHex())}toDERHex(){return Gn.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return ci(this.toCompactHex())}toCompactHex(){return f(this.r)+f(this.s)}}let y={isValidPrivateKey(L){try{return l(L),!0}catch{return!1}},normPrivateKeyToScalar:l,randomPrivateKey:()=>{let L=o2(e.n);return i6(e.randomBytes(L),e.n)},precompute(L=8,D=c.BASE){return D._setWindowSize(L),D.multiply(BigInt(3)),D}};function b(L,D=!0){return c.fromPrivateKey(L).toRawBytes(D)}function w(L){let D=bo(L),I=typeof L=="string",A=(D||I)&&L.length;return D?A===o||A===i:I?A===2*o||A===2*i:L instanceof c}function x(L,D,I=!0){if(w(L))throw new Error("first arg must be private key");if(!w(D))throw new Error("second arg must be public key");return c.fromHex(D).multiply(l(L)).toRawBytes(I)}let T=e.bits2int||function(L){let D=Mn(L),I=L.length*8-e.nBitLength;return I>0?D>>BigInt(I):D},k=e.bits2int_modN||function(L){return s(T(L))},v=Ia(e.nBitLength);function S(L){return bt(`num < 2^${e.nBitLength}`,L,Qn,v),xo(L,e.nByteLength)}function _(L,D,I=F){if(["recovered","canonical"].some(Be=>Be in I))throw new Error("sign() legacy options not supported");let{hash:A,randomBytes:R}=e,{lowS:P,prehash:q,extraEntropy:z}=I;P==null&&(P=!0),L=Ue("msgHash",L),p8(I),q&&(L=Ue("prehashed msgHash",A(L)));let Z=k(L),ae=l(D),ce=[S(ae),S(Z)];if(z!=null&&z!==!1){let Be=z===!0?R(t.BYTES):z;ce.push(Ue("extraEntropy",Be))}let fe=Fn(...ce),ve=Z;function Ne(Be){let Ve=T(Be);if(!u(Ve))return;let Ot=a(Ve),at=c.BASE.multiply(Ve).toAffine(),Qt=s(at.x);if(Qt===Qn)return;let Pn=s(Ot*s(ve+Qt*ae));if(Pn===Qn)return;let ha=(at.x===Qt?0:2)|Number(at.y&pt),pa=Pn;return P&&h(Pn)&&(pa=p(Pn),ha^=1),new g(Qt,pa,ha)}return{seed:fe,k2sig:Ne}}let F={lowS:e.lowS,prehash:!1},N={lowS:e.lowS,prehash:!1};function O(L,D,I=F){let{seed:A,k2sig:R}=_(L,D,I),P=e;return J0(P.hash.outputLen,P.nByteLength,P.hmac)(A,R)}c.BASE._setWindowSize(8);function B(L,D,I,A=N){let R=L;if(D=Ue("msgHash",D),I=Ue("publicKey",I),"strict"in A)throw new Error("options.strict was renamed to lowS");p8(A);let{lowS:P,prehash:q}=A,z,Z;try{if(typeof R=="string"||bo(R))try{z=g.fromDER(R)}catch(at){if(!(at instanceof Gn.Err))throw at;z=g.fromCompact(R)}else if(typeof R=="object"&&typeof R.r=="bigint"&&typeof R.s=="bigint"){let{r:at,s:Qt}=R;z=new g(at,Qt)}else throw new Error("PARSE");Z=c.fromHex(I)}catch(at){if(at.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(P&&z.hasHighS())return!1;q&&(D=e.hash(D));let{r:ae,s:ce}=z,fe=k(D),ve=a(ce),Ne=s(fe*ve),Be=s(ae*ve),Ve=c.BASE.multiplyAndAddUnsafe(Z,Ne,Be)?.toAffine();return Ve?s(Ve.x)===ae:!1}return{CURVE:e,getPublicKey:b,getSharedSecret:x,sign:O,verify:B,ProjectivePoint:c,Signature:g,utils:y}}function PS(r){return{hash:r,hmac:(e,...t)=>_o(r,e,W0(...t)),randomBytes:si}}function y8(r,e){let t=n=>g8({...r,...PS(n)});return Object.freeze({...t(e),create:t})}var x8=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),w8=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),RS=BigInt(1),S2=BigInt(2),b8=(r,e)=>(r+e/S2)/e;function LS(r){let e=x8,t=BigInt(3),n=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,d=l*l*r%e,u=Fe(d,t,e)*d%e,f=Fe(u,t,e)*d%e,h=Fe(f,S2,e)*l%e,p=Fe(h,o,e)*h%e,m=Fe(p,i,e)*p%e,g=Fe(m,a,e)*m%e,y=Fe(g,c,e)*g%e,b=Fe(y,a,e)*m%e,w=Fe(b,t,e)*d%e,x=Fe(w,s,e)*p%e,T=Fe(x,n,e)*l%e,k=Fe(T,S2,e);if(!A2.eql(A2.sqr(k),r))throw new Error("Cannot find square root");return k}var A2=Eo(x8,void 0,void 0,{sqrt:LS}),Pr=y8({a:BigInt(0),b:BigInt(7),Fp:A2,n:w8,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=w8,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-RS*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=t,s=BigInt("0x100000000000000000000000000000000"),a=b8(i*r,e),c=b8(-n*r,e),l=_e(r-a*t-c*o,e),d=_e(-a*n-c*i,e),u=l>s,f=d>s;if(u&&(l=e-l),f&&(d=e-d),l>s||d>s)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:u,k1:l,k2neg:f,k2:d}}}},Tr),qB=BigInt(0);var WB=Pr.ProjectivePoint;function I2(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function E8(r,e){let t=ut.digest(e instanceof Uint8Array?e:e.subarray());if(I2(t))return t.then(({digest:n})=>Pr.sign(n,r).toDERRawBytes()).catch(n=>{throw new $a(String(n))});try{return Pr.sign(t.digest,r).toDERRawBytes()}catch(n){throw new $a(String(n))}}function v8(r,e,t){let n=ut.digest(t instanceof Uint8Array?t:t.subarray());if(I2(n))return n.then(({digest:o})=>Pr.verify(e,o,r)).catch(o=>{throw new Va(String(o))});try{return Pr.verify(e,n.digest,r)}catch(o){throw new Va(String(o))}}var qa=class{type="secp256k1";raw;_key;constructor(e){this._key=I8(e),this.raw=S8(this._key)}toMultihash(){return Jt.digest(Lt(this))}toCID(){return X.createV1(114,this.toMultihash())}toString(){return Se.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}verify(e,t){return v8(this._key,t,e)}},Wa=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=A8(e),this.publicKey=new qa(t??_8(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:te(this.raw,e.raw)}sign(e){return E8(this.raw,e)}};function _2(r){return new Wa(r)}function T2(r){return new qa(r)}async function T8(){let r=DS();return new Wa(r)}function S8(r){return Pr.ProjectivePoint.fromHex(r).toRawBytes(!0)}function A8(r){try{return Pr.getPublicKey(r,!0),r}catch(e){throw new ma(String(e))}}function I8(r){try{return Pr.ProjectivePoint.fromHex(r),r}catch(e){throw new Rn(String(e))}}function _8(r){try{return Pr.getPublicKey(r,!0)}catch(e){throw new ma(String(e))}}function DS(){return Pr.utils.randomPrivateKey()}async function Hu(r,e){if(r==="Ed25519")return y6();if(r==="secp256k1")return T8();if(r==="RSA")return v2(e??2048);throw new $r}function rt(r){let{Type:e,Data:t}=yn.decode(r),n=t??new Uint8Array;switch(e){case Ye.RSA:return E2(n);case Ye.Ed25519:return u2(n);case Ye.secp256k1:return T2(n);default:throw new $r}}function qu(r){let{Type:e,Data:t}=yn.decode(r.digest),n=t??new Uint8Array;switch(e){case Ye.Ed25519:return u2(n);case Ye.secp256k1:return T2(n);default:throw new $r}}function Lt(r){return yn.encode({Type:Ye[r.type],Data:r.raw})}function k8(r){let e=Ra.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Ye.RSA:return Vu(t);case Ye.Ed25519:return l2(t);case Ye.secp256k1:return _2(t);default:throw new $r}}function C8(r){return r.byteLength===64?l2(r):r.byteLength===32?_2(r):Vu(r)}function hs(r){return Ra.encode({Type:Ye[r.type],Data:r.raw})}var P8=Symbol.for("nodejs.util.inspect.custom"),NS=114,za=class{type;multihash;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[al]=!0;toString(){return this.string==null&&(this.string=Se.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return X.createV1(NS,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return te(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return te(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[P8](){return`PeerId(${this.toString()})`}},Ga=class extends za{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},Qa=class extends za{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},Ya=class extends za{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},BS=2336,Xa=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Jt.digest(M(this.url))}[P8](){return`PeerId(${this.url})`}[al]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return X.createV1(BS,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=V(e)),e.toString()===this.toString())}};var OS=114,R8=2336;function Re(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=ke(Se.decode(`z${r}`));else{if(e==null)throw new C('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=ke(e.decode(r))}return mt(t)}function En(r){if(r.type==="Ed25519")return new Qa({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new Ya({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new Ga({multihash:r.toCID().multihash,publicKey:r});throw new $r}function L8(r){return En(r.publicKey)}function mt(r){if(US(r))return new Ga({multihash:r});if(MS(r))try{let e=qu(r);if(e.type==="Ed25519")return new Qa({multihash:r,publicKey:e});if(e.type==="secp256k1")return new Ya({multihash:r,publicKey:e})}catch{let t=V(r.digest);return new Xa(new URL(t))}throw new co("Supplied PeerID Multihash is invalid")}function vn(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==OS&&r.code!==R8)throw new hl("Supplied PeerID CID is invalid");if(r.code===R8){let e=V(r.multihash.digest);return new Xa(new URL(e))}return mt(r.multihash)}function MS(r){return r.code===Jt.code}function US(r){return r.code===ut.code}function hi(r,e){let t={[Symbol.iterator]:()=>t,next:()=>{let n=r.next(),o=n.value;return n.done===!0||o==null?{done:!0,value:void 0}:{done:!1,value:e(o)}}};return t}function Wu(r){let e=ke(Se.decode(`z${r}`));return mt(e)}var gt=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),{key:t,value:n})}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return hi(this.map.entries(),e=>[e[1].key,e[1].value])}forEach(e){this.map.forEach((t,n)=>{e(t.value,t.key,this)})}get(e){return this.map.get(e.toString())?.value}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),{key:e,value:t})}keys(){return hi(this.map.values(),e=>e.key)}values(){return hi(this.map.values(),e=>e.value)}get size(){return this.map.size}};var nr=class r{set;constructor(e){if(this.set=new Set,e!=null)for(let t of e)this.set.add(t.toString())}get size(){return this.set.size}[Symbol.iterator](){return this.values()}add(e){this.set.add(e.toString())}clear(){this.set.clear()}delete(e){this.set.delete(e.toString())}entries(){return hi(this.set.entries(),e=>{let t=Wu(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=Wu(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return hi(this.set.values(),e=>Wu(e))}intersection(e){let t=new r;for(let n of e)this.has(n)&&t.add(n);return t}difference(e){let t=new r;for(let n of this)e.has(n)||t.add(n);return t}union(e){let t=new r;for(let n of e)t.add(n);for(let n of this)t.add(n);return t}};function D8(r,e,t,n){ni(r);let o=j4({dkLen:32,asyncTick:10},n),{c:i,dkLen:s,asyncTick:a}=o;if(po(i),po(s),po(a),i<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=Wr(e),l=Wr(t),d=new Uint8Array(s),u=_o.create(r,c),f=u._cloneInto().update(l);return{c:i,dkLen:s,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function N8(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function B8(r,e,t,n){let{c:o,dkLen:i,DK:s,PRF:a,PRFSalt:c}=D8(r,e,t,n),l,d=new Uint8Array(4),u=ii(d),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<i;h++,p+=a.outputLen){let m=s.subarray(p,p+a.outputLen);u.setInt32(0,h,!1),(l=c._cloneInto(l)).update(d).digestInto(f),m.set(f.subarray(0,m.length));for(let g=1;g<o;g++){a._cloneInto(l).update(f).digestInto(f);for(let y=0;y<m.length;y++)m[y]^=f[y]}}return N8(a,c,s,l,f)}async function zu(r,e,t,n){let{c:o,dkLen:i,asyncTick:s,DK:a,PRF:c,PRFSalt:l}=D8(r,e,t,n),d,u=new Uint8Array(4),f=ii(u),h=new Uint8Array(c.outputLen);for(let p=1,m=0;m<i;p++,m+=c.outputLen){let g=a.subarray(m,m+c.outputLen);f.setInt32(0,p,!1),(d=l._cloneInto(d)).update(u).digestInto(h),g.set(h.subarray(0,g.length)),await Y4(o-1,s,()=>{c._cloneInto(d).update(h).digestInto(h);for(let y=0;y<g.length;y++)g[y]^=h[y]})}return N8(c,l,a,d,h)}var ja=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),To=new Uint32Array(80),k2=class extends mo{constructor(){super(64,20,8,!1),this.A=ja[0]|0,this.B=ja[1]|0,this.C=ja[2]|0,this.D=ja[3]|0,this.E=ja[4]|0}get(){let{A:e,B:t,C:n,D:o,E:i}=this;return[e,t,n,o,i]}set(e,t,n,o,i){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0}process(e,t){for(let c=0;c<16;c++,t+=4)To[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)To[c]=Vl(To[c-3]^To[c-8]^To[c-14]^To[c-16],1);let{A:n,B:o,C:i,D:s,E:a}=this;for(let c=0;c<80;c++){let l,d;c<20?(l=Kl(o,i,s),d=1518500249):c<40?(l=o^i^s,d=1859775393):c<60?(l=Hl(o,i,s),d=2400959708):(l=o^i^s,d=3395469782);let u=Vl(n,5)+l+a+d+To[c]|0;a=s,s=i,i=Vl(o,30),o=n,n=u}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,this.set(n,o,i,s,a)}roundClean(){To.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},O8=ns(()=>new k2);var M8={sha1:O8,"sha2-256":Tr,"sha2-512":wo};function Za(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(M8).join(" / ");throw new C(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let i=M8[o],s=B8(i,r,e,{c:t,dkLen:n});return it.encode(s).substring(1)}var C2=64,Xr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>C2)throw new TypeError("Invalid Fingerprint Size");let i=t.hashV(e,n),s=se(o);for(let a=0;a<s.length;a++)s[a]=i[a];s.length===0&&(s[0]=7),this.fp=s,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?te(this.fp,e.fp):!1}};function pi(r,e){return Math.floor(Math.random()*(e-r))+r}var mi=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Xr))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Xr))throw new TypeError("Invalid Fingerprint");for(let t=0;t<this.contents.length;t++)if(this.contents[t]==null)return this.contents[t]=e,!0;return!0}swap(e){if(!(e instanceof Xr))throw new TypeError("Invalid Fingerprint");let t=pi(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Xr))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var P2={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},V8={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},K8=new globalThis.TextEncoder;function $S(r,e){let t=P2[e],n=V8[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function VS(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=P2[e],o=V8[e],i=r;for(;i.length>0;){let s=K8.encodeInto(i,t);i=i.slice(s.read);for(let a=0;a<s.written;a++)o^=BigInt(t[a]),o=BigInt.asUintN(e,o*n)}return o}function R2(r,{size:e=32,utf8Buffer:t}={}){if(!P2[e])throw new Error("The `size` option must be one of 32, 64, 128, 256, 512, or 1024");if(typeof r=="string"){if(t)return VS(r,e,t);r=K8.encode(r)}return $S(r,e)}var KS=fr($8(),1);var ec={hash:r=>Number(R2(r,{size:32})),hashV:(r,e)=>HS(ec.hash(r,e))};function HS(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),M(e,"base16")}var qS=500,tc=class{bucketSize;filterSize;fingerprintSize;buckets;count;hash;seed;constructor(e){this.filterSize=e.filterSize,this.bucketSize=e.bucketSize??4,this.fingerprintSize=e.fingerprintSize??2,this.count=0,this.buckets=[],this.hash=e.hash??ec,this.seed=e.seed??pi(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=M(e));let t=new Xr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=(n^t.hash())%this.filterSize;if(this.buckets[n]==null&&(this.buckets[n]=new mi(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new mi(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let i=[n,o],s=i[pi(0,i.length-1)];this.buckets[s]==null&&(this.buckets[s]=new mi(this.bucketSize));for(let a=0;a<qS;a++){let c=this.buckets[s].swap(t);if(c!=null&&(s=(s^c.hash())%this.filterSize,this.buckets[s]==null&&(this.buckets[s]=new mi(this.bucketSize)),this.buckets[s].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=M(e));let t=new Xr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.has(t)??!1;if(o)return o;let i=(n^t.hash())%this.filterSize;return this.buckets[i]?.has(t)??!1}remove(e){typeof e=="string"&&(e=M(e));let t=new Xr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.remove(t)??!1;if(o)return this.count--,o;let i=(n^t.hash())%this.filterSize,s=this.buckets[i]?.remove(t)??!1;return s&&this.count--,s}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},WS={1:.5,2:.84,4:.95,8:.98};function zS(r=.001){return r>.002?2:r>1e-5?4:8}function H8(r,e=.001){let t=zS(e),n=WS[t],o=Math.round(r/n),i=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),C2);return{filterSize:o,bucketSize:t,fingerprintSize:i}}var Qu=class{filterSize;bucketSize;fingerprintSize;scale;filterSeries;hash;seed;constructor(e){this.bucketSize=e.bucketSize??4,this.filterSize=e.filterSize??(1<<18)/this.bucketSize,this.fingerprintSize=e.fingerprintSize??2,this.scale=e.scale??2,this.hash=e.hash??ec,this.seed=e.seed??pi(0,Math.pow(2,10)),this.filterSeries=[new tc({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=M(e)),this.has(e))return!0;let t=this.filterSeries.find(n=>n.reliable);if(t==null){let n=this.filterSize*Math.pow(this.scale,this.filterSeries.length);t=new tc({filterSize:n,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed}),this.filterSeries.push(t)}return t.add(e)}has(e){typeof e=="string"&&(e=M(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].has(e))return!0;return!1}remove(e){typeof e=="string"&&(e=M(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].remove(e))return!0;return!1}get count(){return this.filterSeries.reduce((e,t)=>e+t.count,0)}};function Sn(r,e=.001,t){return new Qu({...H8(r,e),...t??{}})}var Yu=class{filter;constructor(e,t){this.filter=Sn(e,t)}has(e){return this.filter.has(e.toMultihash().bytes)}add(e){this.filter.add(e.toMultihash().bytes)}remove(e){this.filter.remove?.(e.toMultihash().bytes)}};function L2(r,e=.001){return new Yu(r,e)}var D2=class extends gt{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function rc(r){let{name:e,metrics:t}=r,n;return t!=null?n=new D2({name:e,metrics:t}):n=new gt,n}var Yn=class{full;pendingBytes;wantlist;blocks;blockPresences;constructor(e=!1,t=0){this.full=e,this.wantlist=new Map,this.blocks=new Map,this.blockPresences=new Map,this.pendingBytes=0}addWantlistEntry(e,t){let n=it.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=it.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=it.encode(e.multihash.bytes);this.blocks.set(n,t)}};function GS(r){let e=new Uint8Array(r.reduce((n,o)=>n+pe(o),0)),t=0;for(let n of r)e=Ke(n,e,t),t+=pe(n);return e}var q8=GS;function N2(r){return q8([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var Xu=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;constructor(e,t){this.peerId=e.peerId,this.blockstore=e.blockstore,this.network=e.network,this.wants=new Map,this.log=e.logger.forComponent(`helia:bitswap:ledger:${e.peerId}`),this.exchangeCount=0,this.bytesSent=0,this.bytesReceived=0,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock??1024}sentBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesSent+=e}receivedBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesReceived+=e}debtRatio(){return this.bytesSent/(this.bytesReceived+1)}async sendBlocksToPeer(e){let t=new Yn,n=new Set;for(let[o,i]of this.wants.entries())try{let s=await this.blockstore.get(i.cid,e);i.wantType===et.WantHave?s.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:N2(i.cid)})):(this.log("sending have for %c",i.cid),t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Ir.HaveBlock})):(this.log("sending block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:N2(i.cid)}))}catch(s){if(s.name!=="NotFoundError")throw s;if(this.log("do not have block for %c",i.cid),!i.sendDontHave||i.sentDontHave===!0)continue;i.sentDontHave=!0,t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Ir.DontHaveBlock})}if(t.blocks.size>0||t.blockPresences.size>0){this.log("sending message"),await this.network.sendMessage(this.peerId,t,e),this.log("sent message"),this.sentBytes([...t.blocks.values()].reduce((o,i)=>o+i.data.byteLength,0));for(let o of n)this.wants.delete(o)}}};var ju=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=rc({name:"helia_bitswap_ledger_map",metrics:e.metrics}),this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}ledgerForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return{peer:t.peerId,value:t.debtRatio(),sent:t.bytesSent,received:t.bytesReceived,exchanged:t.exchangeCount}}wantListForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return[...t.wants.values()]}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);if(n==null&&(n=new Xu({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,i)=>o+i.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let o of t.wantlist.entries){let i=X.decode(o.cid),s=V(i.multihash.bytes,"base64");o.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,i),n.wants.delete(s)):(o.wantType===et.WantHave?this.log("peer %p wanted block presence for %c",e,i):this.log("peer %p wanted block for %c",e,i),n.wants.set(s,{cid:i,priority:o.priority,wantType:o.wantType??et.WantBlock,sendDontHave:o.sendDontHave??!1}))}}this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=V(e.multihash.bytes,"base64"),o=[];for(let i of this.ledgerMap.values())i.wants.has(n)&&o.push(i);await Promise.all(o.map(async i=>i.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};function QS(r,e){try{if(typeof r=="string"&&r.length>0)return YS(r);if(typeof r=="number"&&isFinite(r))return e?.long?jS(r):XS(r);throw new Error("Value is not a string or number.")}catch(t){let n=ZS(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function YS(r){if(r=String(r),r.length>100)throw new Error("Value exceeds the maximum length of 100 characters.");let e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(!e)return NaN;let t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*315576e5;case"weeks":case"week":case"w":return t*6048e5;case"days":case"day":case"d":return t*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return t*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return t*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return t*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:throw new Error(`The unit ${n} was matched, but no matching case exists.`)}}var Ju=QS;function XS(r){let e=Math.abs(r);return e>=864e5?`${Math.round(r/864e5)}d`:e>=36e5?`${Math.round(r/36e5)}h`:e>=6e4?`${Math.round(r/6e4)}m`:e>=1e3?`${Math.round(r/1e3)}s`:`${r}ms`}function jS(r){let e=Math.abs(r);return e>=864e5?Zu(r,e,864e5,"day"):e>=36e5?Zu(r,e,36e5,"hour"):e>=6e4?Zu(r,e,6e4,"minute"):e>=1e3?Zu(r,e,1e3,"second"):`${r} ms`}function Zu(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function ZS(r){return typeof r=="object"&&r!==null&&"message"in r}function B2(r){t.debug=t,t.default=t,t.coerce=c,t.disable=i,t.enable=o,t.enabled=s,t.humanize=Ju,t.destroy=l,Object.keys(r).forEach(d=>{t[d]=r[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let u=0;for(let f=0;f<d.length;f++)u=(u<<5)-u+d.charCodeAt(f),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(d){let u,f=null,h,p;function m(...g){if(!m.enabled)return;let y=m,b=Number(new Date),w=b-(u||b);y.diff=w,y.prev=u,y.curr=b,u=b,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let x=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(k,v)=>{if(k==="%%")return"%";x++;let S=t.formatters[v];if(typeof S=="function"){let _=g[x];k=S.call(y,_),g.splice(x,1),x--}return k}),t.formatArgs.call(y,g),(y.log||t.log).apply(y,g)}return m.namespace=d,m.useColors=t.useColors(),m.color=t.selectColor(d),m.extend=n,m.destroy=t.destroy,Object.defineProperty(m,"enabled",{enumerable:!0,configurable:!1,get:()=>f!==null?f:(h!==t.namespaces&&(h=t.namespaces,p=t.enabled(d)),p),set:g=>{f=g}}),typeof t.init=="function"&&t.init(m),m}function n(d,u){let f=t(this.namespace+(typeof u>"u"?":":u)+d);return f.log=this.log,f}function o(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let u,f=(typeof d=="string"?d:"").split(/[\s,]+/),h=f.length;for(u=0;u<h;u++)f[u]&&(d=f[u].replace(/\*/g,".*?"),d[0]==="-"?t.skips.push(new RegExp("^"+d.substr(1)+"$")):t.names.push(new RegExp("^"+d+"$")))}function i(){let d=[...t.names.map(a),...t.skips.map(a).map(u=>"-"+u)].join(",");return t.enable(""),d}function s(d){if(d[d.length-1]==="*")return!0;let u,f;for(u=0,f=t.skips.length;u<f;u++)if(t.skips[u].test(d))return!1;for(u=0,f=t.names.length;u<f;u++)if(t.names[u].test(d))return!0;return!1}function a(d){return d.toString().substring(2,d.toString().length-2).replace(/\.\*\?$/,"*")}function c(d){return d instanceof Error?d.stack??d.message:d}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.setupFormatters(t.formatters),t.enable(t.load()),t}var e1=iA(),JS=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function eA(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/(edge|trident)\/(\d+)/)!=null?!1:typeof document<"u"&&document.documentElement?.style?.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/firefox\/(\d+)/)!=null&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/applewebkit\/(\d+)/)}function tA(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Ju(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,n=0;r[0].replace(/%[a-zA-Z%]/g,o=>{o!=="%%"&&(t++,o==="%c"&&(n=t))}),r.splice(n,0,e)}var rA=console.debug??console.log??(()=>{});function nA(r){try{r?e1?.setItem("debug",r):e1?.removeItem("debug")}catch{}}function oA(){let r;try{r=e1?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function iA(){try{return localStorage}catch{}}function sA(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var W8=B2({formatArgs:tA,save:nA,load:oA,useColors:eA,setupFormatters:sA,colors:JS,storage:e1,log:rA});var or=W8;or.formatters.b=r=>r==null?"undefined":Se.baseEncode(r);or.formatters.t=r=>r==null?"undefined":lt.baseEncode(r);or.formatters.m=r=>r==null?"undefined":it.baseEncode(r);or.formatters.p=r=>r==null?"undefined":r.toString();or.formatters.c=r=>r==null?"undefined":r.toString();or.formatters.k=r=>r==null?"undefined":r.toString();or.formatters.a=r=>r==null?"undefined":r.toString();or.formatters.e=r=>r==null?"undefined":z8(r.stack)??z8(r.message)??r.toString();function aA(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e}function ko(){return{forComponent(r){return mr(r)}}}function mr(r){let e=aA(`${r}:trace`);return or.enabled(`${r}:trace`)&&or.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=or(`${r}:trace`)),Object.assign(or(r),{error:or(`${r}:error`),trace:e})}function z8(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var M2=fr(Q8(),1);var oc=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},U2=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},Y8=r=>globalThis.DOMException===void 0?new U2(r):new DOMException(r),X8=r=>{let e=r.reason===void 0?Y8("This operation was aborted."):r.reason;return e instanceof Error?e:Y8(e)};function jr(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,c=new Promise((l,d)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:f}=e;f.aborted&&d(X8(f));let h=()=>{d(X8(f))};f.addEventListener("abort",h,{once:!0}),r.finally(()=>{f.removeEventListener("abort",h)})}if(t===Number.POSITIVE_INFINITY){r.then(l,d);return}let u=new oc;s=i.setTimeout.call(void 0,()=>{if(n){try{l(n())}catch(f){d(f)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?l():o instanceof Error?d(o):(u.message=o??`Promise timed out after ${t} milliseconds`,d(u))},t),(async()=>{try{l(await r)}catch(f){d(f)}})()}).finally(()=>{c.clear()});return c.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},c}function F2(r,e,t){let n=0,o=r.length;for(;o>0;){let i=Math.trunc(o/2),s=n+i;t(r[s],e)<=0?(n=++s,o-=i+1):o=i}return n}var ic=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,run:e};if(this.size&&this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=F2(this.#e,n,(i,s)=>s.priority-i.priority);this.#e.splice(o,0,n)}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var An=class extends M2.default{#e;#t;#r=0;#o;#a;#l=0;#i;#u;#n;#m;#s=0;#d;#c;#g;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:ic,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#o=e.intervalCap,this.#a=e.interval,this.#n=new e.queueClass,this.#m=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#g=e.throwOnTimeout===!0,this.#c=e.autoStart===!1}get#b(){return this.#t||this.#r<this.#o}get#x(){return this.#s<this.#d}#E(){this.#s--,this.#f(),this.emit("next")}#v(){this.#w(),this.#y(),this.#u=void 0}get#S(){let e=Date.now();if(this.#i===void 0){let t=this.#l-e;if(t<0)this.#r=this.#e?this.#s:0;else return this.#u===void 0&&(this.#u=setTimeout(()=>{this.#v()},t)),!0}return!1}#f(){if(this.#n.size===0)return this.#i&&clearInterval(this.#i),this.#i=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#c){let e=!this.#S;if(this.#b&&this.#x){let t=this.#n.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#t||this.#i!==void 0||(this.#i=setInterval(()=>{this.#w()},this.#a),this.#l=Date.now()+this.#a)}#w(){this.#r===0&&this.#s===0&&this.#i&&(clearInterval(this.#i),this.#i=void 0),this.#r=this.#e?this.#s:0,this.#h()}#h(){for(;this.#f(););}get concurrency(){return this.#d}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#d=e,this.#h()}async#A(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}async add(e,t={}){return t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#n.enqueue(async()=>{this.#s++,this.#r++;try{t.signal?.throwIfAborted();let i=e({signal:t.signal});t.timeout&&(i=jr(Promise.resolve(i),{milliseconds:t.timeout})),t.signal&&(i=Promise.race([i,this.#A(t.signal)]));let s=await i;n(s),this.emit("completed",s)}catch(i){if(i instanceof oc&&!t.throwOnTimeout){n();return}o(i),this.emit("error",i)}finally{this.#E()}},t),this.emit("add"),this.#f()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#c?(this.#c=!1,this.#h(),this):this}pause(){this.#c=!0}clear(){this.#n=new this.#m}async onEmpty(){this.#n.size!==0&&await this.#p("empty")}async onSizeLessThan(e){this.#n.size<e||await this.#p("next",()=>this.#n.size<e)}async onIdle(){this.#s===0&&this.#n.size===0||await this.#p("idle")}async#p(e,t){return new Promise(n=>{let o=()=>{t&&!t()||(this.off(e,o),n())};this.on(e,o)})}get size(){return this.#n.size}sizeBy(e){return this.#n.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#c}};function r1(r){let e=[gr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var $2=60;function n1(r){return{Status:r.Status??0,TC:r.TC??r.flag_tc??!1,RD:r.RD??r.flag_rd??!1,RA:r.RA??r.flag_ra??!1,AD:r.AD??r.flag_ad??!1,CD:r.CD??r.flag_cd??!1,Question:(r.Question??r.questions??[]).map(e=>({name:e.name,type:gr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:gr[e.type],TTL:e.TTL??e.ttl??$2,data:e.data instanceof Uint8Array?V(e.data):e.data}))}}var uA=4;function V2(r,e={}){let t=new An({concurrency:e.queryConcurrency??uA});return async(n,o={})=>{let i=new URLSearchParams;i.set("name",n),r1(o.types).forEach(a=>{i.append("type",gr[a])}),o.onProgress?.(new H("dns:query",{detail:n}));let s=await t.add(async()=>{let a=await fetch(`${r}?${i}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=n1(await a.json());return o.onProgress?.(new H("dns:response",{detail:c})),c},{signal:o.signal});if(s==null)throw new Error("No DNS response received");return s}}function j8(){return[V2("https://cloudflare-dns.com/dns-query"),V2("https://dns.google/resolve")]}var e5=fr(J8(),1);var K2=class{lru;constructor(e){this.lru=(0,e5.default)(e)}get(e,t){let n=!0,o=[];for(let i of t){let s=this.getAnswers(e,i);if(s.length===0){n=!1;break}o.push(...s)}if(n)return n1({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let i=o.filter(s=>s.expires>Date.now()).map(({expires:s,value:a})=>({...a,TTL:Math.round((s-Date.now())/1e3),type:gr[a.type]}));return i.length===0&&this.lru.remove(n),i}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??$2)*1e3,value:t}),this.lru.set(n,o)}remove(e,t){let n=`${e.toLowerCase()}-${t}`;this.lru.remove(n)}clear(){this.lru.clear()}};function t5(r){return new K2(r)}var dA=1e3,o1=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=t5(e.cacheSize??dA),Object.entries(e.resolvers??{}).forEach(([t,n])=>{Array.isArray(n)||(n=[n]),t.endsWith(".")||(t=`${t}.`),this.resolvers[t]=n}),this.resolvers["."]==null&&(this.resolvers["."]=j8())}async query(e,t={}){let n=r1(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new H("dns:cache",{detail:o})),o;let i=`${e.split(".").pop()}.`,s=(this.resolvers[i]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of s){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,types:n});for(let d of l.Answer)this.cache.add(e,d);return l}catch(l){a.push(l),t.onProgress?.(new H("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var gr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(gr||(gr={}));function i1(r={}){return new o1(r)}var fA=["string","number","bigint","symbol"],hA=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function r5(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(fA.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(pA(r))return"Buffer";let t=mA(r);return t||"Object"}function pA(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function mA(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(hA.includes(e))return e}var E=class{constructor(e,t,n){this.major=e,this.majorEncoded=e<<5,this.name=t,this.terminal=n}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};E.uint=new E(0,"uint",!0);E.negint=new E(1,"negint",!0);E.bytes=new E(2,"bytes",!0);E.string=new E(3,"string",!0);E.array=new E(4,"array",!1);E.map=new E(5,"map",!1);E.tag=new E(6,"tag",!1);E.float=new E(7,"float",!0);E.false=new E(7,"false",!0);E.true=new E(7,"true",!0);E.null=new E(7,"null",!0);E.undefined=new E(7,"undefined",!0);E.break=new E(7,"break",!0);var U=class{constructor(e,t,n){this.type=e,this.value=t,this.encodedLength=n,this.encodedBytes=void 0,this.byteValue=void 0}toString(){return`Token[${this.type}].${this.value}`}};var ps=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",gA=new TextDecoder,yA=new TextEncoder;function s1(r){return ps&&globalThis.Buffer.isBuffer(r)}function sc(r){return r instanceof Uint8Array?s1(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var s5=ps?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):o5(r,e,t):(r,e,t)=>t-e>64?gA.decode(r.subarray(e,t)):o5(r,e,t),a1=ps?r=>r.length>64?globalThis.Buffer.from(r):n5(r):r=>r.length>64?yA.encode(r):n5(r),In=r=>Uint8Array.from(r),ms=ps?(r,e,t)=>s1(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),a5=ps?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),sc(globalThis.Buffer.concat(r,e))):(r,e)=>{let t=new Uint8Array(e),n=0;for(let o of r)n+o.length>t.length&&(o=o.subarray(0,t.length-n)),t.set(o,n),n+=o.length;return t},c5=ps?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function l5(r,e){if(s1(r)&&s1(e))return r.compare(e);for(let t=0;t<r.length;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}function n5(r){let e=[],t=0;for(let n=0;n<r.length;n++){let o=r.charCodeAt(n);o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&n+1<r.length&&(r.charCodeAt(n+1)&64512)===56320?(o=65536+((o&1023)<<10)+(r.charCodeAt(++n)&1023),e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}function o5(r,e,t){let n=[];for(;e<t;){let o=r[e],i=null,s=o>239?4:o>223?3:o>191?2:1;if(e+s<=t){let a,c,l,d;switch(s){case 1:o<128&&(i=o);break;case 2:a=r[e+1],(a&192)===128&&(d=(o&31)<<6|a&63,d>127&&(i=d));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(d=(o&15)<<12|(a&63)<<6|c&63,d>2047&&(d<55296||d>57343)&&(i=d));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(d=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,d>65535&&d<1114112&&(i=d))}}i===null?(i=65533,s=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|i&1023),n.push(i),e+=s}return H2(n)}var i5=4096;function H2(r){let e=r.length;if(e<=i5)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=i5));return t}var wA=256,ac=class{constructor(e=wA){this.chunkSize=e,this.cursor=0,this.maxCursor=-1,this.chunks=[],this._initReuseChunk=null}reset(){this.cursor=0,this.maxCursor=-1,this.chunks.length&&(this.chunks=[]),this._initReuseChunk!==null&&(this.chunks.push(this._initReuseChunk),this.maxCursor=this._initReuseChunk.length-1)}push(e){let t=this.chunks[this.chunks.length-1];if(this.cursor+e.length<=this.maxCursor+1){let o=t.length-(this.maxCursor-this.cursor)-1;t.set(e,o)}else{if(t){let o=t.length-(this.maxCursor-this.cursor)-1;o<t.length&&(this.chunks[this.chunks.length-1]=t.subarray(0,o),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(t=c5(this.chunkSize),this.chunks.push(t),this.maxCursor+=t.length,this._initReuseChunk===null&&(this._initReuseChunk=t),t.set(e,0)):(this.chunks.push(e),this.maxCursor+=e.length)}this.cursor+=e.length}toBytes(e=!1){let t;if(this.chunks.length===1){let n=this.chunks[0];e&&this.cursor>n.length/2?(t=this.cursor===n.length?n:n.subarray(0,this.cursor),this._initReuseChunk=null,this.chunks=[]):t=ms(n,0,this.cursor)}else t=a5(this.chunks,this.cursor);return e&&this.reset(),t}};var j="CBOR decode error:",Xn="CBOR encode error:",cc=[];cc[23]=1;cc[24]=2;cc[25]=3;cc[26]=5;cc[27]=9;function jn(r,e,t){if(r.length-e<t)throw new Error(`${j} not enough data for type`)}var yt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function yr(r,e,t){jn(r,e,1);let n=r[e];if(t.strict===!0&&n<yt[0])throw new Error(`${j} integer encoded in more bytes than necessary (strict decode)`);return n}function wr(r,e,t){jn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<yt[1])throw new Error(`${j} integer encoded in more bytes than necessary (strict decode)`);return n}function br(r,e,t){jn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<yt[2])throw new Error(`${j} integer encoded in more bytes than necessary (strict decode)`);return n}function xr(r,e,t){jn(r,e,8);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3],o=r[e+4]*16777216+(r[e+5]<<16)+(r[e+6]<<8)+r[e+7],i=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&i<yt[3])throw new Error(`${j} integer encoded in more bytes than necessary (strict decode)`);if(i<=Number.MAX_SAFE_INTEGER)return Number(i);if(t.allowBigInt===!0)return i;throw new Error(`${j} integers outside of the safe integer range are not supported`)}function u5(r,e,t,n){return new U(E.uint,yr(r,e+1,n),2)}function d5(r,e,t,n){return new U(E.uint,wr(r,e+1,n),3)}function f5(r,e,t,n){return new U(E.uint,br(r,e+1,n),5)}function h5(r,e,t,n){return new U(E.uint,xr(r,e+1,n),9)}function Rr(r,e){return Et(r,0,e.value)}function Et(r,e,t){if(t<yt[0]){let n=Number(t);r.push([e|n])}else if(t<yt[1]){let n=Number(t);r.push([e|24,n])}else if(t<yt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<yt[3]){let n=Number(t);r.push([e|26,n>>>24&255,n>>>16&255,n>>>8&255,n&255])}else{let n=BigInt(t);if(n<yt[4]){let o=[e|27,0,0,0,0,0,0,0],i=Number(n&BigInt(4294967295)),s=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=i&255,i=i>>8,o[7]=i&255,i=i>>8,o[6]=i&255,i=i>>8,o[5]=i&255,o[4]=s&255,s=s>>8,o[3]=s&255,s=s>>8,o[2]=s&255,s=s>>8,o[1]=s&255,r.push(o)}else throw new Error(`${j} encountered BigInt larger than allowable range`)}}Rr.encodedSize=function(e){return Et.encodedSize(e.value)};Et.encodedSize=function(e){return e<yt[0]?1:e<yt[1]?2:e<yt[2]?3:e<yt[3]?5:9};Rr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function p5(r,e,t,n){return new U(E.negint,-1-yr(r,e+1,n),2)}function m5(r,e,t,n){return new U(E.negint,-1-wr(r,e+1,n),3)}function g5(r,e,t,n){return new U(E.negint,-1-br(r,e+1,n),5)}var q2=BigInt(-1),y5=BigInt(1);function w5(r,e,t,n){let o=xr(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new U(E.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${j} integers outside of the safe integer range are not supported`);return new U(E.negint,q2-BigInt(o),9)}function c1(r,e){let t=e.value,n=typeof t=="bigint"?t*q2-y5:t*-1-1;Et(r,e.type.majorEncoded,n)}c1.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*q2-y5:t*-1-1;return n<yt[0]?1:n<yt[1]?2:n<yt[2]?3:n<yt[3]?5:9};c1.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function lc(r,e,t,n){jn(r,e,t+n);let o=ms(r,e+t,e+t+n);return new U(E.bytes,o,t+n)}function b5(r,e,t,n){return lc(r,e,1,t)}function x5(r,e,t,n){return lc(r,e,2,yr(r,e+1,n))}function E5(r,e,t,n){return lc(r,e,3,wr(r,e+1,n))}function v5(r,e,t,n){return lc(r,e,5,br(r,e+1,n))}function S5(r,e,t,n){let o=xr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${j} 64-bit integer bytes lengths not supported`);return lc(r,e,9,o)}function l1(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===E.string?a1(r.value):r.value),r.encodedBytes}function gs(r,e){let t=l1(e);Et(r,e.type.majorEncoded,t.length),r.push(t)}gs.encodedSize=function(e){let t=l1(e);return Et.encodedSize(t.length)+t.length};gs.compareTokens=function(e,t){return xA(l1(e),l1(t))};function xA(r,e){return r.length<e.length?-1:r.length>e.length?1:l5(r,e)}function uc(r,e,t,n,o){let i=t+n;jn(r,e,i);let s=new U(E.string,s5(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=ms(r,e+t,e+i)),s}function A5(r,e,t,n){return uc(r,e,1,t,n)}function I5(r,e,t,n){return uc(r,e,2,yr(r,e+1,n),n)}function _5(r,e,t,n){return uc(r,e,3,wr(r,e+1,n),n)}function T5(r,e,t,n){return uc(r,e,5,br(r,e+1,n),n)}function k5(r,e,t,n){let o=xr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${j} 64-bit integer string lengths not supported`);return uc(r,e,9,o,n)}var C5=gs;function ys(r,e,t,n){return new U(E.array,n,t)}function P5(r,e,t,n){return ys(r,e,1,t)}function R5(r,e,t,n){return ys(r,e,2,yr(r,e+1,n))}function L5(r,e,t,n){return ys(r,e,3,wr(r,e+1,n))}function D5(r,e,t,n){return ys(r,e,5,br(r,e+1,n))}function N5(r,e,t,n){let o=xr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${j} 64-bit integer array lengths not supported`);return ys(r,e,9,o)}function B5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${j} indefinite length items not allowed`);return ys(r,e,1,1/0)}function u1(r,e){Et(r,E.array.majorEncoded,e.value)}u1.compareTokens=Rr.compareTokens;u1.encodedSize=function(e){return Et.encodedSize(e.value)};function ws(r,e,t,n){return new U(E.map,n,t)}function O5(r,e,t,n){return ws(r,e,1,t)}function M5(r,e,t,n){return ws(r,e,2,yr(r,e+1,n))}function U5(r,e,t,n){return ws(r,e,3,wr(r,e+1,n))}function F5(r,e,t,n){return ws(r,e,5,br(r,e+1,n))}function $5(r,e,t,n){let o=xr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${j} 64-bit integer map lengths not supported`);return ws(r,e,9,o)}function V5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${j} indefinite length items not allowed`);return ws(r,e,1,1/0)}function d1(r,e){Et(r,E.map.majorEncoded,e.value)}d1.compareTokens=Rr.compareTokens;d1.encodedSize=function(e){return Et.encodedSize(e.value)};function K5(r,e,t,n){return new U(E.tag,t,1)}function H5(r,e,t,n){return new U(E.tag,yr(r,e+1,n),2)}function q5(r,e,t,n){return new U(E.tag,wr(r,e+1,n),3)}function W5(r,e,t,n){return new U(E.tag,br(r,e+1,n),5)}function z5(r,e,t,n){return new U(E.tag,xr(r,e+1,n),9)}function f1(r,e){Et(r,E.tag.majorEncoded,e.value)}f1.compareTokens=Rr.compareTokens;f1.encodedSize=function(e){return Et.encodedSize(e.value)};var _A=20,TA=21,kA=22,CA=23;function G5(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${j} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new U(E.null,null,1):new U(E.undefined,void 0,1)}function Q5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${j} indefinite length items not allowed`);return new U(E.break,void 0,1)}function W2(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${j} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${j} Infinity values are not supported`)}return new U(E.float,r,e)}function Y5(r,e,t,n){return W2(z2(r,e+1),3,n)}function X5(r,e,t,n){return W2(G2(r,e+1),5,n)}function j5(r,e,t,n){return W2(tg(r,e+1),9,n)}function h1(r,e,t){let n=e.value;if(n===!1)r.push([E.float.majorEncoded|_A]);else if(n===!0)r.push([E.float.majorEncoded|TA]);else if(n===null)r.push([E.float.majorEncoded|kA]);else if(n===void 0)r.push([E.float.majorEncoded|CA]);else{let o,i=!1;(!t||t.float64!==!0)&&(J5(n),o=z2(Zr,1),n===o||Number.isNaN(n)?(Zr[0]=249,r.push(Zr.slice(0,3)),i=!0):(eg(n),o=G2(Zr,1),n===o&&(Zr[0]=250,r.push(Zr.slice(0,5)),i=!0))),i||(PA(n),o=tg(Zr,1),Zr[0]=251,r.push(Zr.slice(0,9)))}}h1.encodedSize=function(e,t){let n=e.value;if(n===!1||n===!0||n===null||n===void 0)return 1;if(!t||t.float64!==!0){J5(n);let o=z2(Zr,1);if(n===o||Number.isNaN(n))return 3;if(eg(n),o=G2(Zr,1),n===o)return 5}return 9};var Z5=new ArrayBuffer(9),Lr=new DataView(Z5,1),Zr=new Uint8Array(Z5,0);function J5(r){if(r===1/0)Lr.setUint16(0,31744,!1);else if(r===-1/0)Lr.setUint16(0,64512,!1);else if(Number.isNaN(r))Lr.setUint16(0,32256,!1);else{Lr.setFloat32(0,r);let e=Lr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)Lr.setUint16(0,31744,!1);else if(t===0)Lr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?Lr.setUint16(0,0):o<-14?Lr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):Lr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function z2(r,e){if(r.length-e<2)throw new Error(`${j} not enough data for float16`);let t=(r[e]<<8)+r[e+1];if(t===31744)return 1/0;if(t===64512)return-1/0;if(t===32256)return NaN;let n=t>>10&31,o=t&1023,i;return n===0?i=o*2**-24:n!==31?i=(o+1024)*2**(n-25):i=o===0?1/0:NaN,t&32768?-i:i}function eg(r){Lr.setFloat32(0,r,!1)}function G2(r,e){if(r.length-e<4)throw new Error(`${j} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function PA(r){Lr.setFloat64(0,r,!1)}function tg(r,e){if(r.length-e<8)throw new Error(`${j} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}h1.compareTokens=Rr.compareTokens;function Ae(r,e,t){throw new Error(`${j} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function p1(r){return()=>{throw new Error(`${j} ${r}`)}}var K=[];for(let r=0;r<=23;r++)K[r]=Ae;K[24]=u5;K[25]=d5;K[26]=f5;K[27]=h5;K[28]=Ae;K[29]=Ae;K[30]=Ae;K[31]=Ae;for(let r=32;r<=55;r++)K[r]=Ae;K[56]=p5;K[57]=m5;K[58]=g5;K[59]=w5;K[60]=Ae;K[61]=Ae;K[62]=Ae;K[63]=Ae;for(let r=64;r<=87;r++)K[r]=b5;K[88]=x5;K[89]=E5;K[90]=v5;K[91]=S5;K[92]=Ae;K[93]=Ae;K[94]=Ae;K[95]=p1("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)K[r]=A5;K[120]=I5;K[121]=_5;K[122]=T5;K[123]=k5;K[124]=Ae;K[125]=Ae;K[126]=Ae;K[127]=p1("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)K[r]=P5;K[152]=R5;K[153]=L5;K[154]=D5;K[155]=N5;K[156]=Ae;K[157]=Ae;K[158]=Ae;K[159]=B5;for(let r=160;r<=183;r++)K[r]=O5;K[184]=M5;K[185]=U5;K[186]=F5;K[187]=$5;K[188]=Ae;K[189]=Ae;K[190]=Ae;K[191]=V5;for(let r=192;r<=215;r++)K[r]=K5;K[216]=H5;K[217]=q5;K[218]=W5;K[219]=z5;K[220]=Ae;K[221]=Ae;K[222]=Ae;K[223]=Ae;for(let r=224;r<=243;r++)K[r]=p1("simple values are not supported");K[244]=Ae;K[245]=Ae;K[246]=Ae;K[247]=G5;K[248]=p1("simple values are not supported");K[249]=Y5;K[250]=X5;K[251]=j5;K[252]=Ae;K[253]=Ae;K[254]=Ae;K[255]=Q5;var Jr=[];for(let r=0;r<24;r++)Jr[r]=new U(E.uint,r,1);for(let r=-1;r>=-24;r--)Jr[31-r]=new U(E.negint,r,1);Jr[64]=new U(E.bytes,new Uint8Array(0),1);Jr[96]=new U(E.string,"",1);Jr[128]=new U(E.array,0,1);Jr[160]=new U(E.map,0,1);Jr[244]=new U(E.false,!1,1);Jr[245]=new U(E.true,!0,1);Jr[246]=new U(E.null,null,1);function rg(r){switch(r.type){case E.false:return In([244]);case E.true:return In([245]);case E.null:return In([246]);case E.bytes:return r.value.length?void 0:In([64]);case E.string:return r.value===""?In([96]):void 0;case E.array:return r.value===0?In([128]):void 0;case E.map:return r.value===0?In([160]):void 0;case E.uint:return r.value<24?In([Number(r.value)]):void 0;case E.negint:if(r.value>=-24)return In([31-Number(r.value)])}}var LA={float64:!1,mapSorter:BA,quickEncodeToken:rg};function DA(){let r=[];return r[E.uint.major]=Rr,r[E.negint.major]=c1,r[E.bytes.major]=gs,r[E.string.major]=C5,r[E.array.major]=u1,r[E.map.major]=d1,r[E.tag.major]=f1,r[E.float.major]=h1,r}var ng=DA(),Q2=new ac,g1=class r{constructor(e,t){this.obj=e,this.parent=t}includes(e){let t=this;do if(t.obj===e)return!0;while(t=t.parent);return!1}static createCheck(e,t){if(e&&e.includes(t))throw new Error(`${Xn} object contains circular references`);return new r(t,e)}},Co={null:new U(E.null,null),undefined:new U(E.undefined,void 0),true:new U(E.true,!0),false:new U(E.false,!1),emptyArray:new U(E.array,0),emptyMap:new U(E.map,0)},Po={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new U(E.float,r):r>=0?new U(E.uint,r):new U(E.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new U(E.uint,r):new U(E.negint,r)},Uint8Array(r,e,t,n){return new U(E.bytes,r)},string(r,e,t,n){return new U(E.string,r)},boolean(r,e,t,n){return r?Co.true:Co.false},null(r,e,t,n){return Co.null},undefined(r,e,t,n){return Co.undefined},ArrayBuffer(r,e,t,n){return new U(E.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new U(E.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[Co.emptyArray,new U(E.break)]:Co.emptyArray;n=g1.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=m1(s,t,n);return t.addBreakTokens?[new U(E.array,r.length),o,new U(E.break)]:[new U(E.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",i=o?r.keys():Object.keys(r),s=o?r.size:i.length;if(!s)return t.addBreakTokens===!0?[Co.emptyMap,new U(E.break)]:Co.emptyMap;n=g1.createCheck(n,r);let a=[],c=0;for(let l of i)a[c++]=[m1(l,t,n),m1(o?r.get(l):r[l],t,n)];return NA(a,t),t.addBreakTokens?[new U(E.map,s),a,new U(E.break)]:[new U(E.map,s),a]}};Po.Map=Po.Object;Po.Buffer=Po.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))Po[`${r}Array`]=Po.DataView;function m1(r,e={},t){let n=r5(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||Po[n];if(typeof o=="function"){let s=o(r,n,e,t);if(s!=null)return s}let i=Po[n];if(!i)throw new Error(`${Xn} unsupported type: ${n}`);return i(r,n,e,t)}function NA(r,e){e.mapSorter&&r.sort(e.mapSorter)}function BA(r,e){let t=Array.isArray(r[0])?r[0][0]:r[0],n=Array.isArray(e[0])?e[0][0]:e[0];if(t.type!==n.type)return t.type.compare(n.type);let o=t.type.major,i=ng[o].compareTokens(t,n);return i===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),i}function og(r,e,t,n){if(Array.isArray(e))for(let o of e)og(r,o,t,n);else t[e.type.major](r,e,n)}function Y2(r,e,t){let n=m1(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let o=t.quickEncodeToken(n);if(o)return o;let i=e[n.type.major];if(i.encodedSize){let s=i.encodedSize(n,t),a=new ac(s);if(i(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return sc(a.chunks[0])}}return Q2.reset(),og(Q2,n,e,t),Q2.toBytes(!0)}function Ro(r,e){return e=Object.assign({},LA,e),Y2(r,ng,e)}var OA={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},y1=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t}pos(){return this._pos}done(){return this._pos>=this.data.length}next(){let e=this.data[this._pos],t=Jr[e];if(t===void 0){let n=K[e];if(!n)throw new Error(`${j} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,"0")})`);let o=e&31;t=n(this.data,this._pos,o,this.options)}return this._pos+=t.encodedLength,t}},dc=Symbol.for("DONE"),w1=Symbol.for("BREAK");function MA(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=bs(e,t);if(i===w1){if(r.value===1/0)break;throw new Error(`${j} got unexpected break to lengthed array`)}if(i===dc)throw new Error(`${j} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function UA(r,e,t){let n=t.useMaps===!0,o=n?void 0:{},i=n?new Map:void 0;for(let s=0;s<r.value;s++){let a=bs(e,t);if(a===w1){if(r.value===1/0)break;throw new Error(`${j} got unexpected break to lengthed map`)}if(a===dc)throw new Error(`${j} found map but not enough entries (got ${s} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${j} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&i.has(a)||!n&&a in o))throw new Error(`${j} found repeat map key "${a}"`);let c=bs(e,t);if(c===dc)throw new Error(`${j} found map but not enough entries (got ${s} [no value], expected ${r.value})`);n?i.set(a,c):o[a]=c}return n?i:o}function bs(r,e){if(r.done())return dc;let t=r.next();if(t.type===E.break)return w1;if(t.type.terminal)return t.value;if(t.type===E.array)return MA(t,r,e);if(t.type===E.map)return UA(t,r,e);if(t.type===E.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=bs(r,e);return e.tags[t.value](n)}throw new Error(`${j} tag not supported (${t.value})`)}throw new Error("unsupported")}function X2(r,e){if(!(r instanceof Uint8Array))throw new Error(`${j} data to decode must be a Uint8Array`);e=Object.assign({},OA,e);let t=e.tokenizer||new y1(r,e),n=bs(t,e);if(n===dc)throw new Error(`${j} did not find any content to decode`);if(n===w1)throw new Error(`${j} got unexpected break`);return[n,r.subarray(t.pos())]}function Er(r,e){let[t,n]=X2(r,e);if(n.length>0)throw new Error(`${j} too many terminals, data makes no sense`);return t}var Zn="/",ig=new TextEncoder().encode(Zn),b1=ig[0],De=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=M(e);else if(e instanceof Uint8Array)this._buf=e;else throw new Error("Invalid key, should be String of Uint8Array");if(t==null&&(t=!0),t&&this.clean(),this._buf.byteLength===0||this._buf[0]!==b1)throw new Error("Invalid key")}toString(e="utf8"){return V(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Zn))}static random(){return new r(Math.random().toString().substring(2))}static asKey(e){return e instanceof Uint8Array||typeof e=="string"?new r(e):typeof e.uint8Array=="function"?new r(e.uint8Array()):null}clean(){if((this._buf==null||this._buf.byteLength===0)&&(this._buf=ig),this._buf[0]!==b1){let e=new Uint8Array(this._buf.byteLength+1);e.fill(b1,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===b1;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let o=0;o<t.length;o++){if(n.length<o+1)return!1;let i=t[o],s=n[o];if(i<s)return!0;if(i>s)return!1}return t.length<n.length}reverse(){return r.withNamespaces(this.list().slice().reverse())}namespaces(){return this.list()}baseNamespace(){let e=this.namespaces();return e[e.length-1]}list(){return this.toString().split(Zn).slice(1)}type(){return FA(this.baseNamespace())}name(){return $A(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Zn)||(e+=Zn),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Zn):new r(e.slice(0,-1).join(Zn))}child(e){return this.toString()===Zn?e:e.toString()===Zn?this:new r(this.toString()+e.toString(),!1)}isAncestorOf(e){return e.toString()===this.toString()?!1:e.toString().startsWith(this.toString())}isDecendantOf(e){return e.toString()===this.toString()?!1:this.toString().startsWith(e.toString())}isTopLevel(){return this.list().length===1}concat(...e){return r.withNamespaces([...this.namespaces(),...VA(e.map(t=>t.namespaces()))])}};function FA(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function $A(r){let e=r.split(":");return e[e.length-1]}function VA(r){return[].concat(...r)}function x1({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*KA(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],i=X.asCID(n);i!=null?yield[o.join("/"),i]:typeof n=="object"&&(yield*Z2(n,o))}else{let t=X.asCID(e);t!=null?yield[r.join("/"),t]:yield*Z2(e,r)}}function*Z2(r,e){if(r==null||r instanceof Uint8Array)return;let t=X.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let i=[...e,n];yield*KA(i,o)}}function*HA(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&X.asCID(n)==null&&(yield*J2(n,o))}else yield*J2(e,r)}function*J2(r,e){if(!(r==null||typeof r!="object"))for(let[t,n]of Object.entries(r)){let o=[...e,t];yield o.join("/"),n!=null&&!(n instanceof Uint8Array)&&typeof n=="object"&&X.asCID(n)==null&&(yield*HA(o,n))}}function qA(r,e){let t=r;for(let[n,o]of e.entries()){if(t=t[o],t==null)throw new Error(`Object has no property at ${e.slice(0,n+1).map(s=>`[${JSON.stringify(s)}]`).join("")}`);let i=X.asCID(t);if(i!=null)return{value:i,remaining:e.slice(n+1).join("/")}}return{value:t}}var ep=class{cid;bytes;value;asBlock;constructor({cid:e,bytes:t,value:n}){if(e==null||t==null||typeof n>"u")throw new Error("Missing required argument");this.cid=e,this.bytes=t,this.value=n,this.asBlock=this,Object.defineProperties(this,{cid:x1(),bytes:x1(),value:x1(),asBlock:x1()})}links(){return Z2(this.value,[])}tree(){return J2(this.value,[])}get(e="/"){return qA(this.value,e.split("/").filter(Boolean))}};function sg({bytes:r,cid:e,value:t,codec:n}){let o=t!==void 0?t:n?.decode(r);if(o===void 0)throw new Error('Missing required argument, must either provide "value" or "codec"');return new ep({cid:e,bytes:r,value:o})}var lg="/pin/",ag="/pinned-block/",tp=mn,cg=1;function E1(r){return r.version===0&&(r=r.toV1()),new De(`${lg}${r.toString(tp)}`)}var v1=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=E1(e);if(await this.datastore.has(n))throw new Error("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new Error("Depth must be greater than or equal to 0");let i=new Mt({concurrency:cg});for await(let a of this.#e(e,i,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>te(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let s={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,Ro(s),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=await this.getCodec(e.code),i=await this.blockstore.get(e,n),s=sg({bytes:i,cid:e,codec:o});yield e;for await(let[,a]of s.links())yield*await t.add(async()=>this.#e(a,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new De(`${ag}${tp.encode(e.multihash.bytes)}`),i={pinCount:0,pinnedBy:[]};try{i=Er(await this.datastore.get(o,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(i)){if(i.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,Ro(i),n),n.onProgress?.(new H("helia:pin:add",e))}}async*rm(e,t={}){let n=E1(e),o=await this.datastore.get(n,t),i=Er(o);await this.datastore.delete(n,t);let s=new Mt({concurrency:cg});for await(let a of this.#e(e,s,{...t,depth:i.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>te(l,e.bytes)),!0),{...t,depth:i.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:lg+(e.cid!=null?`${e.cid.toString(mn)}`:"")},e)){let o=X.parse(t.toString().substring(5),mn),i=Er(n);yield{cid:o,...i}}}async isPinned(e,t={}){let n=new De(`${ag}${tp.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=E1(e),o=await this.datastore.get(n,t);return Er(o)}async setMetadata(e,t,n){let o=E1(e),i=await this.datastore.get(o,n),s=Er(i);s.metadata=t??{},await this.datastore.put(o,Ro(s),n)}};var rp=1,np=5;var fc=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Lo=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},hc=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},pc=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}};var WA=5,S1=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??WA}async start(){await wt(...this.routers)}async stop(){await Tt(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Lo("No content routers available");let n=new Ut({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let o of $t(n.toGenerator(),...xs(this.routers,"findProviders").map(i=>i.findProviders(e,t))))if(o!=null){if(o.multiaddrs.length===0){if(n.find(o.id)!=null)continue;n.add(async()=>{try{let i=await this.findPeer(o.id,t);return i.multiaddrs.length===0?null:i}catch(i){return this.log.error("could not load multiaddrs for peer %p",o.id,i),null}},{peerId:o.id,signal:t.signal}).catch(i=>{this.log.error("could not load multiaddrs for peer %p",o.id,i)})}yield o}}async provide(e,t={}){if(this.routers.length===0)throw new Lo("No content routers available");await Promise.all(xs(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async put(e,t,n){await Promise.all(xs(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(xs(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new Lo("No peer routers available");let n=this,o=$t(...xs(this.routers,"findPeer").map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i;throw new Oe("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Lo("No peer routers available");for await(let n of $t(...xs(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function xs(r,e){return r.filter(t=>t[e]!=null)}var Do={},Es=r=>{r.addEventListener("message",e=>{Es.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{Es.dispatchEvent("message",r,e)})};Es.addEventListener=(r,e)=>{Do[r]==null&&(Do[r]=[]),Do[r].push(e)};Es.removeEventListener=(r,e)=>{Do[r]!=null&&(Do[r]=Do[r].filter(t=>t===e))};Es.dispatchEvent=function(r,e,t){Do[r]!=null&&Do[r].forEach(n=>n(e,t))};var op=Es;var ip="lock:worker:request-read",sp="lock:worker:release-read",ap="lock:master:grant-read",cp="lock:worker:request-write",lp="lock:worker:release-write",up="lock:master:grant-write";var ug=(r=21)=>Math.random().toString().substring(2);var dg=(r,e,t,n,o)=>(i,s)=>{if(s.data.type!==t)return;let a={type:s.data.type,name:s.data.name,identifier:s.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{i.postMessage({type:o,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=d=>{if(d?.data==null)return;let u={type:d.data.type,name:d.data.name,identifier:d.data.identifier};u.type===n&&u.identifier===a.identifier&&(i.removeEventListener("message",l),c())};i.addEventListener("message",l)})}}}))},fg=(r,e,t,n)=>async()=>{let o=ug();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(i=>{let s=a=>{if(a?.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===o&&(globalThis.removeEventListener("message",s),i(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",s)})},zA={singleProcess:!1},hg=r=>{if(r=Object.assign({},zA,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return op.addEventListener("message",dg(t,"requestReadLock",ip,sp,ap)),op.addEventListener("message",dg(t,"requestWriteLock",cp,lp,up)),t}return{isWorker:!0,readLock:t=>fg(t,ip,ap,sp),writeLock:t=>fg(t,cp,up,lp)}};var yi={},No;async function dp(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>jr((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var GA=(r,e)=>{if(No.isWorker===!0)return{readLock:No.readLock(r,e),writeLock:No.writeLock(r,e)};let t=new An({concurrency:1}),n;return{async readLock(){if(n!=null)return dp(n,e);n=new An({concurrency:e.concurrency,autoStart:!1});let o=n,i=dp(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),i},async writeLock(){return n=null,dp(t,e)}}},QA={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function wi(r){let e=Object.assign({},QA,r);return No==null&&(No=hg(e),No.isWorker!==!0&&(No.addEventListener("requestReadLock",t=>{yi[t.data.name]!=null&&yi[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),No.addEventListener("requestWriteLock",async t=>{yi[t.data.name]!=null&&yi[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),yi[e.name]==null&&(yi[e.name]=GA(e.name,e)),yi[e.name]}var A1=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=wi({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await wt(this.child),this.started=!0}async stop(){await Tt(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){n?.signal?.throwIfAborted();let o=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{o()}}async*putMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new Error("CID was pinned");await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{let o=this;yield*this.child.deleteMany(async function*(){for await(let i of e){if(await o.pins.isPinned(i))throw new Error("CID was pinned");yield i}}(),t)}finally{n()}}async has(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){e?.signal?.throwIfAborted();let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}createSession(e,t){return t?.signal?.throwIfAborted(),this.child.createSession(e,t)}};var fp=new De("/version"),pg=1;async function mg(r){if(!await r.has(fp)){await r.put(fp,M(`${pg}`));return}let e=await r.get(fp),t=V(e);if(parseInt(t,10)!==pg)throw new Error("Unknown datastore version, a datastore migration may be required")}var mp={};Xe(mp,{code:()=>pp,decode:()=>nI,decodeOptions:()=>eI,encode:()=>rI,encodeOptions:()=>ZA,name:()=>tI,toByteView:()=>yg});var gg=42;function yg(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function YA(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=X.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new U(E.tag,gg),new U(E.bytes,t)]}function XA(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function jA(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var hp={float64:!0,typeEncoders:{Object:YA,undefined:XA,number:jA}},ZA={...hp,typeEncoders:{...hp.typeEncoders}};function JA(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return X.decode(r.subarray(1))}var I1={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};I1.tags[gg]=JA;var eI={...I1,tags:I1.tags.slice()},tI="dag-cbor",pp=113,rI=r=>Ro(r,hp),nI=r=>Er(yg(r),I1);var vp={};Xe(vp,{code:()=>Ep,decode:()=>bg,encode:()=>wg,format:()=>pI,name:()=>hI,parse:()=>gI,stringify:()=>pI});var gp=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===E.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===E.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[E.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i);e.push(o)}[E.negint.major](e,t){this[E.uint.major](e,t)}[E.bytes.major](e,t){throw new Error(`${Xn} unsupported type: Uint8Array`)}[E.string.major](e,t){this.prefix(e);let n=a1(JSON.stringify(t.value));e.push(n.length>32?sc(n):n)}[E.array.major](e,t){this.prefix(e),this.inRecursive.push({type:E.array,elements:0}),e.push([91])}[E.map.major](e,t){this.prefix(e),this.inRecursive.push({type:E.map,elements:0}),e.push([123])}[E.tag.major](e,t){}[E.float.major](e,t){if(t.type.name==="break"){let s=this.inRecursive.pop();if(s){if(s.type===E.array)e.push([93]);else if(s.type===E.map)e.push([125]);else throw new Error("Unexpected recursive type; this should not happen!");return}throw new Error("Unexpected break; this should not happen!")}if(t.value===void 0)throw new Error(`${Xn} unsupported type: undefined`);if(this.prefix(e),t.type.name==="true"){e.push([116,114,117,101]);return}else if(t.type.name==="false"){e.push([102,97,108,115,101]);return}else if(t.type.name==="null"){e.push([110,117,108,108]);return}let n=String(t.value),o=[],i=!1;for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s),!i&&(o[s]===46||o[s]===101||o[s]===69)&&(i=!0);i||(o.push(46),o.push(48)),e.push(o)}};function oI(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${Xn} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==E.string||n.type!==E.string)throw new Error(`${Xn} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${Xn} unexpected duplicate map keys, this is not supported`)}var iI={addBreakTokens:!0,mapSorter:oI};function yp(r,e){return e=Object.assign({},iI,e),Y2(r,new gp,e)}var vs=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t,this.modeStack=["value"],this.lastToken=""}pos(){return this._pos}done(){return this._pos>=this.data.length}ch(){return this.data[this._pos]}currentMode(){return this.modeStack[this.modeStack.length-1]}skipWhitespace(){let e=this.ch();for(;e===32||e===9||e===13||e===10;)e=this.data[++this._pos]}expect(e){if(this.data.length-this._pos<e.length)throw new Error(`${j} unexpected end of input at position ${this._pos}`);for(let t=0;t<e.length;t++)if(this.data[this._pos++]!==e[t])throw new Error(`${j} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...e)}'`)}parseNumber(){let e=this._pos,t=!1,n=!1,o=a=>{for(;!this.done();){let c=this.ch();if(a.includes(c))this._pos++;else break}};if(this.ch()===45&&(t=!0,this._pos++),this.ch()===48)if(this._pos++,this.ch()===46)this._pos++,n=!0;else return new U(E.uint,0,this._pos-e);if(o([48,49,50,51,52,53,54,55,56,57]),t&&this._pos===e+1)throw new Error(`${j} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${j} unexpected token at position ${this._pos}`);n=!0,this._pos++,o([48,49,50,51,52,53,54,55,56,57])}!this.done()&&(this.ch()===101||this.ch()===69)&&(n=!0,this._pos++,!this.done()&&(this.ch()===43||this.ch()===45)&&this._pos++,o([48,49,50,51,52,53,54,55,56,57]));let i=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),s=parseFloat(i);return n?new U(E.float,s,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(s)?new U(s>=0?E.uint:E.negint,s,this._pos-e):new U(s>=0?E.uint:E.negint,BigInt(i),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${j} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let i=this._pos,s=0;i<this.data.length&&s<65536;i++,s++){let a=this.data[i];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,i));return this._pos=i+1,new U(E.string,c,s)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${j} unexpected end of unicode escape sequence at position ${this._pos}`);let i=0;for(let s=0;s<4;s++){let a=this.ch();if(a>=48&&a<=57)a-=48;else if(a>=97&&a<=102)a=a-97+10;else if(a>=65&&a<=70)a=a-65+10;else throw new Error(`${j} unexpected unicode escape character at position ${this._pos}`);i=i*16+a,this._pos++}return i},o=()=>{let i=this.ch(),s=null,a=i>239?4:i>223?3:i>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${j} unexpected unicode sequence at position ${this._pos}`);let c,l,d,u;switch(a){case 1:i<128&&(s=i);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(u=(i&31)<<6|c&63,u>127&&(s=u));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(u=(i&15)<<12|(c&63)<<6|l&63,u>2047&&(u<55296||u>57343)&&(s=u));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],d=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(d&192)===128&&(u=(i&15)<<18|(c&63)<<12|(l&63)<<6|d&63,u>65535&&u<1114112&&(s=u))}s===null?(s=65533,a=1):s>65535&&(s-=65536,t.push(s>>>10&1023|55296),s=56320|s&1023),t.push(s),this._pos+=a};for(;!this.done();){let i=this.ch(),s;switch(i){case 92:if(this._pos++,this.done())throw new Error(`${j} unexpected string termination at position ${this._pos}`);switch(s=this.ch(),this._pos++,s){case 34:case 39:case 92:case 47:t.push(s);break;case 98:t.push(8);break;case 116:t.push(9);break;case 110:t.push(10);break;case 102:t.push(12);break;case 114:t.push(13);break;case 117:t.push(n());break;default:throw new Error(`${j} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new U(E.string,H2(t),this._pos-e);default:if(i<32)throw new Error(`${j} invalid control character at position ${this._pos}`);i<128?(t.push(i),this._pos++):o()}}throw new Error(`${j} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new U(E.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new U(E.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new U(E.null,null,4);case 102:return this.expect([102,97,108,115,101]),new U(E.false,!1,5);case 116:return this.expect([116,114,117,101]),new U(E.true,!0,4);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.parseNumber();default:throw new Error(`${j} unexpected character at position ${this._pos}`)}}next(){switch(this.skipWhitespace(),this.currentMode()){case"value":return this.modeStack.pop(),this.parseValue();case"array-value":{if(this.modeStack.pop(),this.ch()===93)return this._pos++,this.skipWhitespace(),new U(E.break,void 0,1);if(this.ch()!==44)throw new Error(`${j} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue()}case"array-start":return this.modeStack.pop(),this.ch()===93?(this._pos++,this.skipWhitespace(),new U(E.break,void 0,1)):(this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue());case"obj-key":if(this.ch()===125)return this.modeStack.pop(),this._pos++,this.skipWhitespace(),new U(E.break,void 0,1);if(this.ch()!==44)throw new Error(`${j} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`);this._pos++,this.skipWhitespace();case"obj-start":{if(this.modeStack.pop(),this.ch()===125)return this._pos++,this.skipWhitespace(),new U(E.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${j} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("obj-value"),e}case"obj-value":return this.modeStack.pop(),this.modeStack.push("obj-key"),this.skipWhitespace(),this.parseValue();default:throw new Error(`${j} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function wp(r,e){return e=Object.assign({tokenizer:new vs(r,e)},e),Er(r,e)}function aI(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function cI(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=X.asCID(r);if(!e)return null;let t=e.toString();return[new U(E.map,1/0,1),new U(E.string,"/",1),new U(E.string,t,t.length),new U(E.break,void 0,1)]}function _1(r){let e=it.encode(r).slice(1);return[new U(E.map,1/0,1),new U(E.string,"/",1),new U(E.map,1/0,1),new U(E.string,"bytes",5),new U(E.string,e,e.length),new U(E.break,void 0,1),new U(E.break,void 0,1)]}function en(r){return _1(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function lI(r){return _1(new Uint8Array(r))}function uI(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function dI(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var fI={typeEncoders:{Object:cI,Buffer:_1,Uint8Array:_1,Int8Array:en,Uint16Array:en,Int16Array:en,Uint32Array:en,Int32Array:en,Float32Array:en,Float64Array:en,Uint8ClampedArray:en,BigInt64Array:en,BigUint64Array:en,DataView:en,ArrayBuffer:lI,undefined:uI,number:dI}},bp=class extends vs{constructor(e,t){super(e,t),this.tokenBuffer=[]}done(){return this.tokenBuffer.length===0&&super.done()}_next(){return this.tokenBuffer.length>0?this.tokenBuffer.pop():super.next()}next(){let e=this._next();if(e.type===E.map){let t=this._next();if(t.type===E.string&&t.value==="/"){let n=this._next();if(n.type===E.string){if(this._next().type!==E.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new U(E.tag,42,0)}if(n.type===E.map){let o=this._next();if(o.type===E.string&&o.value==="bytes"){let i=this._next();if(i.type===E.string){for(let a=0;a<2;a++)if(this._next().type!==E.break)throw new Error("Invalid encoded Bytes form");let s=it.decode(`m${i.value}`);return new U(E.bytes,s,i.value.length)}this.tokenBuffer.push(i)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},xp={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};xp.tags[42]=X.parse;var hI="dag-json",Ep=297,wg=r=>yp(r,fI),bg=r=>{let e=aI(r),t=Object.assign(xp,{tokenizer:new bp(e,xp)});return wp(e,t)},pI=r=>mI.decode(wg(r));var mI=new TextDecoder,gI=r=>bg(yI.encode(r)),yI=new TextEncoder;var kp={};Xe(kp,{code:()=>Tp,createLink:()=>Cg,createNode:()=>kg,decode:()=>PI,encode:()=>CI,name:()=>kI,prepare:()=>Ip,validate:()=>_p});var wI=new TextDecoder;function Sp(r,e){let t=0;for(let n=0;;n+=7){if(n>=64)throw new Error("protobuf: varint overflow");if(e>=r.length)throw new Error("protobuf: unexpected end of data");let o=r[e++];if(t+=n<28?(o&127)<<n:(o&127)*2**n,o<128)break}return[t,e]}function T1(r,e){let t;[t,e]=Sp(r,e);let n=e+t;if(t<0||n<0)throw new Error("protobuf: invalid length");if(n>r.length)throw new Error("protobuf: unexpected end of data");return[r.subarray(e,n),n]}function xg(r,e){let t;return[t,e]=Sp(r,e),[t&7,t>>3,e]}function bI(r){let e={},t=r.length,n=0;for(;n<t;){let o,i;if([o,i,n]=xg(r,n),i===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Hash`);if(e.Name!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Name before Hash");if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Hash");[e.Hash,n]=T1(r,n)}else if(i===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let s;[s,n]=T1(r,n),e.Name=wI.decode(s)}else if(i===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(o!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Tsize`);[e.Tsize,n]=Sp(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${i}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function Eg(r){let e=r.length,t=0,n,o=!1,i;for(;t<e;){let a,c;if([a,c,t]=xg(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(i)throw new Error("protobuf: (PBNode) duplicate Data section");[i,t]=T1(r,t),n&&(o=!0)}else if(c===2){if(o)throw new Error("protobuf: (PBNode) duplicate Links section");n||(n=[]);let l;[l,t]=T1(r,t),n.push(bI(l))}else throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${c}`)}if(t>e)throw new Error("protobuf: (PBNode) unexpected end of data");let s={};return i&&(s.Data=i),s.Links=n||[],s}var Sg=new TextEncoder,vg=2**32,xI=2**31;function EI(r,e){let t=e.length;if(typeof r.Tsize=="number"){if(r.Tsize<0)throw new Error("Tsize cannot be negative");if(!Number.isSafeInteger(r.Tsize))throw new Error("Tsize too large for encoding");t=mc(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=Sg.encode(r.Name);t-=n.length,e.set(n,t),t=mc(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=mc(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function Ag(r){let e=SI(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=mc(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let i=EI(r.Links[o],t.subarray(0,n));n-=i,n=mc(t,n,i)-1,t[n]=18}return t}function vI(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+Ss(t)}if(typeof r.Name=="string"){let t=Sg.encode(r.Name).length;e+=1+t+Ss(t)}return typeof r.Tsize=="number"&&(e+=1+Ss(r.Tsize)),e}function SI(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+Ss(t)}if(r.Links)for(let t of r.Links){let n=vI(t);e+=1+n+Ss(n)}return e}function mc(r,e,t){e-=Ss(t);let n=e;for(;t>=xI;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function Ss(r){return r%2===0&&r++,Math.floor((AI(r)+6)/7)}function AI(r){let e=0;return r>=vg&&(r=Math.floor(r/vg),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+II[r]}var II=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8];var _I=["Data","Links"],TI=["Hash","Name","Tsize"],Ap=new TextEncoder;function _g(r,e){if(r===e)return 0;let t=r.Name?Ap.encode(r.Name):[],n=e.Name?Ap.encode(e.Name):[],o=t.length,i=n.length;for(let s=0,a=Math.min(o,i);s<a;++s)if(t[s]!==n[s]){o=t[s],i=n[s];break}return o<i?-1:i<o?1:0}function Ig(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function Tg(r){if(typeof r.asCID=="object"){let t=X.asCID(r);if(!t)throw new TypeError("Invalid DAG-PB form");return{Hash:t}}if(typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Hash){let t=X.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=X.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=X.decode(r.Hash)))}catch(n){throw new TypeError(`Invalid DAG-PB form: ${n.message}`)}t&&(e.Hash=t)}if(!e.Hash)throw new TypeError("Invalid DAG-PB form");return typeof r.Name=="string"&&(e.Name=r.Name),typeof r.Tsize=="number"&&(e.Tsize=r.Tsize),e}function Ip(r){if((r instanceof Uint8Array||typeof r=="string")&&(r={Data:r}),typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Data!==void 0)if(typeof r.Data=="string")e.Data=Ap.encode(r.Data);else if(r.Data instanceof Uint8Array)e.Data=r.Data;else throw new TypeError("Invalid DAG-PB form");if(r.Links!==void 0)if(Array.isArray(r.Links))e.Links=r.Links.map(Tg),e.Links.sort(_g);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function _p(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!Ig(r,_I))throw new TypeError("Invalid DAG-PB form (extraneous properties)");if(r.Data!==void 0&&!(r.Data instanceof Uint8Array))throw new TypeError("Invalid DAG-PB form (Data must be bytes)");if(!Array.isArray(r.Links))throw new TypeError("Invalid DAG-PB form (Links must be a list)");for(let e=0;e<r.Links.length;e++){let t=r.Links[e];if(!t||typeof t!="object"||Array.isArray(t)||t instanceof Uint8Array||t["/"]&&t["/"]===t.bytes)throw new TypeError("Invalid DAG-PB form (bad link)");if(!Ig(t,TI))throw new TypeError("Invalid DAG-PB form (extraneous properties on link)");if(t.Hash===void 0)throw new TypeError("Invalid DAG-PB form (link must have a Hash)");if(t.Hash==null||!t.Hash["/"]||t.Hash["/"]!==t.Hash.bytes)throw new TypeError("Invalid DAG-PB form (link Hash must be a CID)");if(t.Name!==void 0&&typeof t.Name!="string")throw new TypeError("Invalid DAG-PB form (link Name must be a string)");if(t.Tsize!==void 0){if(typeof t.Tsize!="number"||t.Tsize%1!==0)throw new TypeError("Invalid DAG-PB form (link Tsize must be an integer)");if(t.Tsize<0)throw new TypeError("Invalid DAG-PB form (link Tsize cannot be negative)")}if(e>0&&_g(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function kg(r,e=[]){return Ip({Data:r,Links:e})}function Cg(r,e,t){return Tg({Hash:t,Name:r,Tsize:e})}function Pg(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var kI="dag-pb",Tp=112;function CI(r){_p(r);let e={};return r.Links&&(e.Links=r.Links.map(t=>{let n={};return t.Hash&&(n.Hash=t.Hash.bytes),t.Name!==void 0&&(n.Name=t.Name),t.Tsize!==void 0&&(n.Tsize=t.Tsize),n})),r.Data&&(e.Data=r.Data),Ag(e)}function PI(r){let e=Pg(r),t=Eg(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let i={};try{i.Hash=X.decode(o.Hash)}catch{}if(!i.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(i.Name=o.Name),o.Tsize!==void 0&&(i.Tsize=o.Tsize),i})),n}function As(r){return r?.then!=null}function Rg(r=[],e){let t={[Tp]:kp,[Jo]:Gi,[pp]:mp,[Ep]:vp,[T0]:Rl};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);As(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new pc(`Could not load codec for ${n}`)}}function Lg(r=[],e){let t={[ut.code]:ut,[Dl.code]:Dl,[Jt.code]:Jt};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);As(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new hc(`No hasher configured for multihash code 0x${n.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`)}}var Dr=class r extends Error{static name="NotFoundError";static code="ERR_NOT_FOUND";name=r.name;code=r.code;constructor(e="Not Found"){super(e)}};var Jn=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,block:o}of e)await this.put(n,o,t),yield n}get(e,t){return Promise.reject(new Error(".get is not implemented"))}async*getMany(e,t){for await(let n of e)yield{cid:n,block:await this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};var k1=0,C1=class extends Jn{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===k1||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===k1)return e.multihash.digest;if(this.child==null)throw new Dr;return this.child.get(e)}has(e){return e.multihash.code===k1?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==k1&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function RI(r){return r[Symbol.asyncIterator]!=null}function LI(r,e){let t=0;if(RI(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=Wi(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){await s&&(yield o);for await(let c of n)await e(c,t++)&&(yield c)}();let a=e;return function*(){s===!0&&(yield o);for(let c of n)a(c,t++)&&(yield c)}()}var tn=LI;function DI(r){return r[Symbol.asyncIterator]!=null}function Dg(r){return r?.then!=null}function NI(r,e){let t=0;if(DI(r))return async function*(){for await(let c of r){let l=e(c,t++);Dg(l)&&await l,yield c}}();let n=Wi(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();if(typeof e(o,t++)?.then=="function")return async function*(){yield o;for await(let c of n){let l=e(c,t++);Dg(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var bi=NI;var P1=class{child;getHasher;log;logger;components;constructor(e){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.components=e,this.child=new C1(e.blockstore),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new H("blocks:put:duplicate",e)),e):(n.onProgress?.(new H("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,t,n))),n.onProgress?.(new H("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=tn(e,async({cid:i})=>{let s=await this.child.has(i,t);return s&&t.onProgress?.(new H("blocks:put-many:duplicate",i)),!s}),o=bi(n,async({cid:i,block:s})=>{t.onProgress?.(new H("blocks:put-many:providers:notify",i)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(i,s,t)))});t.onProgress?.(new H("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async get(e,t={}){if(t.offline!==!0&&!await this.child.has(e,t)){let n=await this.getHasher(e.multihash.code);t.onProgress?.(new H("blocks:get:providers:get",e));let o=await Ng(e,this.components.blockBrokers,n,{...t,log:this.log});return t.onProgress?.(new H("blocks:get:blockstore:put",e)),await this.child.put(e,o,t),t.onProgress?.(new H("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async i=>i.announce?.(e,o,t))),o}return t.onProgress?.(new H("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new H("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(bi(e,async n=>{if(t.offline!==!0&&!await this.child.has(n,t)){let o=await this.getHasher(n.multihash.code);t.onProgress?.(new H("blocks:get-many:providers:get",n));let i=await Ng(n,this.components.blockBrokers,o,{...t,log:this.log});t.onProgress?.(new H("blocks:get-many:blockstore:put",n)),await this.child.put(n,i,t),t.onProgress?.(new H("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(n,i,t)))}}))}async delete(e,t={}){t.onProgress?.(new H("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new H("blocks:delete-many:blockstore:delete-many")),yield*this.child.deleteMany(async function*(){for await(let n of e)yield n}(),t)}async has(e,t={}){return this.child.has(e,t)}async*getAll(e={}){e.onProgress?.(new H("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}},R1=class extends P1{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await wt(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await Tt(this.child,...this.components.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){let n=this.components.blockBrokers.map(o=>o.createSession==null?o:o.createSession(t));return new Cp({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}},Cp=class extends P1{closeController;constructor(e,t){super(e),this.closeController=new AbortController,$(1/0,this.closeController.signal),this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async put(e,t,n={}){let o=he([this.closeController.signal,n.signal]);$(1/0,o);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=he([this.closeController.signal,t.signal]);$(1/0,n);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=he([this.closeController.signal,t.signal]);$(1/0,n);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=he([this.closeController.signal,t.signal]);$(1/0,n);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=he([this.closeController.signal,t.signal]);$(1/0,n);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=he([this.closeController.signal,t.signal]);$(1/0,n);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=he([this.closeController.signal,t.signal]);$(1/0,n);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=he([this.closeController.signal,e.signal]);$(1/0,t);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function BI(r){return typeof r.retrieve=="function"}var OI=(r,e)=>{if(e==null)throw new C(`No hasher configured for multihash code 0x${r.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`);return async t=>{let n,o=e.digest(t);if(As(o)?n=await o:n=o,!te(n.digest,r.multihash.digest))throw new co("Hash of downloaded block did not match multihash from passed CID")}};async function Ng(r,e,t,n){let o=OI(r,t),i=new AbortController,s=he([i.signal,n.signal]);$(1/0,i.signal,s);let a=[];for(let c of e)BI(c)&&a.push(c);try{return await Promise.any(a.map(async c=>{try{let l=!1,d=await c.retrieve(r,{...n,signal:s,validateFn:async u=>{await o(u),l=!0}});return l||await o(d),d}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{i.abort(),s.clear()}}var xi=class extends ge{intialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),$(1/0,this),this.name=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.name),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.providers=[],this.evictionFilter=Sn(this.maxProviders)}async retrieve(e,t={}){let n=it.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o;let i=J();if(this.requests.set(n,i.promise),this.providers.length===0){let l=!1;this.intialPeerSearchComplete==null&&(l=!0,this.log=this.logger.forComponent(`${this.name}:${e}`),this.intialPeerSearchComplete=this.findProviders(e,this.minProviders,t)),await this.intialPeerSearchComplete,l&&this.log("found initial session peers for %c",e)}let s=!1,a=new Mt({concurrency:this.maxProviders});a.addEventListener("error",()=>{}),a.addEventListener("failure",l=>{this.log.error("error querying provider %o, evicting from session",l.detail.job.options.provider,l.detail.error),this.evict(l.detail.job.options.provider)}),a.addEventListener("success",l=>{s=!0,i.resolve(l.detail.result)}),a.addEventListener("idle",()=>{s||t.signal?.aborted===!0||Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let l=0;l<this.minProviders&&this.providers.length!==0;l++){let d=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(d)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),i.resolve(await this.retrieve(e,t))}).catch(l=>{this.log.error("could not find new providers for %c",e,l),i.reject(l)})});let c=l=>{a.add(async()=>this.queryProvider(e,l.detail,t),{provider:l.detail}).catch(d=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,d)})};this.addEventListener("provider",c),Promise.all([...this.providers].map(async l=>a.add(async()=>this.queryProvider(e,l,t),{provider:l}))).catch(l=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,l)});try{return await i.promise}finally{this.removeEventListener("provider",c),a.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toEvictionKey(e));let t=this.providers.findIndex(n=>this.equals(n,e));t!==-1&&this.providers.splice(t,1)}isEvicted(e){return this.evictionFilter.has(this.toEvictionKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async findProviders(e,t,n){let o=J(),i=0;return Promise.resolve().then(async()=>{this.log("finding %d-%d new provider(s) for %c",t,this.maxProviders,e);for await(let s of this.findNewProviders(e,n)){if(i===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(s)&&(this.log("found %d/%d new providers",i,this.maxProviders),this.providers.push(s),this.safeDispatchEvent("provider",{detail:s}),i++,i===t&&(this.log("session is ready"),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",i);break}}if(this.log("found %d/%d new session peers",i,this.maxProviders),i<t)throw new fc(`Found ${i} of ${t} ${this.name} providers for ${e}`)}).catch(s=>{this.log.error("error searching routing for potential session peers for %c",e,s.errors??s),o.reject(s)}),o.promise}};var L1=class{blockstore;datastore;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??ko(),this.log=this.logger.forComponent("helia"),this.getHasher=Lg(e.hashers,e.loadHasher),this.getCodec=Rg(e.codecs,e.loadCodec),this.dns=e.dns??i1(),this.metrics=e.metrics;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new S1(t,{routers:(e.routers??[]).flatMap(o=>{let i=[o];return o[ln]!=null&&i.push(o[ln]),o[un]!=null&&i.push(o[un]),i}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new R1(t);this.pins=new v1(e.datastore,n,this.getCodec),this.blockstore=new A1(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await mg(this.datastore),await wt(this.blockstore,this.datastore,this.routing)}async stop(){await Tt(this.blockstore,this.datastore,this.routing)}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await Ct(o.deleteMany(async function*(){for await(let{cid:i}of o.getAll())try{if(await n.pins.isPinned(i,e))continue;yield i,e.onProgress?.(new H("helia:gc:deleted",i))}catch(s){n.log.error("Error during gc",s),e.onProgress?.(new H("helia:gc:error",s))}}()))}finally{t()}this.log("gc finished")}};var Pp=class extends xi{wantList;network;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t,n);if(this.log("%p %s %c",t,o.has?"has":"does not have",e),o.has&&o.block!=null)return o.block;throw new Error("Provider did not have block")}async*findNewProviders(e,t={}){for await(let n of this.network.findProviders(e,t))yield n.id}toEvictionKey(e){return e.toMultihash().bytes}equals(e,t){return e.equals(t)}};function Bg(r,e){return new Pp(r,e)}var D1=class{blocksReceived;duplicateBlocksReceived;dataReceived;duplicateDataReceived;constructor(e){this.blocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_received_blocks"),this.duplicateBlocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_received_blocks"),this.dataReceived=e.metrics?.registerMetricGroup("helia_bitswap_data_received_bytes"),this.duplicateDataReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_data_received_bytes")}updateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.blocksReceived?.increment(n)}updateDuplicateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateBlocksReceived?.increment(n)}updateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.dataReceived?.increment(n)}updateDuplicateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateDataReceived?.increment(n)}};var Rp=class extends Map{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function N1(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Rp({name:e,metrics:t}):n=new Map,n}function MI(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=Ft(r);e.push(t),r=r.slice(pe(t))}return e}var Og=MI;var B1=class extends ge{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),$(1/0,this),this.peers=rc({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=N1({name:"helia_bitswap_wantlist",metrics:e.metrics}),this.network=e.network,this.sendMessagesDelay=t.sendMessagesDelay??10,this.log=e.logger.forComponent("helia:bitswap:wantlist"),this.hashLoader=t.hashLoader,this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:connected",n=>{this.peerConnected(n.detail).catch(o=>{this.log.error("error processing newly connected bitswap peer %p",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=V(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??et.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===et.WantHave&&t.wantType===et.WantBlock&&(o.wantType=et.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===et.WantBlock?(await hr(this,"block",t?.signal,{filter:a=>te(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await hr(this,"presence",t?.signal,{filter:s=>te(e.multihash.digest,s.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail}finally{t.signal?.aborted===!0&&(this.log("want for %c was aborted, cancelling want",e),o.cancel=!0,await this.sendMessagesDebounced())}}async sendMessagesDebounced(){await this.sendingMessages?.promise,clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(e=>{this.log("error sending messages to peers",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=J(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new Yn;for(let[i,s]of this.wants.entries())t.has(i)||s.cancel||(n.add(i),o.addWantlistEntry(s.cid,{cid:s.cid.bytes,priority:s.priority,wantType:s.wantType,cancel:s.cancel,sendDontHave:s.sendDontHave}));if(o.wantlist.size!==0)try{await this.network.sendMessage(e,o);for(let i of n)t.add(i)}catch(i){this.log.error("error sending full wantlist to new peer",i)}})).catch(e=>{this.log.error("error sending messages",e)});for(let[e,t]of this.wants)if(t.cancel){this.wants.delete(e);for(let n of this.peers.values())n.delete(e)}this.sendingMessages.resolve()}has(e){let t=V(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new Yn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:et.WantHave,priority:1}),await this.network.sendMessage(t,o),(await hr(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&te(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:et.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new Yn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:et.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await hr(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&te(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=V(e.multihash.bytes,"base64"),o=this.wants.get(n);o!=null&&(o.cancel=!0,await this.sendMessagesDebounced())}async receiveMessage(e,t){this.log("received message from %p with %d blocks",e,t.blocks.length);let n=!1;for(let o of t.blocks){if(o.prefix==null||o.data==null)continue;let i=Og(o.prefix),s=i[0],a=i[1],c=i[2],l=c===ut.code?ut:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let d=l.digest(o.data);d.then!=null&&(d=await d);let u=X.create(s===0?0:1,a,d);this.log("received block from %p for %c",e,u),this.safeDispatchEvent("block",{detail:{sender:e,cid:u,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:u,has:!0,block:o.data}});let f=V(u.multihash.bytes,"base64"),h=this.wants.get(f);h!=null&&(h.cancel=!0,n=!0)}for(let{cid:o,type:i}of t.blockPresences){let s=X.decode(o);this.log("received %s from %p for %c",i,e,s),this.safeDispatchEvent("presence",{detail:{sender:e,cid:s,has:i===Ir.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new Yn(!0);for(let[o,i]of this.wants.entries())i.cancel||(t.add(o),n.addWantlistEntry(i.cid,{cid:i.cid.bytes,priority:1,wantType:et.WantBlock,cancel:!1,sendDontHave:!1}));if(n.wantlist.size===0){this.peers.set(e,t);return}try{await this.network.sendMessage(e,n),this.peers.set(e,t)}catch(o){this.log.error("error sending full wantlist to new peer %p",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var O1=class{log;logger;stats;network;blockstore;peerWantLists;wantList;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.stats=new D1(e),this.network=new $l(e,t),this.peerWantLists=new ju({...e,network:this.network},t),this.wantList=new B1({...e,network:this.network},t)}createSession(e={}){return Bg({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,o=he([n.signal,t.signal]);$(1/0,n.signal,o),this.network.findAndConnect(e,{...t,signal:o}).catch(i=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c",e,i)});try{return(await this.wantList.wantBlock(e,{...t,signal:o})).block}finally{n.abort(),o.clear()}}async notify(e,t,n={}){await Promise.all([this.peerWantLists.receivedBlock(e,n),this.wantList.receivedBlock(e,n)])}getWantlist(){return[...this.wantList.wants.values()].filter(e=>!e.cancel).map(e=>({cid:e.cid,priority:e.priority,wantType:e.wantType}))}getPeerWantlist(e){return this.peerWantLists.wantListForPeer(e)}async start(){this.wantList.start(),await this.network.start()}async stop(){this.wantList.stop(),await this.network.stop()}};var Mg=(r,e={})=>new O1(r,e);var Lp=class{bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=Mg(e,{hashLoader:{getHasher:async o=>n(o)},...t}),this.started=!1}isStarted(){return this.started}async start(){await this.bitswap.start(),this.started=!0}async stop(){await this.bitswap.stop(),this.started=!1}async announce(e,t,n){await this.bitswap.notify(e,t,n)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{announce:async(n,o,i)=>{await this.bitswap.notify(n,o,i)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function Dp(r={}){return e=>new Lp(e,r)}var M1=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let i=0,s=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let d=this.readAtomically(()=>{let u=this.readChar();if(u===void 0)return;let f=Number.parseInt(u,e);if(!Number.isNaN(f))return f});if(d===void 0)break;if(i*=e,i+=d,i>l||(s+=1,t!==void 0&&s>t))return}if(s!==0)return!n&&c&&s>1?void 0:i})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let s=this.readSeparator(":",n,()=>this.readIPv4Addr());if(s!==void 0)return t[o]=s[0],t[o+1]=s[1],t[o+2]=s[2],t[o+3]=s[3],[o+4,!0]}let i=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(i===void 0)return[o,!1];t[o]=i>>8,t[o+1]=i&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let i=new Uint8Array(14),s=16-(n+2),[a]=e(i.subarray(0,s));return t.set(i.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var Ug=45,UI=15,Is=new M1;function Np(r){if(!(r.length>UI))return Is.new(r).parseWith(()=>Is.readIPv4Addr())}function Bp(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>Ug))return Is.new(r).parseWith(()=>Is.readIPv6Addr())}function U1(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>Ug))return Is.new(r).parseWith(()=>Is.readIPAddr())}function _s(r){return!!Np(r)}function Ts(r){return!!Bp(r)}function F1(r){return!!U1(r)}var $g=fr(Fg(),1),FI=["0.0.0.0/8","10.0.0.0/8","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","172.16.0.0/12","192.0.0.0/24","192.0.0.0/29","192.0.0.8/32","192.0.0.9/32","192.0.0.10/32","192.0.0.170/32","192.0.0.171/32","192.0.2.0/24","192.31.196.0/24","192.52.193.0/24","192.88.99.0/24","192.168.0.0/16","192.175.48.0/24","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","240.0.0.0/4","255.255.255.255/32"],$I=FI.map(r=>new $g.Netmask(r));function Op(r){for(let e of $I)if(e.contains(r))return!0;return!1}function VI(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function KI(r){let e=r.split(":");if(e.length<2)return!1;let t=e[e.length-1].padStart(4,"0"),n=e[e.length-2].padStart(4,"0"),o=`${parseInt(n.substring(0,2),16)}.${parseInt(n.substring(2),16)}.${parseInt(t.substring(0,2),16)}.${parseInt(t.substring(2),16)}`;return Op(o)}function HI(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function qI(r){let e=r.split(":"),t=e[e.length-1];return Op(t)}function WI(r){return/^::$/.test(r)||/^::1$/.test(r)||/^64:ff9b::([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^100::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:2[0-9a-fA-F]:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:db8:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2002:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^f[c-d]([0-9a-fA-F]{2,2}):/i.test(r)||/^fe[8-9a-bA-B][0-9a-fA-F]:/i.test(r)||/^ff([0-9a-fA-F]{2,2}):/i.test(r)}function Bt(r){return _s(r)?Op(r):VI(r)?KI(r):HI(r)?qI(r):Ts(r)?WI(r):void 0}var zI=r=>r.toString().split("/").slice(1),ks=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),me=r=>({match:e=>ks(t=>t===r).match(e),pattern:r}),Cs=()=>({match:r=>ks(e=>typeof e=="string").match(r),pattern:"{string}"}),yc=()=>({match:r=>ks(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),We=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{Se.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),wc=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{S0.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),Le=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),qt=(...r)=>({match:e=>{let t;for(let n of r){let o=n.match(e);o!==!1&&(t==null||o.length<t.length)&&(t=o)}return t??!1},pattern:`or(${r.map(e=>e.pattern).join(", ")})`}),be=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e},pattern:`and(${r.map(e=>e.pattern).join(", ")})`});function $e(...r){function e(o){let i=zI(o);for(let s of r){let a=s.match(i);if(a===!1)return!1;i=a}return i}function t(o){return e(o)!==!1}function n(o){let i=e(o);return i===!1?!1:i.length===0}return{matchers:r,matches:t,exactMatch:n}}var V1=be(me("dns4"),Cs()),K1=be(me("dns6"),Cs()),H1=be(me("dnsaddr"),Cs()),Up=be(me("dns"),Cs()),zK=$e(V1,Le(We())),GK=$e(K1,Le(We())),QK=$e(H1,Le(We())),bc=$e(qt(Up,H1,V1,K1),Le(We())),Vg=be(me("ip4"),ks(_s)),Kg=be(me("ip6"),ks(Ts)),Fp=qt(Vg,Kg),eo=qt(Fp,Up,V1,K1,H1),Hg=$e(qt(Fp,be(qt(Up,H1,V1,K1),Le(We())))),YK=$e(Vg),XK=$e(Kg),qg=$e(Fp),$p=be(eo,me("tcp"),yc()),xc=be(eo,me("udp"),yc()),Vp=$e(be($p,Le(We()))),jK=$e(xc),Kp=be(xc,me("quic")),q1=be(xc,me("quic-v1")),GI=qt(Kp,q1),ZK=$e(Kp),JK=$e(q1),Mp=qt(eo,$p,xc,Kp,q1),Wg=qt(be(Mp,me("ws"),Le(We()))),Ec=$e(Wg),zg=qt(be(Mp,me("wss"),Le(We())),be(Mp,me("tls"),Le(be(me("sni"),Cs())),me("ws"),Le(We()))),Ps=$e(zg),Gg=be(xc,me("webrtc-direct"),Le(wc()),Le(wc()),Le(We())),vc=$e(Gg),Qg=be(q1,me("webtransport"),Le(wc()),Le(wc()),Le(We())),Ei=$e(Qg),$1=qt(Wg,zg,be($p,Le(We())),be(GI,Le(We())),be(eo,Le(We())),Gg,Qg,We()),Yg=$e($1),QI=be($1,me("p2p-circuit"),We()),ir=$e(QI),YI=qt(be($1,me("p2p-circuit"),me("webrtc"),Le(We())),be($1,me("webrtc"),Le(We())),me("webrtc")),Sc=$e(YI),XI=qt(be(eo,me("tcp"),yc(),me("http"),Le(We())),be(eo,me("http"),Le(We()))),Xg=$e(XI),jI=qt(be(eo,me("tcp"),qt(be(me("443"),me("http")),be(yc(),me("https"))),Le(We())),be(eo,me("tls"),me("http"),Le(We())),be(eo,me("https"),Le(We()))),jg=$e(jI);var aH=parseInt("0xFFFF",16),cH=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);var e7=_s,r_=Ts,Hp=function(r){let e=0;if(r=r.toString().trim(),e7(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(r_(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let i=e7(t[n]),s;i&&(s=Hp(t[n]),t[n]=V(s.slice(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,V(s.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let i=[n,1];for(n=9-t.length;n>0;n--)i.push("0");t.splice.apply(t,i)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let i=parseInt(t[n],16);o[e++]=i>>8&255,o[e++]=i&255}return o}throw new Error("invalid ip address")},t7=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let i=0;i<t;i++)o.push(r[e+i]);return o.join(".")}if(t===16){let o=[];for(let i=0;i<t;i+=2)o.push(n.getUint16(e+i).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var Rs={},qp={},o_=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[481,-1,"http-path"],[777,-1,"memory"]];o_.forEach(r=>{let e=i_(...r);qp[e.code]=e,Rs[e.name]=e});function i_(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function ee(r){if(typeof r=="number"){if(qp[r]!=null)return qp[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(Rs[r]!=null)return Rs[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var HH=ee("ip4"),qH=ee("ip6"),WH=ee("ipcidr");function Qp(r,e){switch(ee(r).code){case 4:case 41:return a_(e);case 42:return Gp(e);case 6:case 273:case 33:case 132:return o7(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return Gp(e);case 421:return d_(e);case 444:return n7(e);case 445:return n7(e);case 466:return u_(e);case 481:return globalThis.encodeURIComponent(Gp(e));default:return V(e,"base16")}}function Yp(r,e){switch(ee(r).code){case 4:return r7(e);case 41:return r7(e);case 42:return zp(e);case 6:case 273:case 33:case 132:return Xp(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return zp(e);case 421:return c_(e);case 444:return f_(e);case 445:return h_(e);case 466:return l_(e);case 481:return zp(globalThis.decodeURIComponent(e));default:return M(e,"base16")}}var Wp=Object.values(Nn).map(r=>r.decoder),s_=function(){let r=Wp[0].or(Wp[1]);return Wp.slice(2).forEach(e=>r=r.or(e)),r}();function r7(r){if(!F1(r))throw new Error("invalid ip address");return Hp(r)}function a_(r){let e=t7(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!F1(e))throw new Error("invalid ip address");return e}function Xp(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function o7(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function zp(r){let e=M(r),t=Uint8Array.from(Ke(e.length));return Pe([t,e],t.length+e.length)}function Gp(r){let e=Ft(r);if(r=r.slice(pe(e)),r.length!==e)throw new Error("inconsistent lengths");return V(r)}function c_(r){let e;r[0]==="Q"||r[0]==="1"?e=ke(Se.decode(`z${r}`)).bytes:e=X.parse(r).multihash.bytes;let t=Uint8Array.from(Ke(e.length));return Pe([t,e],t.length+e.length)}function l_(r){let e=s_.decode(r),t=Uint8Array.from(Ke(e.length));return Pe([t,e],t.length+e.length)}function u_(r){let e=Ft(r),t=r.slice(pe(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+V(t,"base64url")}function d_(r){let e=Ft(r),t=r.slice(pe(e));if(t.length!==e)throw new Error("inconsistent lengths");return V(t,"base58btc")}function f_(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let t=lt.decode("b"+e[0]),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=Xp(n);return Pe([t,o],t.length+o.length)}function h_(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let t=lt.decode(`b${e[0]}`),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=Xp(n);return Pe([t,o],t.length+o.length)}function n7(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=V(e,"base32"),o=o7(t);return`${n}:${o}`}function i7(r){r=jp(r);let e=[],t=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let i=0;i<o.length;i++){let s=o[i],a=ee(s);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(i++,i>=o.length)throw a7("invalid address: "+r);if(a.path===!0){n=jp(o.slice(i).join("/")),e.push([a.code,Yp(a.code,n)]),t.push([a.code,n]);break}let c=Yp(a.code,o[i]);e.push([a.code,c]),t.push([a.code,Qp(a.code,c)])}return{string:s7(t),bytes:Jp(e),tuples:e,stringTuples:t,path:n}}function Zp(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let i=Ft(r,o),s=pe(i),a=ee(i),c=p_(a,r.slice(o+s));if(c===0){e.push([i]),t.push([i]),o+=s;continue}let l=r.slice(o+s,o+s+c);if(o+=c+s,o>r.length)throw a7("Invalid address Uint8Array: "+V(r,"base16"));e.push([i,l]);let d=Qp(i,l);if(t.push([i,d]),a.path===!0){n=d;break}}return{bytes:Uint8Array.from(r),string:s7(t),tuples:e,stringTuples:t,path:n}}function s7(r){let e=[];return r.map(t=>{let n=ee(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),jp(e.join("/"))}function Jp(r){return Pe(r.map(e=>{let t=ee(e[0]),n=Uint8Array.from(Ke(t.code));return e.length>1&&e[1]!=null&&(n=Pe([n,e[1]])),n}))}function p_(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=Ft(e instanceof Uint8Array?e:Uint8Array.from(e));return t+pe(t)}}function jp(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}function a7(r){return new Error("Error parsing address: "+r)}var m_=Symbol.for("nodejs.util.inspect.custom"),tm=Symbol.for("@multiformats/js-multiaddr/multiaddr"),g_=[ee("dns").code,ee("dns4").code,ee("dns6").code,ee("dnsaddr").code],em=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},W1=class r{bytes;#e;#t;#r;#o;[tm]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=Zp(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=i7(e)}else if(Bo(e))t=Zp(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#t=t.tuples,this.#r=t.stringTuples,this.#o=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,i="",s=ee("tcp"),a=ee("udp"),c=ee("ip4"),l=ee("ip6"),d=ee("dns6"),u=ee("ip6zone");for(let[h,p]of this.stringTuples())h===u.code&&(i=`%${p??""}`),g_.includes(h)&&(t=s.name,o=443,n=`${p??""}${i}`,e=h===d.code?6:4),(h===s.code||h===a.code)&&(t=ee(h).name,o=parseInt(p??"")),(h===c.code||h===l.code)&&(t=ee(h).name,n=`${p??""}${i}`,e=h===l.code?6:4);if(e==null||t==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},ee(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>ee(e).name)}tuples(){return this.#t}stringTuples(){return this.#r}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(Jp(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===Rs.p2p.code&&e.push([n,o]),n===Rs["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?V(Se.decode(`z${n}`),"base58btc"):V(X.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#o}equals(e){return te(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(i=>i.resolvable);if(t==null)return[this];let n=Ls.get(t.name);if(n==null)throw new em(`no available resolver for ${t.name}`);return(await n(this,e)).map(i=>Q(i))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[m_](){return`Multiaddr(${this.#e})`}};var Ls=new Map;function Bo(r){return!!r?.[tm]}function Q(r){return new W1(r)}var y_=[ee("tcp").code,ee("dns").code,ee("dnsaddr").code,ee("dns4").code,ee("dns6").code];function c7(r){return d7("sni",r)?.[1]}function l7(r){let e=d7("tcp",r)?.[1];return e==null?"":`:${e}`}function d7(r,e){let t;try{t=ee(r).code}catch{return}for(let[n,o]of e)if(n===t&&o!=null)return[n,o]}function u7(r){return r.some(([e,t])=>e===ee("tls").code)}function sr(r,e,t){let n=f7[ee(r).name];if(n==null)throw new Error(`Can't interpret protocol ${ee(r).name}`);let o=n(e,t);return r===ee("ip6").code?`[${o}]`:o}var f7={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`tcp://${sr(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${sr(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${sr(t[0],t[1]??"",e)}/ipfs/${r}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${sr(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=u7(e),n=c7(e),o=l7(e);if(t&&n!=null)return`https://${n}${o}`;let i=t?"https://":"http://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=sr(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${i}${a}`},"http-path":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=sr(t[0],t[1]??"",e),o=decodeURIComponent(r);return`${n}/${o}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return sr(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return sr(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=sr(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=u7(e),n=c7(e),o=l7(e);if(t&&n!=null)return`wss://${n}${o}`;let i=t?"wss://":"ws://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=sr(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${i}${a}`},wss:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=sr(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`},"p2p-websocket-star":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${sr(t[0],t[1]??"",e)}/p2p-websocket-star`},"p2p-webrtc-star":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${sr(t[0],t[1]??"",e)}/p2p-webrtc-star`},"p2p-webrtc-direct":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${sr(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function z1(r,e){let n=Q(r).stringTuples(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let i=ee(o[0]),s=f7[i.name];if(s==null)throw new Error(`No interpreter found for ${i.name}`);let a=s(o[1]??"",n);return e?.assumeHttp!==!1&&y_.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://")||a.startsWith("ws://")||a.startsWith("wss://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var G1=class{url;#e=0;#t=0;#r=0;#o=0;#a=new Map;log;constructor(e,t){this.url=e instanceof URL?e:new URL(e),this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}#l(e){let t=e.multihash.bytes;return it.encode(t)}async getRawBlock(e,t){let n=new URL(this.url.toString());if(n.pathname=`/ipfs/${e.toString()}`,n.search="?format=raw",t?.aborted===!0)throw new Error(`Signal to fetch raw block for CID ${e} from gateway ${this.url} was aborted prior to fetch`);let o=this.#l(e),i=new AbortController,s=()=>{i.abort()};t?.addEventListener("abort",s);try{let a=this.#a.get(o);return a==null&&(this.#e++,a=fetch(n.toString(),{signal:i.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"}).then(async c=>{if(this.log("GET %s %d",n,c.status),!c.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#o++,new Uint8Array(await c.arrayBuffer())}),this.#a.set(o,a)),await a}catch{throw t?.aborted===!0?new Error(`fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#t++,new Error(`unable to fetch raw block for CID ${e}`))}finally{t?.removeEventListener("abort",s),this.#a.delete(o)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#o/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#o,pendingResponses:this.#a.size}}};function w_(r,e,t){return r.filter(n=>{if(jg.matches(n)||e&&Xg.matches(n))return t||bc.matches(n)?!0:Bt(n.toOptions().host)===!1;if(!e&&t){let{host:o}=n.toOptions();if(o==="127.0.0.1"||o==="localhost"||o.endsWith(".localhost"))return!0}return!1})}async function*Q1(r,e,t,n,o,i){for await(let s of e.findProviders(r,i)){let a=w_(s.multiaddrs,n,o);if(a.length===0)continue;let c=z1(a[0]);yield new G1(c,t)}}var rm=class extends xi{routing;allowInsecure;allowLocal;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??Y1,this.allowLocal=t.allowLocal??X1}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let o=await t.getRawBlock(e,n.signal);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*Q1(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,t)}toEvictionKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}};function h7(r,e){return new rm(r,e)}var j1=class{allowInsecure;allowLocal;routing;log;logger;constructor(e,t={}){this.log=e.logger.forComponent("helia:trustless-gateway-block-broker"),this.logger=e.logger,this.routing=e.routing,this.allowInsecure=t.allowInsecure??Y1,this.allowLocal=t.allowLocal??X1}async retrieve(e,t={}){let n=[];for await(let o of Q1(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,t)){this.log("getting block for %c from %s",e,o.url);try{let i=await o.getRawBlock(e,t.signal);this.log.trace("got block for %c from %s",e,o.url);try{await t.validateFn?.(i)}catch(s){this.log.error("failed to validate block for %c from %s",e,o.url,s);continue}return i}catch(i){if(this.log.error("failed to get block for %c from %s",e,o.url,i),i instanceof Error?n.push(i):n.push(new Error(`Unable to fetch raw block for CID ${e} from gateway ${o.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,o.url);break}}}throw n.length>0?new AggregateError(n,`Unable to fetch raw block for CID ${e} from any gateway`):new Error(`Unable to fetch raw block for CID ${e} from any gateway`)}createSession(e={}){return h7({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure})}};var Y1=!1,X1=!1;function nm(r={}){return e=>new j1(e,r)}async function*Z1(r,e={}){let t=r.getReader();try{for(;;){let n=await t.read();if(n.done)return;yield n.value}}finally{e.preventCancel!==!0&&await t.cancel(),t.releaseLock()}}var A_=fr(J1(),1);var rn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},ed=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},Ds=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},td=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},rd=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},nd=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},Ac=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var ar;(function(r){let e;(function(o){o.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(o){o[o.EOL=0]="EOL"})(t||(t={})),function(o){o.codec=()=>He(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=oe((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.value!=null&&(i.uint32(10),i.bytes(o.value)),o.signatureV1!=null&&(i.uint32(18),i.bytes(o.signatureV1)),o.validityType!=null&&(i.uint32(24),r.ValidityType.codec().encode(o.validityType,i)),o.validity!=null&&(i.uint32(34),i.bytes(o.validity)),o.sequence!=null&&(i.uint32(40),i.uint64(o.sequence)),o.ttl!=null&&(i.uint32(48),i.uint64(o.ttl)),o.pubKey!=null&&(i.uint32(58),i.bytes(o.pubKey)),o.signatureV2!=null&&(i.uint32(66),i.bytes(o.signatureV2)),o.data!=null&&(i.uint32(74),i.bytes(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.value=o.bytes();break}case 2:{a.signatureV1=o.bytes();break}case 3:{a.validityType=r.ValidityType.codec().decode(o);break}case 4:{a.validity=o.bytes();break}case 5:{a.sequence=o.uint64();break}case 6:{a.ttl=o.uint64();break}case 7:{a.pubKey=o.bytes();break}case 8:{a.signatureV2=o.bytes();break}case 9:{a.data=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,i)=>re(o,r.codec(),i)})(ar||(ar={}));var b_=mr("ipns:utils"),p7=M("/ipns/");var x_=0,E_=18;function m7(r){let e;if(r.pubKey!=null)try{e=rt(r.pubKey)}catch(t){throw b_.error(t),t}if(e!=null)return e}function g7(r){let e=M("ipns-signature:");return Pe([e,r])}function Ic(r){return"signatureV1"in r?ar.encode({value:M(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:M(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):ar.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function _n(r){let e=ar.decode(r);if(e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),e.signatureV2==null||e.data==null)throw new rn("Missing data or signatureV2");let t=y7(e.data),n=v_(t.Value),o=V(t.Validity);if(e.value!=null&&e.signatureV1!=null)return S_(e),{value:n,validityType:ar.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV1:e.signatureV1,signatureV2:e.signatureV2,data:e.data};if(e.signatureV2!=null)return{value:n,validityType:ar.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV2:e.signatureV2,data:e.data};throw new Error("invalid record: does not include signatureV1 or signatureV2")}function _c(r){return Pe([p7,r.bytes])}function Ns(r){let e=ke(r.slice(p7.length));if(!od(e,x_)&&!od(e,E_))throw new co("Multihash in IPNS key was not identity or sha2-256");return e}function y7(r){let e=Er(r);if(e.ValidityType===0)e.ValidityType=ar.ValidityType.EOL;else throw new Ds("The validity type is unsupported");return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e}function v_(r){let e=V(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${X.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${X.parse(e).toV1().toString()}`}catch{}throw new rd("Value must be a valid content path starting with /")}function S_(r){if(r.data==null)throw new nd("Record data is missing");let e=y7(r.data);if(!te(e.Value,r.value??new Uint8Array(0)))throw new rn('Field "value" did not match between protobuf and CBOR');if(!te(e.Validity,r.validity??new Uint8Array(0)))throw new rn('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new rn('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new rn('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new rn('Field "ttl" did not match between protobuf and CBOR')}function od(r,e){return r.code===e}var oW=mr("ipns"),iW=60*60*1e9,I_="/ipns/",sW=I_.length;var w7=fr(J1(),1);var id=mr("ipns:validator"),__=1024*10,T_=async(r,e)=>{let t=_n(e),n;try{let o=g7(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw id.error("record signature verification failed"),new rn("Record signature verification failed");if(t.validityType===ar.ValidityType.EOL){if(w7.default.fromString(t.validity).toDate().getTime()<Date.now())throw id.error("record has expired"),new ed("record has expired")}else if(t.validityType!=null)throw id.error("the validity type is unsupported"),new Ds("The validity type is unsupported");id("ipns record for %s is valid",t.value)};async function sd(r,e){if(e.byteLength>__)throw new td("The record is too large");let t=Ns(r),n;od(t,0)&&(n=qu(t));let o=_n(e),i=m7(o)??n;if(i==null)throw new Ac("Could not extract public key from IPNS record or routing key");let s=_c(i.toMultihash());if(!te(r,s))throw new Ac("Embedded public key did not match routing key");await T_(i,e)}async function*Tc(r){let e=/\r?\n/,t=new TextDecoder("utf8"),n="";for await(let o of r){typeof o=="string"&&(o=new TextEncoder().encode(o)),n+=t.decode(o,{stream:!0});let i=n.split(e);n=i.pop()??"";for(let s=0;s<i.length;s++)yield JSON.parse(i[s])}n+=t.decode(),n!==""&&(yield JSON.parse(n))}var Bs=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},vi=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function k_(r){return r[Symbol.asyncIterator]!=null}function C_(r){if(k_(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var kc=C_;var b7=M("/ipns/");function x7(r){return te(r.subarray(0,b7.byteLength),b7)}var ad=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*jt(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async put(e,t,n){if(!x7(e))return;let o=Ns(e),i=X.createV1(114,o),s=_n(t);await this.client.putIPNS(i,s,n)}async get(e,t){if(!x7(e))throw new Oe("Not found");let n=Ns(e),o=X.createV1(114,n);try{let i=await this.client.getIPNS(o,t);return Ic(i)}catch(i){throw i.name==="BadResponseError"?new Oe("Not found"):i}}},cd=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await kc(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Oe("Not found")}async*getClosestPeers(e,t={}){}};var Wt=mr("delegated-routing-v1-http-api-client"),E7={concurrentRequests:4,timeout:3e4},ld=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,$(1/0,this.shutDownController.signal),this.httpQueue=new An({concurrency:t.concurrentRequests??E7.concurrentRequests}),this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??E7.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new ad(this),this.peerRouting=new cd(this)}get[ln](){return this.contentRouting}get[un](){return this.peerRouting}isStarted(){return this.started}start(){this.started=!0}stop(){this.httpQueue.clear(),this.shutDownController.abort(),this.started=!1}async*getProviders(e,t={}){Wt("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=he([this.shutDownController.signal,n,t.signal]);$(1/0,n,o);let i=J(),s=J();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}routing/v1/providers/${e.toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let l=await fetch(a,{headers:{Accept:"application/x-ndjson"},signal:o});if(l.status===404)throw new Oe("No matching records found");if(l.status===422)throw new Bs("Request does not conform to schema or semantic constraints");if(l.body==null)throw new vi("Routing response had no body");if(l.headers.get("Content-Type")==="application/json"){let u=await l.json();for(let f of u.Providers){let h=this.#e(f);h!=null&&(yield h)}}else for await(let u of Tc(Z1(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){Wt.error("getProviders errored:",a)}finally{o.clear(),s.resolve(),Wt("getProviders finished: %c",e)}}async*getPeers(e,t={}){Wt("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=he([this.shutDownController.signal,n,t.signal]);$(1/0,n,o);let i=J(),s=J();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}routing/v1/peers/${e.toCID().toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let l=await fetch(a,{headers:{Accept:"application/x-ndjson"},signal:o});if(l.status===404)throw new Oe("No matching records found");if(l.status===422)throw new Bs("Request does not conform to schema or semantic constraints");if(l.body==null)throw new vi("Routing response had no body");if(l.headers.get("Content-Type")==="application/json"){let u=await l.json();for(let f of u.Peers){let h=this.#e(f);h!=null&&(yield h)}}else for await(let u of Tc(Z1(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){Wt.error("getPeers errored:",a)}finally{o.clear(),s.resolve(),Wt("getPeers finished: %c",e)}}async getIPNS(e,t={}){Wt("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=he([this.shutDownController.signal,n,t.signal]);$(1/0,n,o);let i=J(),s=J();this.httpQueue.add(async()=>(i.resolve(),s.promise));let a=`${this.clientUrl}routing/v1/ipns/${e}`;try{await i.promise;let l=await fetch(a,{headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o});if(Wt("getIPNS GET %s %d",a,l.status),l.status===404)throw new Oe("No matching records found");if(l.status===422)throw new Bs("Request does not conform to schema or semantic constraints");if(l.body==null)throw new vi("GET ipns response had no body");let d=await l.arrayBuffer(),u=new Uint8Array(d,0,d.byteLength);return t.validate!==!1&&await sd(_c(e.multihash),u),_n(u)}catch(c){throw Wt.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),s.resolve(),Wt("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){Wt("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),i=he([this.shutDownController.signal,o,n.signal]);$(1/0,o,i);let s=J(),a=J();this.httpQueue.add(async()=>(s.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e}`;try{await s.promise;let l=Ic(t),u=await fetch(c,{method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:i});if(Wt("putIPNS PUT %s %d",c,u.status),u.status!==200)throw new vi("PUT ipns response had status other than 200")}catch(l){throw Wt.error("putIPNS PUT %s error:",c,l.stack),l}finally{i.clear(),a.resolve(),Wt("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(Q)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Re(e.ID),Addrs:n,Protocols:t}}catch(t){Wt.error("could not conform record to peer schema",t)}}#t(e,t,n){if(t!=null||this.filterAddrs!=null){let o=t?.join(",")??this.filterAddrs?.join(",")??"";o!==""&&e.searchParams.set("filter-addrs",o)}if(n!=null||this.filterProtocols!=null){let o=n?.join(",")??this.filterProtocols?.join(",")??"";o!==""&&e.searchParams.set("filter-protocols",o)}}};function v7(r,e={}){return new ld(new URL(r),e)}var S7="[a-fA-F\\d:]",Oo=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${S7})|(?<=${S7})(?=\\s|$))`:"",nn="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",st="[a-fA-F\\d]{1,4}",ud=`
8
8
  (?:
9
- (?:${at}:){7}(?:${at}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
10
- (?:${at}:){6}(?:${on}|:${at}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
11
- (?:${at}:){5}(?::${on}|(?::${at}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4
12
- (?:${at}:){4}(?:(?::${at}){0,1}:${on}|(?::${at}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4
13
- (?:${at}:){3}(?:(?::${at}){0,2}:${on}|(?::${at}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4
14
- (?:${at}:){2}(?:(?::${at}){0,3}:${on}|(?::${at}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
15
- (?:${at}:){1}(?:(?::${at}){0,4}:${on}|(?::${at}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
16
- (?::(?:(?::${at}){0,5}:${on}|(?::${at}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
9
+ (?:${st}:){7}(?:${st}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
10
+ (?:${st}:){6}(?:${nn}|:${st}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
11
+ (?:${st}:){5}(?::${nn}|(?::${st}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4
12
+ (?:${st}:){4}(?:(?::${st}){0,1}:${nn}|(?::${st}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4
13
+ (?:${st}:){3}(?:(?::${st}){0,2}:${nn}|(?::${st}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4
14
+ (?:${st}:){2}(?:(?::${st}){0,3}:${nn}|(?::${st}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
15
+ (?:${st}:){1}(?:(?::${st}){0,4}:${nn}|(?::${st}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
16
+ (?::(?:(?::${st}){0,5}:${nn}|(?::${st}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
17
17
  )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
18
- `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),RI=new RegExp(`(?:^${on}$)|(?:^${hd}$)`),DI=new RegExp(`^${on}$`),LI=new RegExp(`^${hd}$`),tm=r=>r&&r.exact?RI:new RegExp(`(?:${Bo(r)}${on}${Bo(r)})|(?:${Bo(r)}${hd}${Bo(r)})`,"g");tm.v4=r=>r&&r.exact?DI:new RegExp(`${Bo(r)}${on}${Bo(r)}`,"g");tm.v6=r=>r&&r.exact?LI:new RegExp(`${Bo(r)}${hd}${Bo(r)}`,"g");var rm=tm;function nm(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function y7(){return!1}var{toString:NI}=Object.prototype;function om(r){return NI.call(r)==="[object RegExp]"}var w7={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function im(r,e={}){if(!om(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(w7).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?w7[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function sm(r,e,{timeout:t}={}){try{return nm(()=>im(r).test(e),{timeout:t})()}catch(n){if(y7(n))return!1;throw n}}var BI=15,OI=45,b7={timeout:400};function am(r){return r.length>OI?!1:sm(rm.v6({exact:!0}),r,b7)}function x7(r){return r.length>BI?!1:sm(rm.v4({exact:!0}),r,b7)}var E7={http:"80",https:"443",ws:"80",wss:"443"},MI=["http","https","ws","wss"];function v7(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:i}=UI(r),a="/"+[FI(o,t),$I(i,n),KI(n)].filter(c=>!!c).reduce((c,l)=>c.concat(l),[]).join("/");return Y(a)}function UI(r){let[e]=r.split(":");MI.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o}=new URL(r);if(o==null||o===""){let i=VI(e);i!=null&&(o=i),i==null&&t==="http:"&&(o="80")}return{scheme:e,hostname:n,port:o}}function FI(r,e){if(!(r==null||r==="")){if(x7(r))return["ip4",r];if(am(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(am(t))return["ip6",t]}return[e,r]}}function $I(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function KI(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function VI(r){if(!(r==null||r===""||E7[r]==null))return E7[r]}var HI=["https://trustless-gateway.link","https://4everland.io"],qI=2336;function WI(r){return r=r.toString(),{id:En(Z.createV1(qI,Jt.digest(O(r)))),multiaddrs:[v7(r)]}}var cm=class{gateways;constructor(e={}){this.gateways=(e.gateways??HI).map(t=>WI(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function lm(r={}){return new cm(r)}var um=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}};function dm(r){return new um(r)}var _c=class extends jn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(ut.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(ut.encode(e.multihash.bytes));if(t==null)throw new Lr;return t}has(e){return this.data.has(ut.encode(e.multihash.bytes))}async delete(e){this.data.delete(ut.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:Z.createV1(fa,Ce(ut.decode(e))),block:t}}};var tG=pr("blockstore:core:tiered");var _7="SHARDING";function GI(r){return r[Symbol.asyncIterator]!=null}function YI(r){if(GI(r))return(async()=>{let t=[];for await(let n of r)t.push(n);return t})();let e=[];for(let t of r)e.push(t);return e}var Ic=YI;function QI(r){return r[Symbol.asyncIterator]!=null}function XI(r,e){return QI(r)?async function*(){yield*(await Ic(r)).sort(e)}():function*(){yield*Ic(r).sort(e)}()}var pd=XI;var Jn=class{put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}get(e,t){return Promise.reject(new Error(".get is not implemented"))}has(e,t){return Promise.reject(new Error(".has is not implemented"))}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*putMany(e,t={}){for await(let{key:n,value:o}of e)await this.put(n,o,t),yield n}async*getMany(e,t={}){for await(let n of e)yield{key:n,value:await this.get(n,t)}}async*deleteMany(e,t={}){for await(let n of e)await this.delete(n,t),yield n}batch(){let e=[],t=[];return{put(n,o){e.push({key:n,value:o})},delete(n){t.push(n)},commit:async n=>{await Yt(this.putMany(e,n)),e=[],await Yt(this.deleteMany(t,n)),t=[]}}}async*_all(e,t){throw new Error("._all is not implemented")}async*_allKeys(e,t){throw new Error("._allKeys is not implemented")}query(e,t){let n=this._all(e,t);if(e.prefix!=null){let o=e.prefix;n=rn(n,i=>i.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>rn(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>pd(o,i),n)),e.offset!=null){let o=0,i=e.offset;n=rn(n,()=>o++>=i)}return e.limit!=null&&(n=lo(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=rn(n,i=>i.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>rn(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>pd(o,i),n)),e.offset!=null){let o=e.offset,i=0;n=rn(n,()=>i++>=o)}return e.limit!=null&&(n=lo(n,e.limit)),n}};var xi=class extends Jn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(e.toString(),t),e}get(e){let t=this.data.get(e.toString());if(t==null)throw new Lr;return t}has(e){return this.data.has(e.toString())}delete(e){this.data.delete(e.toString())}*_all(){for(let[e,t]of this.data.entries())yield{key:new Le(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new Le(e)}};var NG=new Le(_7);var YG=pr("datastore:core:tiered");var md=class extends N1{libp2p;constructor(e){super({...e,components:{libp2p:e.libp2p}}),this.libp2p=e.libp2p}async start(){await super.start(),await this.libp2p.start()}async stop(){await super.stop(),await this.libp2p.stop()}};var fm=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=J(),this.haveNext=J()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=J(),e}async throw(e){return this.ended=!0,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return await this._push(void 0),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=J(),await ke(this.readNext.promise,t?.signal,t)}};function T7(){return new fm}var gd=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var hm=class extends Error{code;constructor(e,t){super(e),this.code=t}},pm=class extends hm{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function Ei(r,e){let t=T7();r.sink(t).catch(async s=>{await t.end(s)}),r.sink=async s=>{for await(let a of s)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new ce;return{read:async(s,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((d,u)=>{c=()=>{u(new pm("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(s==null){let{done:u,value:f}=await Promise.race([n.next(),l]);return u===!0?new ce:f}for(;o.byteLength<s;){let{value:u,done:f}=await Promise.race([n.next(),l]);if(f===!0)throw new gd("unexpected end of input");o.append(u)}let d=o.sublist(0,s);return o.consume(s),d}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(s,a)=>{a?.signal?.throwIfAborted(),s instanceof Uint8Array?await t.push(s,a):await t.push(s.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let s=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*s}()}return r}}}var yd=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},wd=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},bd=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function An(r,e={}){let t=Ei(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=pe(e.maxDataLength));let n=e?.lengthDecoder??Ft,o=e?.lengthEncoder??Ve;return{read:async s=>{let a=-1,c=new ce;for(;;){c.append(await t.read(1,s));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new yd("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new bd("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new wd("message length too long");return t.read(a,s)},write:async(s,a)=>{await t.write(new ce(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new ce(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function mm(){let r=J(),e=!1;return{sink:async t=>{if(e)throw new Error("already piped");e=!0,r.resolve(t)},source:async function*(){yield*await r.promise}()}}function k7(){let r=mm(),e=mm();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var Rs=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function xd(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function gm(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function ym(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function ar(r,...e){if(!ym(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function wm(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function C7(r,e){ar(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var eo=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),P7=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),jI=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!jI)throw new Error("Non little-endian hardware is not supported");function ZI(r){if(typeof r!="string")throw new Error(`string expected, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Ed(r){if(typeof r=="string")r=ZI(r);else if(ym(r))r=vd(r);else throw new Error(`Uint8Array expected, got ${typeof r}`);return r}function R7(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function D7(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}var bm=(r,e)=>(Object.assign(e,r),e);function xm(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function vd(r){return Uint8Array.from(r)}function to(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var N7=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),JI=N7("expand 16-byte k"),eT=N7("expand 32-byte k"),tT=eo(JI),B7=eo(eT),MY=B7.slice();function Q(r,e){return r<<e|r>>>32-e}function Em(r){return r.byteOffset%4===0}var Sd=64,rT=16,O7=2**32-1,L7=new Uint32Array;function nT(r,e,t,n,o,i,s,a){let c=o.length,l=new Uint8Array(Sd),d=eo(l),u=Em(o)&&Em(i),f=u?eo(o):L7,h=u?eo(i):L7;for(let p=0;p<c;s++){if(r(e,t,n,d,s,a),s>=O7)throw new Error("arx: counter overflow");let m=Math.min(Sd,c-p);if(u&&m===Sd){let g=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let y=0,b;y<rT;y++)b=g+y,h[b]=f[b]^d[y];p+=Sd;continue}for(let g=0,y;g<m;g++)y=p+g,i[y]=o[y]^l[g];p+=m}}function vm(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=R7({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return xd(o),xd(s),gm(i),gm(t),(a,c,l,d,u=0)=>{ar(a),ar(c),ar(l);let f=l.length;if(d===void 0&&(d=new Uint8Array(f)),ar(d),xd(u),u<0||u>=O7)throw new Error("arx: counter overflow");if(d.length<f)throw new Error(`arx: output (${d.length}) is shorter than data (${f})`);let h=[],p=a.length,m,g;if(p===32)h.push(m=vd(a)),g=B7;else if(p===16&&t)m=new Uint8Array(32),m.set(a),m.set(a,16),g=tT,h.push(m);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);Em(c)||h.push(c=vd(c));let y=eo(m);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(g,y,eo(c.subarray(0,16)),y),c=c.subarray(16)}let b=16-o;if(b!==c.length)throw new Error(`arx: nonce must be ${b} or 16 bytes`);if(b!==12){let x=new Uint8Array(12);x.set(c,i?0:12-c.length),c=x,h.push(c)}let w=eo(c);return nT(r,g,y,w,l,d,u,s),to(...h),d}}var St=(r,e)=>r[e++]&255|(r[e++]&255)<<8,Sm=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=Ed(e),ar(e,32);let t=St(e,0),n=St(e,2),o=St(e,4),i=St(e,6),s=St(e,8),a=St(e,10),c=St(e,12),l=St(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|o<<6)&7939,this.r[3]=(o>>>7|i<<9)&8191,this.r[4]=(i>>>4|s<<12)&255,this.r[5]=s>>>1&8190,this.r[6]=(s>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let d=0;d<8;d++)this.pad[d]=St(e,16+2*d)}process(e,t,n=!1){let o=n?0:2048,{h:i,r:s}=this,a=s[0],c=s[1],l=s[2],d=s[3],u=s[4],f=s[5],h=s[6],p=s[7],m=s[8],g=s[9],y=St(e,t+0),b=St(e,t+2),w=St(e,t+4),x=St(e,t+6),T=St(e,t+8),k=St(e,t+10),v=St(e,t+12),S=St(e,t+14),I=i[0]+(y&8191),$=i[1]+((y>>>13|b<<3)&8191),N=i[2]+((b>>>10|w<<6)&8191),M=i[3]+((w>>>7|x<<9)&8191),B=i[4]+((x>>>4|T<<12)&8191),D=i[5]+(T>>>1&8191),L=i[6]+((T>>>14|k<<2)&8191),_=i[7]+((k>>>11|v<<5)&8191),A=i[8]+((v>>>8|S<<8)&8191),R=i[9]+(S>>>5|o),P=0,q=P+I*a+$*(5*g)+N*(5*m)+M*(5*p)+B*(5*h);P=q>>>13,q&=8191,q+=D*(5*f)+L*(5*u)+_*(5*d)+A*(5*l)+R*(5*c),P+=q>>>13,q&=8191;let z=P+I*c+$*a+N*(5*g)+M*(5*m)+B*(5*p);P=z>>>13,z&=8191,z+=D*(5*h)+L*(5*f)+_*(5*u)+A*(5*d)+R*(5*l),P+=z>>>13,z&=8191;let j=P+I*l+$*c+N*a+M*(5*g)+B*(5*m);P=j>>>13,j&=8191,j+=D*(5*p)+L*(5*h)+_*(5*f)+A*(5*u)+R*(5*d),P+=j>>>13,j&=8191;let ae=P+I*d+$*l+N*c+M*a+B*(5*g);P=ae>>>13,ae&=8191,ae+=D*(5*m)+L*(5*p)+_*(5*h)+A*(5*f)+R*(5*u),P+=ae>>>13,ae&=8191;let le=P+I*u+$*d+N*l+M*c+B*a;P=le>>>13,le&=8191,le+=D*(5*g)+L*(5*m)+_*(5*p)+A*(5*h)+R*(5*f),P+=le>>>13,le&=8191;let fe=P+I*f+$*u+N*d+M*l+B*c;P=fe>>>13,fe&=8191,fe+=D*a+L*(5*g)+_*(5*m)+A*(5*p)+R*(5*h),P+=fe>>>13,fe&=8191;let xe=P+I*h+$*f+N*u+M*d+B*l;P=xe>>>13,xe&=8191,xe+=D*c+L*a+_*(5*g)+A*(5*m)+R*(5*p),P+=xe>>>13,xe&=8191;let Be=P+I*p+$*h+N*f+M*u+B*d;P=Be>>>13,Be&=8191,Be+=D*l+L*c+_*a+A*(5*g)+R*(5*m),P+=Be>>>13,Be&=8191;let Oe=P+I*m+$*p+N*h+M*f+B*u;P=Oe>>>13,Oe&=8191,Oe+=D*d+L*l+_*c+A*a+R*(5*g),P+=Oe>>>13,Oe&=8191;let Ke=P+I*g+$*m+N*p+M*h+B*f;P=Ke>>>13,Ke&=8191,Ke+=D*u+L*d+_*l+A*c+R*a,P+=Ke>>>13,Ke&=8191,P=(P<<2)+P|0,P=P+q|0,q=P&8191,P=P>>>13,z+=P,i[0]=q,i[1]=z,i[2]=j,i[3]=ae,i[4]=le,i[5]=fe,i[6]=xe,i[7]=Be,i[8]=Oe,i[9]=Ke}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),o=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=o,o=e[a]>>>13,e[a]&=8191;e[0]+=o*5,o=e[0]>>>13,e[0]&=8191,e[1]+=o,o=e[1]>>>13,e[1]&=8191,e[2]+=o,n[0]=e[0]+5,o=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=e[a]+o,o=n[a]>>>13,n[a]&=8191;n[9]-=8192;let i=(o^1)-1;for(let a=0;a<10;a++)n[a]&=i;i=~i;for(let a=0;a<10;a++)e[a]=e[a]&i|n[a];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let s=e[0]+t[0];e[0]=s&65535;for(let a=1;a<8;a++)s=(e[a]+t[a]|0)+(s>>>16)|0,e[a]=s&65535;to(n)}update(e){wm(this);let{buffer:t,blockLen:n}=this;e=Ed(e);let o=e.length;for(let i=0;i<o;){let s=Math.min(n-this.pos,o-i);if(s===n){for(;n<=o-i;i+=n)this.process(e,i);continue}t.set(e.subarray(i,i+s),this.pos),this.pos+=s,i+=s,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){to(this.h,this.r,this.buffer,this.pad)}digestInto(e){wm(this),C7(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:o}=this;if(o){for(t[o++]=1;o<16;o++)t[o]=0;this.process(t,0,!0)}this.finalize();let i=0;for(let s=0;s<8;s++)e[i++]=n[s]>>>0,e[i++]=n[s]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function oT(r){let e=(n,o)=>r(o).update(Ed(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var M7=oT(r=>new Sm(r));function $7(r,e,t,n,o,i=20){let s=r[0],a=r[1],c=r[2],l=r[3],d=e[0],u=e[1],f=e[2],h=e[3],p=e[4],m=e[5],g=e[6],y=e[7],b=o,w=t[0],x=t[1],T=t[2],k=s,v=a,S=c,I=l,$=d,N=u,M=f,B=h,D=p,L=m,_=g,A=y,R=b,P=w,q=x,z=T;for(let ae=0;ae<i;ae+=2)k=k+$|0,R=Q(R^k,16),D=D+R|0,$=Q($^D,12),k=k+$|0,R=Q(R^k,8),D=D+R|0,$=Q($^D,7),v=v+N|0,P=Q(P^v,16),L=L+P|0,N=Q(N^L,12),v=v+N|0,P=Q(P^v,8),L=L+P|0,N=Q(N^L,7),S=S+M|0,q=Q(q^S,16),_=_+q|0,M=Q(M^_,12),S=S+M|0,q=Q(q^S,8),_=_+q|0,M=Q(M^_,7),I=I+B|0,z=Q(z^I,16),A=A+z|0,B=Q(B^A,12),I=I+B|0,z=Q(z^I,8),A=A+z|0,B=Q(B^A,7),k=k+N|0,z=Q(z^k,16),_=_+z|0,N=Q(N^_,12),k=k+N|0,z=Q(z^k,8),_=_+z|0,N=Q(N^_,7),v=v+M|0,R=Q(R^v,16),A=A+R|0,M=Q(M^A,12),v=v+M|0,R=Q(R^v,8),A=A+R|0,M=Q(M^A,7),S=S+B|0,P=Q(P^S,16),D=D+P|0,B=Q(B^D,12),S=S+B|0,P=Q(P^S,8),D=D+P|0,B=Q(B^D,7),I=I+$|0,q=Q(q^I,16),L=L+q|0,$=Q($^L,12),I=I+$|0,q=Q(q^I,8),L=L+q|0,$=Q($^L,7);let j=0;n[j++]=s+k|0,n[j++]=a+v|0,n[j++]=c+S|0,n[j++]=l+I|0,n[j++]=d+$|0,n[j++]=u+N|0,n[j++]=f+M|0,n[j++]=h+B|0,n[j++]=p+D|0,n[j++]=m+L|0,n[j++]=g+_|0,n[j++]=y+A|0,n[j++]=b+R|0,n[j++]=w+P|0,n[j++]=x+q|0,n[j++]=T+z|0}function iT(r,e,t,n){let o=r[0],i=r[1],s=r[2],a=r[3],c=e[0],l=e[1],d=e[2],u=e[3],f=e[4],h=e[5],p=e[6],m=e[7],g=t[0],y=t[1],b=t[2],w=t[3];for(let T=0;T<20;T+=2)o=o+c|0,g=Q(g^o,16),f=f+g|0,c=Q(c^f,12),o=o+c|0,g=Q(g^o,8),f=f+g|0,c=Q(c^f,7),i=i+l|0,y=Q(y^i,16),h=h+y|0,l=Q(l^h,12),i=i+l|0,y=Q(y^i,8),h=h+y|0,l=Q(l^h,7),s=s+d|0,b=Q(b^s,16),p=p+b|0,d=Q(d^p,12),s=s+d|0,b=Q(b^s,8),p=p+b|0,d=Q(d^p,7),a=a+u|0,w=Q(w^a,16),m=m+w|0,u=Q(u^m,12),a=a+u|0,w=Q(w^a,8),m=m+w|0,u=Q(u^m,7),o=o+l|0,w=Q(w^o,16),p=p+w|0,l=Q(l^p,12),o=o+l|0,w=Q(w^o,8),p=p+w|0,l=Q(l^p,7),i=i+d|0,g=Q(g^i,16),m=m+g|0,d=Q(d^m,12),i=i+d|0,g=Q(g^i,8),m=m+g|0,d=Q(d^m,7),s=s+u|0,y=Q(y^s,16),f=f+y|0,u=Q(u^f,12),s=s+u|0,y=Q(y^s,8),f=f+y|0,u=Q(u^f,7),a=a+c|0,b=Q(b^a,16),h=h+b|0,c=Q(c^h,12),a=a+c|0,b=Q(b^a,8),h=h+b|0,c=Q(c^h,7);let x=0;n[x++]=o,n[x++]=i,n[x++]=s,n[x++]=a,n[x++]=g,n[x++]=y,n[x++]=b,n[x++]=w}var sT=vm($7,{counterRight:!1,counterLength:4,allowShortKeys:!1}),aT=vm($7,{counterRight:!1,counterLength:8,extendNonceFn:iT,allowShortKeys:!1});var cT=new Uint8Array(16),U7=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(cT.subarray(t))},lT=new Uint8Array(32);function F7(r,e,t,n,o){let i=r(e,t,lT),s=M7.create(i);o&&U7(s,o),U7(s,n);let a=new Uint8Array(16),c=P7(a);xm(c,0,BigInt(o?o.length:0),!0),xm(c,8,BigInt(n.length),!0),s.update(a);let l=s.digest();return to(i,a),l}var K7=r=>(e,t,n)=>(ar(e,32),ar(t),{encrypt(i,s){let a=i.length,c=a+16;s?ar(s,c):s=new Uint8Array(c),r(e,t,i,s,1);let l=F7(r,e,t,s.subarray(0,-16),n);return s.set(l,a),to(l),s},decrypt(i,s){let a=i.length,c=a-16;if(a<16)throw new Error("encrypted data must be at least 16 bytes");s?ar(s,c):s=new Uint8Array(c);let l=i.subarray(0,-16),d=i.subarray(-16),u=F7(r,e,t,l,n);if(!D7(d,u))throw new Error("invalid tag");return r(e,t,l,s,1),to(u),s}}),Am=bm({blockSize:64,nonceLength:12,tagLength:16},K7(sT)),zY=bm({blockSize:64,nonceLength:24,tagLength:16},K7(aT));function H7(r,e,t){return ti(r),t===void 0&&(t=new Uint8Array(r.outputLen)),_o(r,zr(t),zr(e))}var _m=new Uint8Array([0]),V7=new Uint8Array;function q7(r,e,t,n=32){if(ti(r),ho(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=V7);let i=new Uint8Array(o*r.outputLen),s=_o.create(r,e),a=s._cloneInto(),c=new Uint8Array(s.outputLen);for(let l=0;l<o;l++)_m[0]=l+1,a.update(l===0?V7:c).update(t).update(_m).digestInto(c),i.set(c,r.outputLen*l),s._cloneInto(a);return s.destroy(),a.destroy(),c.fill(0),_m.fill(0),i.slice(0,n)}var Im={hashSHA256(r){return Ir(r.subarray())},getHKDF(r,e){let t=H7(Ir,e,r),o=q7(Ir,t,void 0,96),i=o.subarray(0,32),s=o.subarray(32,64),a=o.subarray(64,96);return[i,s,a]},generateX25519KeyPair(){let r=_a.utils.randomPrivateKey();return{publicKey:_a.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:_a.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return _a.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return Am(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return Am(n,e,t).decrypt(r.subarray(),o)}};var W7=Im;function z7(r){return{generateKeypair:r.generateX25519KeyPair,dh:(e,t)=>r.generateX25519SharedKey(e.privateKey,t).subarray(0,32),encrypt:r.chaCha20Poly1305Encrypt,decrypt:r.chaCha20Poly1305Decrypt,hash:r.hashSHA256,hkdf:r.getHKDF}}var Ds=r=>{let e=Ge(2);return e[0]=r>>8,e[1]=r,e};Ds.bytes=2;var Tc=r=>{if(r.length<2)throw RangeError("Could not decode int16BE");if(r instanceof Uint8Array){let e=0;return e+=r[0]<<8,e+=r[1],e}return r.getUint16(0)};Tc.bytes=2;function G7(r){return{xxHandshakeSuccesses:r.registerCounter("libp2p_noise_xxhandshake_successes_total",{help:"Total count of noise xxHandshakes successes_"}),xxHandshakeErrors:r.registerCounter("libp2p_noise_xxhandshake_error_total",{help:"Total count of noise xxHandshakes errors"}),encryptedPackets:r.registerCounter("libp2p_noise_encrypted_packets_total",{help:"Total count of noise encrypted packets successfully"}),decryptedPackets:r.registerCounter("libp2p_noise_decrypted_packets_total",{help:"Total count of noise decrypted packets"}),decryptErrors:r.registerCounter("libp2p_noise_decrypt_errors_total",{help:"Total count of noise decrypt errors"})}}function Tm(r,e){!e.enabled||!Rs||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${F(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${F(r.privateKey,"hex")}`)):e("Missing local static keys."))}function km(r,e){!e.enabled||!Rs||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${F(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${F(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function Y7(r,e){!e.enabled||!Rs||e(r?`REMOTE_STATIC_PUBLIC_KEY ${F(r.subarray(),"hex")}`:"Missing remote static public key.")}function Cm(r,e){!e.enabled||!Rs||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${F(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function Pm(r,e,t){!t.enabled||!Rs||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&F(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&F(e.k,"hex")}`))}function sn(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Ge(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var Ls=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var uT=0,dT=4294967295,fT="Cipherstate has reached maximum n, a new handshake must be performed",Ad=class{n;bytes;view;constructor(e=uT){this.n=e,this.bytes=re(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,e,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>dT)throw new Error(fT)}};var vi=re(0),Ns=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new Ad(n)}hasKey(){return!!this.k}encryptWithAd(e,t){if(!this.hasKey())return t;this.n.assertValue();let n=this.crypto.encrypt(t,this.n.getBytes(),e,this.k);return this.n.increment(),n}decryptWithAd(e,t,n){if(!this.hasKey())return t;this.n.assertValue();let o=this.crypto.decrypt(t,this.n.getBytes(),e,this.k,n);return this.n.increment(),o}},Rm=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=O(t,"utf-8");this.h=hT(e,n),this.ck=this.h,this.cs=new Ns(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Ns(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ce(this.h,e))}encryptAndHash(e){let t=this.cs.encryptWithAd(this.h,e);return this.mixHash(t),t}decryptAndHash(e){let t=this.cs.decryptWithAd(this.h,e);return this.mixHash(e),t}split(){let[e,t]=this.crypto.hkdf(this.ck,vi);return[new Ns(this.crypto,e),new Ns(this.crypto,t)]}},Dm=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:i,s,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new Rm(t,n),this.ss.mixHash(o),this.initiator=i,this.s=s,this.e=a,this.rs=c,this.re=l}writeE(){if(this.e)throw new Error("ephemeral keypair is already set");let e=this.crypto.generateKeypair();return this.ss.mixHash(e.publicKey),this.e=e,e.publicKey}writeS(){if(!this.s)throw new Error("static keypair is not set");return this.ss.encryptAndHash(this.s.publicKey)}writeEE(){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.re))}writeES(){if(this.initiator){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}else{if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}}writeSE(){if(this.initiator){if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}else{if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}}readE(e,t=0){if(this.re)throw new Error("remote ephemeral public key is already set");if(e.byteLength<t+32)throw new Error("message is not long enough");this.re=e.sublist(t,t+32),this.ss.mixHash(this.re)}readS(e,t=0){if(this.rs)throw new Error("remote static public key is already set");let n=32+(this.ss.cs.hasKey()?16:0);if(e.byteLength<t+n)throw new Error("message is not long enough");let o=e.sublist(t,t+n);return this.rs=this.ss.decryptAndHash(o),n}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}},kc=class extends Dm{writeMessageA(e){return new ce(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ce(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ce(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Ls(`handshake stage 0 validation fail: ${t.message}`)}}readMessageB(e){try{this.readE(e),this.readEE();let t=this.readS(e,32);return this.readES(),this.ss.decryptAndHash(e.sublist(32+t))}catch(t){throw new Ls(`handshake stage 1 validation fail: ${t.message}`)}}readMessageC(e){try{let t=this.readS(e);return this.readSE(),this.ss.decryptAndHash(e.sublist(t))}catch(t){throw new Ls(`handshake stage 2 validation fail: ${t.message}`)}}};function hT(r,e){if(e.length<=32){let t=re(32);return t.set(e),t}else return r.hash(e)}var _d;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let i of t.webtransportCerthashes)n.uint32(10),n.bytes(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={webtransportCerthashes:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let s=t.uint32();switch(s>>>3){case 1:{o.webtransportCerthashes.push(t.bytes());break}default:{t.skipType(s&7);break}}}return o})),e),r.encode=t=>oe(t,r.codec()),r.decode=t=>ne(t,r.codec())})(_d||(_d={}));var Cc;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.identityKey!=null&&t.identityKey.byteLength>0&&(n.uint32(10),n.bytes(t.identityKey)),t.identitySig!=null&&t.identitySig.byteLength>0&&(n.uint32(18),n.bytes(t.identitySig)),t.extensions!=null&&(n.uint32(34),_d.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={identityKey:re(0),identitySig:re(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let s=t.uint32();switch(s>>>3){case 1:{o.identityKey=t.bytes();break}case 2:{o.identitySig=t.bytes();break}case 4:{o.extensions=_d.codec().decode(t,t.uint32());break}default:{t.skipType(s&7);break}}}return o})),e),r.encode=t=>oe(t,r.codec()),r.decode=t=>ne(t,r.codec())})(Cc||(Cc={}));async function Lm(r,e,t){let n=await r.sign(Q7(e));return Cc.encode({identityKey:Lt(r.publicKey),identitySig:n,extensions:t})}async function Nm(r,e,t){try{let n=Cc.decode(r),o=rt(n.identityKey);if(t?.equals(o)===!1)throw new Error(`Payload identity key ${o} does not match expected remote identity key ${t}`);if(!e)throw new Error("Remote static does not exist");let i=Q7(e);if(!await o.verify(i,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new al(n.message)}}function Q7(r){let e=O("noise-libp2p-static-key:");return r instanceof Uint8Array?Re([e,r],e.length+r.length):(r.prepend(e),r)}async function X7(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,d=await Lm(i,a.publicKey,l),u=new kc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});Tm(u.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(u.writeMessageA(vi),e),t.trace("Stage 0 - Initiator finished sending first message."),km(u.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let f=u.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),Cm(u.re,t),Y7(u.rs,t),t.trace("Initiator going to check remote's signature...");let h=await Nm(f,u.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(u.writeMessageC(d),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[p,m]=u.ss.split();return Pm(p,m,t),{payload:h,encrypt:g=>p.encryptWithAd(vi,g),decrypt:(g,y)=>m.decryptWithAd(vi,g,y)}}async function j7(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,d=await Lm(i,a.publicKey,l),u=new kc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});Tm(u.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),u.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),Cm(u.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(u.writeMessageB(d),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),km(u.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let f=u.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let h=await Nm(f,u.rs,c),[p,m]=u.ss.split();return Pm(p,m,t),{payload:h,encrypt:g=>m.encryptWithAd(vi,g),decrypt:(g,y)=>p.decryptWithAd(vi,g,y)}}var J7=16;function e9(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65519){let i=o+65519;i>n.length&&(i=n.length);let s;n instanceof Uint8Array?s=r.encrypt(n.subarray(o,i)):s=r.encrypt(n.sublist(o,i)),e?.encryptedPackets.increment(),yield new ce(Ds(s.byteLength),s)}}}function t9(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65535){let i=o+65535;if(i>n.length&&(i=n.length),i-J7<o)throw new Error("Invalid chunk");let s=n.sublist(o,i),a=n.subarray(o,i-J7);try{let c=r.decrypt(s,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var Id=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:i,prologueBytes:s}=t,{metrics:a}=e;this.components=e;let c=i??W7;this.crypto=z7(c),this.extensions=o,this.metrics=a?G7(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??re(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[_e]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=An(e,{lengthEncoder:Ds,lengthDecoder:Tc,maxDataLength:65535}),o=await this.performHandshakeInitiator(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=rt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:xn(s)}}async secureInbound(e,t){let n=An(e,{lengthEncoder:Ds,lengthDecoder:Tc,maxDataLength:65535}),o=await this.performHandshakeResponder(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=rt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:xn(s)}}async performHandshakeInitiator(e,t,n,o){let i;try{i=await X7({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return i}async performHandshakeResponder(e,t,n,o){let i;try{i=await j7({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return i}async createSecureConnection(e,t){let[n,o]=k7(),i=e.unwrap();return await Je(n,e9(t,this.metrics),i,s=>Xt(s,{lengthDecoder:Tc}),t9(t,this.metrics),n),o}};function Bs(r={}){return e=>new Id(e,r)}function Td(r){if(r!=null){if(typeof r[Symbol.iterator]=="function")return r[Symbol.iterator]();if(typeof r[Symbol.asyncIterator]=="function")return r[Symbol.asyncIterator]();if(typeof r.next=="function")return r}throw new Error("argument is not an iterator or iterable")}var an=class extends Error{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e),this.name="InvalidFrameError"}},Os=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},Ms=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},kd=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},Cd=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},Pd=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},Rd=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},Us=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var r9=new Set([an.name,Os.name,Ms.name,Cd.name,Pd.name,Rd.name,Us.name]),Rc=256*1024,n9=16*1024*1024;var o9={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Rc,maxStreamWindowSize:n9,maxMessageSize:64*1024};function i9(r){if(r.keepAliveInterval<=0)throw new C("keep-alive interval must be positive");if(r.maxInboundStreams<0)throw new C("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams<0)throw new C("max outbound streams must be larger or equal 0");if(r.initialStreamWindowSize<Rc)throw new C("InitialStreamWindowSize must be larger or equal 256 kB");if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new C("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.maxStreamWindowSize>2**32-1)throw new C("MaxStreamWindowSize must be less than equal MAX_UINT32");if(r.maxMessageSize<1024)throw new C("MaxMessageSize must be greater than a kilobyte")}var Ze;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Ze||(Ze={}));var ze;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(ze||(ze={}));var AX=Object.values(ze).filter(r=>typeof r!="string"),s9=0,Br;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Br||(Br={}));var Oo=12;var a9=2**24;function pT(r){if(r[0]!==s9)throw new an("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*a9+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*a9+(r[9]<<16)+(r[10]<<8)+r[11]}}var Dd=class{source;buffer;frameInProgress;constructor(e){this.source=mT(e),this.buffer=new ce,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:o}=t;n===Ze.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new kd("decoding frame already in progress");if(this.buffer.length<Oo)return;let e=pT(this.buffer.subarray(0,Oo));return this.buffer.consume(Oo),e}async readBytes(e){if(this.buffer.length<e){for await(let n of this.source)if(this.buffer.append(n),this.buffer.length>=e)break}let t=this.buffer.sublist(0,e);return this.buffer.consume(e),this.frameInProgress=!1,t}};function mT(r){if(r[Symbol.iterator]!==void 0){let e=r[Symbol.iterator]();return e.return=void 0,{[Symbol.iterator](){return e}}}else if(r[Symbol.asyncIterator]!==void 0){let e=r[Symbol.asyncIterator]();return e.return=void 0,{[Symbol.asyncIterator](){return e}}}else throw new Error("a source must be either an iterable or an async iterable")}function Bm(r){let e=new Uint8Array(Oo);return e[1]=r.type,e[2]=r.flag>>>8,e[3]=r.flag,e[4]=r.streamID>>>24,e[5]=r.streamID>>>16,e[6]=r.streamID>>>8,e[7]=r.streamID,e[8]=r.length>>>24,e[9]=r.length>>>16,e[10]=r.length>>>8,e[11]=r.length,e}function c9(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function Ld(r,e){let t=Td(r).return?.();c9(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var gT=5e3;function Om(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var _n=class{id;direction;timeline;protocol;metadata;source;status;readStatus;writeStatus;log;sinkController;sinkEnd;closed;endErr;streamSource;onEnd;onCloseRead;onCloseWrite;onReset;onAbort;sendCloseWriteTimeout;sendingData;constructor(e){this.sinkController=new AbortController,this.sinkEnd=J(),this.closed=J(),this.log=e.log,this.status="open",this.readStatus="ready",this.writeStatus="ready",this.id=e.id,this.metadata=e.metadata??{},this.direction=e.direction,this.timeline={open:Date.now()},this.sendCloseWriteTimeout=e.sendCloseWriteTimeout??gT,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=Pt({onEnd:t=>{t!=null?this.log.trace("source ended with error",t):this.log.trace("source ended"),this.onSourceEnd(t)}}),this.sink=this.sink.bind(this)}async sink(e){if(this.writeStatus!=="ready")throw new Qo(`writable end state is "${this.writeStatus}" not "ready"`);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);Om(o)&&await o}let n=()=>{Ld(e,this.log)};try{this.sinkController.signal.addEventListener("abort",n),this.log.trace("sink reading from source");for await(let o of e){o=o instanceof Uint8Array?new ce(o):o;let i=this.sendData(o,t);Om(i)&&(this.sendingData=J(),await i,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.log.trace("closing gracefully"),this.status="closing",await ke(Promise.all([this.closeWrite(e),this.closeRead(e),this.closed.promise]),e?.signal),this.status="closed",this.log.trace("closed gracefully")}async closeRead(e={}){if(this.readStatus==="closing"||this.readStatus==="closed")return;this.log.trace('closing readable end of stream with starting read status "%s"',this.readStatus);let t=this.readStatus;this.readStatus="closing",this.status!=="reset"&&this.status!=="aborted"&&this.timeline.closeRead==null&&(this.log.trace("send close read to remote"),await this.sendCloseRead(e)),t==="ready"&&(this.log.trace("ending internal source queue with %d queued bytes",this.streamSource.readableLength),this.streamSource.end()),this.log.trace("closed readable end of stream")}async closeWrite(e={}){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.log.trace('closing writable end of stream with starting write status "%s"',this.writeStatus),this.writeStatus==="ready"&&(this.log.trace("sink was never sunk, sink an empty array"),await ke(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await ke(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await ke(this.sinkEnd.promise,e.signal)),this.writeStatus="closed",this.log.trace("closed writable end of stream"))}abort(e){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;this.log("abort with error",e),this.log("try to send reset to remote");let t=this.sendReset();Om(t)&&t.catch(n=>{this.log.error("error sending reset message",n)}),this.status="aborted",this.timeline.abort=Date.now(),this._closeSinkAndSource(e),this.onAbort?.(e)}reset(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;let e=new ul("stream reset");this.status="reset",this.timeline.reset=Date.now(),this._closeSinkAndSource(e),this.onReset?.()}_closeSinkAndSource(e){this._closeSink(e),this._closeSource(e)}_closeSink(e){this.writeStatus==="writing"&&(this.log.trace("end sink source"),this.sinkController.abort()),this.onSinkEnd(e)}_closeSource(e){this.readStatus!=="closing"&&this.readStatus!=="closed"&&(this.log.trace("ending source with %d bytes to be read by consumer",this.streamSource.readableLength),this.readStatus="closing",this.streamSource.end(e))}remoteCloseWrite(){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("received remote close write but local source is already closed");return}this.log.trace("remote close write"),this._closeSource()}remoteCloseRead(){if(this.writeStatus==="closing"||this.writeStatus==="closed"){this.log("received remote close read but local sink is already closed");return}this.log.trace("remote close read"),this._closeSink()}destroy(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset"){this.log("received destroy but we are already closed");return}this.log.trace("stream destroyed"),this._closeSinkAndSource()}sourcePush(e){this.streamSource.push(e)}sourceReadableLength(){return this.streamSource.readableLength}};var Or;(function(r){r[r.Init=0]="Init",r[r.SYNSent=1]="SYNSent",r[r.SYNReceived=2]="SYNReceived",r[r.Established=3]="Established",r[r.Finished=4]="Finished"})(Or||(Or={}));var Nd=class extends _n{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Or.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=Rc,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=gi(this.source,()=>{this.sendWindowUpdate()})}async sendNewStream(){}async sendData(e,t={}){for(e=e.sublist();e.byteLength!==0;){if(this.sendWindowCapacity===0&&(this.log?.trace("wait for send window capacity, status %s",this.status),await this.waitForSendWindowCapacity(t),this.status==="closed"||this.status==="aborted"||this.status==="reset")){this.log?.trace("%s while waiting for send window capacity",this.status);return}let n=Math.min(this.sendWindowCapacity,this.config.maxMessageSize-Oo,e.length),o=this.getSendFlags();this.sendFrame({type:Ze.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:Ze.WindowUpdate,flag:ze.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|ze.FIN;this.sendFrame({type:Ze.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,o=()=>{this.status==="open"||this.status==="closing"?n(new mt("Stream aborted")):t()};e.signal?.addEventListener("abort",o);try{await new Promise((i,s)=>{this.sendWindowCapacityUpdate=()=>{i()},n=s,t=i})}finally{e.signal?.removeEventListener("abort",o)}}handleWindowUpdate(e){this.log?.trace("stream received window update id=%s",this._id),this.processFlags(e.flag);let t=this.sendWindowCapacity;this.sendWindowCapacity+=e.length,t===0&&e.length>0&&this.sendWindowCapacityUpdate?.()}async handleData(e,t){if(this.log?.trace("stream received data id=%s",this._id),this.processFlags(e.flag),this.recvWindowCapacity<e.length)throw new Us("Receive window exceeded");let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&ze.ACK)===ze.ACK&&this.state===Or.SYNSent&&(this.state=Or.Established),(e&ze.FIN)===ze.FIN&&this.remoteCloseWrite(),(e&ze.RST)===ze.RST&&this.reset()}getSendFlags(){switch(this.state){case Or.Init:return this.state=Or.SYNSent,ze.SYN;case Or.SYNReceived:return this.state=Or.Established,ze.ACK;default:return 0}}sendWindowUpdate(){let e=this.getSendFlags(),t=Date.now(),n=this.getRTT();if(e===0&&n>-1&&t-this.epochStart<n*4&&(this.recvWindow=Math.min(this.recvWindow*2,this.config.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:Ze.WindowUpdate,flag:e,streamID:this._id,length:o})}};var l9="/yamux/1.0.0",yT=500,Bd=class{protocol=l9;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[_e]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new Mm(this._components,{...this._init,...e})}},Mm=class{protocol=l9;source;sink;config;log;logger;closeController;nextStreamID;_streams;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;onIncomingStream;onStreamEnd;constructor(e,t){this.client=t.direction==="outbound",this.config={...o9,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),i9(this.config),this.closeController=new AbortController,K(1/0,this.closeController.signal),this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=Pt({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=Td(n);if(a.return!=null){let c=a.return();wT(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},i,s;try{let a=new Dd(n);try{this.closeController.signal.addEventListener("abort",o);for await(let c of a.emitFrames())await this.handleFrame(c.header,c.readData)}finally{this.closeController.signal.removeEventListener("abort",o)}i=Br.NormalTermination}catch(a){r9.has(a.name)?(this.log?.error("protocol error in sink",a),i=Br.ProtocolError):(this.log?.error("internal error in sink",a),i=Br.InternalError),s=a}this.log?.trace("muxer sink ended"),s!=null?this.abort(s,i):await this.close({reason:i})},this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log?.trace("muxer created"),this.config.enableKeepAlive&&this.keepAliveLoop().catch(n=>this.log?.error("keepalive error: %s",n)),this.ping().catch(n=>this.log?.error("ping error: %s",n))}get streams(){return Array.from(this._streams.values())}newStream(e){if(this.remoteGoAway!==void 0)throw new fn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new fn("Muxer closed locally");let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new co("max outbound streams exceeded");this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,Or.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new fn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new fn("Muxer closed locally");if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,i)=>{let s=()=>{i(new fn("Muxer closed locally"))};this.closeController.signal.addEventListener("abort",s,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",s),o()}}),resolve:e};let t=Date.now();this.sendPing(this.activePing.id);try{await this.activePing.promise}finally{delete this.activePing}let n=Date.now();this.rtt=n-t}else await this.activePing.promise;return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.closeController.signal.aborted)return;let t=e?.reason??Br.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(yT);K(1/0,n),e={...e,signal:n}}try{await Promise.all([...this._streams.values()].map(async n=>n.close(e))),this.sendGoAway(t),this._closeMuxer()}catch(n){this.abort(n)}}abort(e,t){if(!this.closeController.signal.aborted){t=t??Br.InternalError,this.log?.error("muxer abort reason=%s error=%s",t,e);for(let n of this._streams.values())n.abort(e);this.sendGoAway(t),this._closeMuxer()}}isClosed(){return this.closeController.signal.aborted}_closeMuxer(){this.closeController.abort(),this.source.end()}_newStream(e,t,n,o){if(this._streams.get(e)!=null)throw new C("Stream already exists with that id");let i=new Nd({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(i)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return i}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:o,length:i}=e;if(this.log?.trace("received frame %o",e),n===0)switch(o){case Ze.Ping:{this.handlePing(e);return}case Ze.GoAway:{this.handleGoAway(i);return}default:throw new an("Invalid frame type")}else switch(e.type){case Ze.Data:case Ze.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new an("Invalid frame type")}}handlePing(e){if(e.flag===ze.SYN)this.log?.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,ze.ACK);else if(e.flag===ze.ACK)this.log?.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new an("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new Os("ping not requested");if(this.activePing.id!==e)throw new Ms("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Br[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:o,type:i}=e;(o&ze.SYN)===ze.SYN&&this.incomingStream(n);let s=this._streams.get(n);if(s===void 0){if(i===Ze.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.trace("frame for missing stream id=%s",n);return}switch(i){case Ze.WindowUpdate:{s.handleWindowUpdate(e);return}case Ze.Data:{if(t===void 0)throw new Error("unreachable");await s.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new C("Both endpoints are clients");if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Ze.WindowUpdate,flag:ze.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Ze.WindowUpdate,flag:ze.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,Or.SYNReceived,"inbound");this.numInboundStreams++,this._streams.set(e,t),this.onIncomingStream?.(t)}sendFrame(e,t){if(this.log?.trace("sending frame %o",e),e.type===Ze.Data){if(t===void 0)throw new an("Invalid frame");this.source.push(new ce(Bm(e),t))}else this.source.push(Bm(e))}sendPing(e,t=ze.SYN){t===ze.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:Ze.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Br.NormalTermination){this.log?.("sending GoAway reason=%s",Br[e]),this.localGoAway=e,this.sendFrame({type:Ze.GoAway,flag:0,streamID:0,length:e})}};function wT(r){return r!=null&&typeof r.then=="function"}function u9(r={}){return e=>new Bd(e,r)}var Od=globalThis.CustomEvent??Event;async function*Er(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered==null?!1:e.ordered,o=new EventTarget,i=[],s=J(),a=J(),c=!1,l,d=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(i.length===t&&(s=J(),await s.promise),d)break;let m={done:!1};i.push(m),p().then(g=>{m.done=!0,m.ok=!0,m.value=g,o.dispatchEvent(new Od("task-complete"))},g=>{m.done=!0,m.err=g,o.dispatchEvent(new Od("task-complete"))})}c=!0,o.dispatchEvent(new Od("task-complete"))}catch(p){l=p,o.dispatchEvent(new Od("task-complete"))}});function u(){return n?i[0]?.done:!!i.find(p=>p.done)}function*f(){for(;i.length>0&&i[0].done;){let p=i[0];if(i.shift(),p.ok)yield p.value;else throw d=!0,s.resolve(),p.err;s.resolve()}}function*h(){for(;u();)for(let p=0;p<i.length;p++)if(i[p].done){let m=i[p];if(i.splice(p,1),p--,m.ok)yield m.value;else throw d=!0,s.resolve(),m.err;s.resolve()}}for(;;){if(u()||(a=J(),await a.promise),l!=null)throw l;if(n?yield*f():yield*h(),c&&i.length===0)break}}var d9="libp2p",f9="autonat",h9="1.0.0";var we;(function(r){let e;(function(l){l.DIAL="DIAL",l.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(l){l[l.DIAL=0]="DIAL",l[l.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),function(l){l.codec=()=>He(t)}(e=r.MessageType||(r.MessageType={}));let n;(function(l){l.OK="OK",l.E_DIAL_ERROR="E_DIAL_ERROR",l.E_DIAL_REFUSED="E_DIAL_REFUSED",l.E_BAD_REQUEST="E_BAD_REQUEST",l.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(l){l[l.OK=0]="OK",l[l.E_DIAL_ERROR=100]="E_DIAL_ERROR",l[l.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",l[l.E_BAD_REQUEST=200]="E_BAD_REQUEST",l[l.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(o||(o={})),function(l){l.codec=()=>He(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let d;l.codec=()=>(d==null&&(d=ie((u,f,h={})=>{if(h.lengthDelimited!==!1&&f.fork(),u.id!=null&&(f.uint32(10),f.bytes(u.id)),u.addrs!=null)for(let p of u.addrs)f.uint32(18),f.bytes(p);h.lengthDelimited!==!1&&f.ldelim()},(u,f,h={})=>{let p={addrs:[]},m=f==null?u.len:u.pos+f;for(;u.pos<m;){let g=u.uint32();switch(g>>>3){case 1:{p.id=u.bytes();break}case 2:{if(h.limits?.addrs!=null&&p.addrs.length===h.limits.addrs)throw new Ue('Decode error - map field "addrs" had too many elements');p.addrs.push(u.bytes());break}default:{u.skipType(g&7);break}}}return p})),d),l.encode=u=>oe(u,l.codec()),l.decode=(u,f)=>ne(u,l.codec(),f)})(i=r.PeerInfo||(r.PeerInfo={}));let s;(function(l){let d;l.codec=()=>(d==null&&(d=ie((u,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),u.peer!=null&&(f.uint32(10),r.PeerInfo.codec().encode(u.peer,f)),h.lengthDelimited!==!1&&f.ldelim()},(u,f,h={})=>{let p={},m=f==null?u.len:u.pos+f;for(;u.pos<m;){let g=u.uint32();switch(g>>>3){case 1:{p.peer=r.PeerInfo.codec().decode(u,u.uint32(),{limits:h.limits?.peer});break}default:{u.skipType(g&7);break}}}return p})),d),l.encode=u=>oe(u,l.codec()),l.decode=(u,f)=>ne(u,l.codec(),f)})(s=r.Dial||(r.Dial={}));let a;(function(l){let d;l.codec=()=>(d==null&&(d=ie((u,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),u.status!=null&&(f.uint32(8),r.ResponseStatus.codec().encode(u.status,f)),u.statusText!=null&&(f.uint32(18),f.string(u.statusText)),u.addr!=null&&(f.uint32(26),f.bytes(u.addr)),h.lengthDelimited!==!1&&f.ldelim()},(u,f,h={})=>{let p={},m=f==null?u.len:u.pos+f;for(;u.pos<m;){let g=u.uint32();switch(g>>>3){case 1:{p.status=r.ResponseStatus.codec().decode(u);break}case 2:{p.statusText=u.string();break}case 3:{p.addr=u.bytes();break}default:{u.skipType(g&7);break}}}return p})),d),l.encode=u=>oe(u,l.codec()),l.decode=(u,f)=>ne(u,l.codec(),f)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=ie((l,d,u={})=>{u.lengthDelimited!==!1&&d.fork(),l.type!=null&&(d.uint32(8),r.MessageType.codec().encode(l.type,d)),l.dial!=null&&(d.uint32(18),r.Dial.codec().encode(l.dial,d)),l.dialResponse!=null&&(d.uint32(26),r.DialResponse.codec().encode(l.dialResponse,d)),u.lengthDelimited!==!1&&d.ldelim()},(l,d,u={})=>{let f={},h=d==null?l.len:l.pos+d;for(;l.pos<h;){let p=l.uint32();switch(p>>>3){case 1:{f.type=r.MessageType.codec().decode(l);break}case 2:{f.dial=r.Dial.codec().decode(l,l.uint32(),{limits:u.limits?.dial});break}case 3:{f.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:u.limits?.dialResponse});break}default:{l.skipType(p&7);break}}}return f})),c),r.encode=l=>oe(l,r.codec()),r.decode=(l,d)=>ne(l,r.codec(),d)})(we||(we={}));var Um=4,Md=class{components;startupDelay;refreshInterval;protocol;timeout;maxInboundStreams;maxOutboundStreams;verifyAddressTimeout;started;log;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:autonat"),this.started=!1,this.protocol=`/${t.protocolPrefix??d9}/${f9}/${h9}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??1,this.maxOutboundStreams=t.maxOutboundStreams??1,this.startupDelay=t.startupDelay??5e3,this.refreshInterval=t.refreshInterval??6e4,this._verifyExternalAddresses=this._verifyExternalAddresses.bind(this)}[Symbol.toStringTag]="@libp2p/autonat";isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.startupDelay),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),clearTimeout(this.verifyAddressTimeout),this.started=!1}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout),n=()=>{e.stream.abort(new mt)};t.addEventListener("abort",n,{once:!0}),K(1/0,t);try{let o=this;await Je(e.stream,i=>Xt(i),async function*(i){let s=await Ac(i);if(s==null){o.log("no message received"),yield we.encode({type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_BAD_REQUEST,statusText:"No message was sent"}});return}let a;try{a=we.decode(s)}catch(c){o.log.error("could not decode message",c),yield we.encode({type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_BAD_REQUEST,statusText:"Could not decode message"}});return}yield we.encode(await o.handleAutonatMessage(a,e.connection,{signal:t}))},i=>Qt(i),e.stream)}catch(o){this.log.error("error handling incoming autonat stream",o)}finally{t.removeEventListener("abort",n)}}_verifyExternalAddresses(){this.verifyExternalAddresses().catch(e=>{this.log.error("error verifying external address",e)})}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(u=>u.toOptions().host),i=e.dial;if(i==null)return this.log.error("dial was missing from message"),{type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let s,a=i.peer;if(a?.id==null)return this.log.error("PeerId missing from message"),{type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let u=Ce(a.id);s=yt(u)}catch(u){return this.log.error("invalid PeerId",u),{type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}}}if(this.log("incoming request from %p",s),!t.remotePeer.equals(s))return this.log("target peer %p did not equal sending peer %p",s,t.remotePeer),{type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(u=>Y(u)).filter(u=>{let f=u.toOptions().host===t.remoteAddr.toOptions().host;return this.log.trace("request to dial %a was sent from %a is same host %s",u,t.remoteAddr,f),f}).filter(u=>{let f=u.toOptions().host,h=!(Ot(f)??!1);return this.log.trace("host %s was public %s",f,h),h}).filter(u=>{let f=u.toOptions().host,h=!o.includes(f);return this.log.trace("host %s was not our host %s",f,h),h}).filter(u=>{let f=!!this.components.transportManager.dialTransportForMultiaddr(u);return this.log.trace("transport for %a is supported %s",u,f),f}).map(u=>(u.getPeerId()==null&&(u=u.encapsulate(`/p2p/${s.toString()}`)),u));if(c.length===0)return this.log("no valid multiaddrs for %p in message",s),{type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(u=>u.toString()).join(", "),s);let l="",d=c[0];for await(let u of c){let f;d=u;try{if(f=await this.components.connectionManager.openConnection(u,n),!f.remoteAddr.equals(u))throw this.log.error("tried to dial %a but dialed %a",u,f.remoteAddr),new Error("Unexpected remote address");return this.log("Success %p",s),{type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.OK,addr:f.remoteAddr.decapsulateCode(ee("p2p").code).bytes}}}catch(h){this.log("could not dial %p",s,h),l=h.message}finally{f!=null&&await f.close()}}return{type:we.MessageType.DIAL_RESPONSE,dialResponse:{status:we.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:d.bytes}}}async verifyExternalAddresses(){if(clearTimeout(this.verifyAddressTimeout),!this.isStarted())return;let e=this.components.addressManager,t=e.getObservedAddrs().filter(i=>{let s=i.toOptions();return!(Ot(s.host)??!1)});if(t.length===0){this.log("no public addresses found, not requesting verification"),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval);return}let n=AbortSignal.timeout(this.timeout);K(1/0,n);let o=this;try{this.log("verify multiaddrs %s",t.map(l=>l.toString()).join(", "));let i=we.encode({type:we.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:t.map(l=>l.bytes)}}}),s={},a=[],c=async l=>{let d=()=>{};try{this.log("asking %p to verify multiaddr",l.id);let u=await o.components.connectionManager.openConnection(l.id,{signal:n}),f=await u.newStream(this.protocol,{signal:n});d=()=>{f.abort(new mt)},n.addEventListener("abort",d,{once:!0});let h=await Je([i],m=>Qt(m),f,m=>Xt(m),async m=>Ac(m));if(h==null){this.log("no response received from %p",u.remotePeer);return}let p=we.decode(h);if(p.type!==we.MessageType.DIAL_RESPONSE||p.dialResponse==null){this.log("invalid autonat response from %p",u.remotePeer);return}if(p.dialResponse.status===we.ResponseStatus.OK){let m=u.remoteAddr.toOptions(),g;if(m.family===4)g=m.host.split(".")[0];else if(m.family===6)g=m.host.split(":")[0];else{this.log('remote address "%s" was not IP4 or IP6?',m.host);return}if(a.includes(g)){this.log("already have response from network segment %d - %s",g,m.host);return}a.push(g)}return p.dialResponse}catch(u){this.log.error("error asking remote to verify multiaddr",u)}finally{n.removeEventListener("abort",d)}};for await(let l of Er(jt(this.components.randomWalk.walk({signal:n}),d=>async()=>c(d)),{concurrency:Um}))try{if(l==null)continue;let d=l.addr==null?t[0]:Y(l.addr);if(this.log("autonat response for %a is %s",d,l.status),l.status===we.ResponseStatus.E_BAD_REQUEST||l.status===we.ResponseStatus.E_DIAL_REFUSED||l.addr==null&&t.length>1)continue;if(!t.some(f=>f.equals(d))){this.log("peer reported %a as %s but it was not in our observed address list",d,l.status);continue}let u=d.toString();if(s[u]==null&&(s[u]={success:0,failure:0}),l.status===we.ResponseStatus.OK?s[u].success++:l.status===we.ResponseStatus.E_DIAL_ERROR&&s[u].failure++,s[u].success===Um){this.log("%a is externally dialable",d),e.confirmObservedAddr(d);return}if(s[u].failure===Um){this.log("%a is not externally dialable",d),e.removeObservedAddr(d);return}}catch(d){this.log.error("could not verify external address",d)}}finally{this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval)}}};function p9(r={}){return e=>new Md(e,r)}var AT=W("dns4"),_T=W("dns6"),IT=W("dnsaddr"),Uo=nt(W("dns"),IT,AT,_T),Ud=nt(W("ip4"),W("ip6")),Fs=nt(se(Ud,W("tcp")),se(Uo,W("tcp"))),Fd=se(Ud,W("udp")),TT=se(Fd,W("utp")),kT=se(Fd,W("quic")),CT=se(Fd,W("quic-v1")),Fm=nt(se(Fs,W("ws")),se(Uo,W("ws"))),$s=nt(se(Fm,W("p2p")),Fm),$m=nt(se(Fs,W("wss")),se(Uo,W("wss")),se(Fs,W("tls"),W("ws")),se(Uo,W("tls"),W("ws"))),Si=nt(se($m,W("p2p")),$m),Km=nt(se(Fs,W("http")),se(Ud,W("http")),se(Uo,W("http"))),Vm=nt(se(Fs,W("https")),se(Ud,W("https")),se(Uo,W("https"))),m9=se(Fd,W("webrtc-direct"),W("certhash")),w9=nt(se(m9,W("p2p")),m9),g9=se(CT,W("webtransport"),W("certhash"),W("certhash")),b9=nt(se(g9,W("p2p")),g9),x9=nt(se($s,W("p2p-webrtc-star"),W("p2p")),se(Si,W("p2p-webrtc-star"),W("p2p")),se($s,W("p2p-webrtc-star")),se(Si,W("p2p-webrtc-star"))),Rj=nt(se($s,W("p2p-websocket-star"),W("p2p")),se(Si,W("p2p-websocket-star"),W("p2p")),se($s,W("p2p-websocket-star")),se(Si,W("p2p-websocket-star"))),E9=nt(se(Km,W("p2p-webrtc-direct"),W("p2p")),se(Vm,W("p2p-webrtc-direct"),W("p2p")),se(Km,W("p2p-webrtc-direct")),se(Vm,W("p2p-webrtc-direct"))),Ai=nt(Fm,$m,Km,Vm,x9,E9,Fs,TT,kT,Uo,w9,b9),Dj=nt(se(Ai,W("p2p-stardust"),W("p2p")),se(Ai,W("p2p-stardust"))),Mo=nt(se(Ai,W("p2p")),x9,E9,w9,b9,W("p2p")),y9=nt(se(Mo,W("p2p-circuit"),Mo),se(Mo,W("p2p-circuit")),se(W("p2p-circuit"),Mo),se(Ai,W("p2p-circuit")),se(W("p2p-circuit"),Ai),W("p2p-circuit")),v9=()=>nt(se(y9,v9),y9),ro=v9(),S9=nt(se(ro,Mo,ro),se(Mo,ro),se(ro,Mo),ro,Mo);var Lj=nt(se(ro,W("webrtc"),W("p2p")),se(ro,W("webrtc")),se(Ai,W("webrtc"),W("p2p")),se(Ai,W("webrtc")),W("webrtc"));function A9(r){function e(t){let n;try{n=Y(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function se(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(o=>(n=typeof o=="function"?o().partialMatch(t):o.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:A9(e),partialMatch:e}}function nt(...r){function e(n){let o=null;return r.some(i=>{let s=typeof i=="function"?i().partialMatch(n):i.partialMatch(n);return s!=null?(o=s,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:A9(e),partialMatch:e}}function W(r){let e=r;function t(o){let i;try{i=Y(o)}catch{return!1}let s=i.protoNames();return s.length===1&&s[0]===e}function n(o){return o.length===0?null:o[0]===e?o.slice(1):null}return{toString:function(){return e},matches:t,partialMatch:n}}var RT="bootstrap",DT=50,LT=1e3,Hm=class extends Ee{static tag="bootstrap";log;timer;list;timeout;components;_init;constructor(e,t={list:[]}){if(t.list==null||t.list.length===0)throw new Error("Bootstrap requires a list of peer addresses");super(),this.components=e,this.log=e.logger.forComponent("libp2p:bootstrap"),this.timeout=t.timeout??LT,this.list=[];for(let n of t.list){if(!S9.matches(n)){this.log.error("Invalid multiaddr");continue}let o=Y(n),i=o.getPeerId();if(i==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let s={id:De(i),multiaddrs:[o]};this.list.push(s)}this._init=t}[Yo]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[_e]=["@libp2p/peer-discovery"];isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error(e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??RT]:{value:this._init.tagValue??DT,ttl:this._init.tagTTL}},multiaddrs:e.multiaddrs}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e}),this.components.connectionManager.openConnection(e.id).catch(t=>{this.log.error("could not dial bootstrap peer %p",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function _9(r){return e=>new Hm(e,r)}var Dc;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&t.payload.byteLength>0&&(n.uint32(26),n.bytes(t.payload)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:re(0),payloadType:re(0),payload:re(0),signature:re(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=t.bytes();break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(Dc||(Dc={}));var $d=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var vr=class r{static createFromProtobuf=async e=>{let t=Dc.decode(e),n=rt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,i=e.marshal(),s=I9(n,o,i),a=await t.sign(s.subarray());return new r({publicKey:t.publicKey,payloadType:o,payload:i,signature:a})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new $d("Envelope signature is not valid for the given domain");return n};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:o,signature:i}=e;this.publicKey=t,this.payloadType=n,this.payload=o,this.signature=i}marshal(){return this.marshaled==null&&(this.marshaled=Dc.encode({publicKey:Lt(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return te(this.marshal(),e.marshal())}async validate(e){let t=I9(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},I9=(r,e,t)=>{let n=O(r),o=Ve(n.byteLength),i=Ve(e.length),s=Ve(t.length);return new ce(o,n,i,e,s,t)};function T9(r,e){let t=(n,o)=>n.toString().localeCompare(o.toString());return r.length!==e.length?!1:(e.sort(t),r.sort(t).every((n,o)=>e[o].equals(n)))}var k9="libp2p-peer-record",C9=Uint8Array.from([3,1]);var Lc;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=ie((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.multiaddr!=null&&i.multiaddr.byteLength>0&&(s.uint32(10),s.bytes(i.multiaddr)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={multiaddr:re(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let d=i.uint32();switch(d>>>3){case 1:{c.multiaddr=i.bytes();break}default:{i.skipType(d&7);break}}}return c})),o),n.encode=i=>oe(i,n.codec()),n.decode=(i,s)=>ne(i,n.codec(),s)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=ie((n,o,i={})=>{if(i.lengthDelimited!==!1&&o.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(o.uint32(10),o.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(o.uint32(16),o.uint64(n.seq)),n.addresses!=null)for(let s of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(s,o);i.lengthDelimited!==!1&&o.ldelim()},(n,o,i={})=>{let s={peerId:re(0),seq:0n,addresses:[]},a=o==null?n.len:n.pos+o;for(;n.pos<a;){let c=n.uint32();switch(c>>>3){case 1:{s.peerId=n.bytes();break}case 2:{s.seq=n.uint64();break}case 3:{if(i.limits?.addresses!=null&&s.addresses.length===i.limits.addresses)throw new Ue('Decode error - map field "addresses" had too many elements');s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32(),{limits:i.limits?.addresses$}));break}default:{n.skipType(c&7);break}}}return s})),t),r.encode=n=>oe(n,r.codec()),r.decode=(n,o)=>ne(n,r.codec(),o)})(Lc||(Lc={}));var Wt=class r{static createFromProtobuf=e=>{let t=Lc.decode(e),n=yt(Ce(t.peerId)),o=(t.addresses??[]).map(s=>Y(s.multiaddr)),i=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:i})};static DOMAIN=k9;static CODEC=C9;peerId;multiaddrs;seqNumber;domain=r.DOMAIN;codec=r.CODEC;marshaled;constructor(e){let{peerId:t,multiaddrs:n,seqNumber:o}=e;this.peerId=t,this.multiaddrs=n??[],this.seqNumber=o??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=Lc.encode({peerId:this.peerId.toMultihash().bytes,seq:BigInt(this.seqNumber),addresses:this.multiaddrs.map(e=>({multiaddr:e.bytes}))})),this.marshaled}equals(e){return!(!(e instanceof r)||!this.peerId.equals(e.peerId)||this.seqNumber!==e.seqNumber||!T9(this.multiaddrs,e.multiaddrs))}};function ot(r,e){let t=An(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var qm=1e3,P9=60*qm,R9=290;var hZ=2*60*P9,D9=1,L9=2e3,N9=100;var Nc="circuit-relay-relay",Kd=`${io}-circuit-relay`,pZ=`${io}-circuit-relay-source`,mZ=2*P9,gZ=BigInt(1<<17),_i="/libp2p/circuit/relay/0.2.0/hop",Wm="/libp2p/circuit/relay/0.2.0/stop",yZ=30*qm,wZ=30*qm,zm=300,B9=4096,O9=.001;var Fo;(function(r){let e;(function(o){o.RESERVE="RESERVE",o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.RESERVE=0]="RESERVE",o[o.CONNECT=1]="CONNECT",o[o.STATUS=2]="STATUS"})(t||(t={})),function(o){o.codec=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ie((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),Ks.codec().encode(o.peer,i)),o.reservation!=null&&(i.uint32(26),Vd.codec().encode(o.reservation,i)),o.limit!=null&&(i.uint32(34),Vs.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(40),At.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=Ks.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.reservation=Vd.codec().decode(o,o.uint32(),{limits:s.limits?.reservation});break}case 4:{a.limit=Vs.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 5:{a.status=At.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>oe(o,r.codec()),r.decode=(o,i)=>ne(o,r.codec(),i)})(Fo||(Fo={}));var In;(function(r){let e;(function(o){o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.CONNECT=0]="CONNECT",o[o.STATUS=1]="STATUS"})(t||(t={})),function(o){o.codec=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ie((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),Ks.codec().encode(o.peer,i)),o.limit!=null&&(i.uint32(26),Vs.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(32),At.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=Ks.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.limit=Vs.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 4:{a.status=At.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>oe(o,r.codec()),r.decode=(o,i)=>ne(o,r.codec(),i)})(In||(In={}));var Ks;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:re(0),addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new Ue('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(Ks||(Ks={}));var Vd;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);t.voucher!=null&&(n.uint32(26),qd.codec().encode(t.voucher,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={expire:0n,addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.expire=t.uint64();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new Ue('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}case 3:{i.voucher=qd.codec().decode(t,t.uint32(),{limits:o.limits?.voucher});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(Vd||(Vd={}));var Vs;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.duration=t.uint32();break}case 2:{i.data=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(Vs||(Vs={}));var At;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(At||(At={}));var Gm;(function(r){r[r.UNUSED=0]="UNUSED",r[r.OK=100]="OK",r[r.RESERVATION_REFUSED=200]="RESERVATION_REFUSED",r[r.RESOURCE_LIMIT_EXCEEDED=201]="RESOURCE_LIMIT_EXCEEDED",r[r.PERMISSION_DENIED=202]="PERMISSION_DENIED",r[r.CONNECTION_FAILED=203]="CONNECTION_FAILED",r[r.NO_RESERVATION=204]="NO_RESERVATION",r[r.MALFORMED_MESSAGE=400]="MALFORMED_MESSAGE",r[r.UNEXPECTED_MESSAGE=401]="UNEXPECTED_MESSAGE"})(Gm||(Gm={}));(function(r){r.codec=()=>He(Gm)})(At||(At={}));var Hd;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={relay:re(0),peer:re(0),expiration:0n},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.relay=t.bytes();break}case 2:{i.peer=t.bytes();break}case 3:{i.expiration=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(Hd||(Hd={}));var qd;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&(n.uint32(26),Hd.codec().encode(t.payload,n)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:re(0),payloadType:re(0),signature:re(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=Hd.codec().decode(t,t.uint32(),{limits:o.limits?.payload});break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(qd||(qd={}));function Ym(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Bc=class{expires;bytes;constructor(e){e?.duration!=null&&e?.duration!==0&&(this.expires=Date.now()+e.duration*1e3),this.bytes=e?.data,this.bytes===0n&&(this.bytes=void 0),this.onData=this.onData.bind(this)}onData(e){this.bytes!=null&&(this.bytes-=BigInt(e.byteLength),this.bytes<0n&&(this.bytes=0n))}getLimits(){if(this.expires==null&&this.bytes==null)return;let e={};if(this.bytes!=null){let t=this;Object.defineProperty(e,"bytes",{get(){return t.bytes}})}if(this.expires!=null){let t=this;Object.defineProperty(e,"seconds",{get(){return Math.round(((t.expires??0)-Date.now())/1e3)}})}return e}},M9=We(ve(qg.matchers[0],ye("p2p-circuit"),Pe(Ne())));function Qm(r){let{stream:e,remoteAddr:t,logger:n,onDataRead:o,onDataWrite:i}=r,s=n.forComponent("libp2p:stream:converter"),a=!1,c=!1,l=e.close.bind(e);e.close=async p=>{await l(p),h(!0)};let d=e.abort.bind(e);e.abort=p=>{d(p),h(!0)};let u=e.sink.bind(e);e.sink=async p=>{try{await u(Je(p,m=>gi(m,g=>i?.(g))))}catch(m){m.type!=="aborted"&&s.error("%s error in sink",t,m)}finally{c=!0,h()}};let f={log:s,sink:e.sink,source:async function*(){try{for await(let p of e.source)o?.(p),yield p}finally{a=!0,h()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function h(p){p===!0&&(a=!0,c=!0),a&&c&&f.timeline.close==null&&(f.timeline.close=Date.now())}return f}var Wd=class extends Ee{peerStore;registrar;connectionManager;randomWalk;started;running;topologyId;log;discoveryController;filter;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.running=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.connectionManager=e.connectionManager,this.randomWalk=e.randomWalk,this.filter=t.filter,this.discoveryController=new AbortController,K(1/0,this.discoveryController.signal)}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(_i,{filter:this.filter,onConnect:e=>{this.log.trace("discovered relay %p",e),this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.discoveryController?.abort(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,K(1/0,this.discoveryController.signal),Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[n=>n.protocols.includes(_i)],orders:[()=>Math.random()<.5?1:-1]});for(let n of e)this.log.trace("found relay peer %p in peer store",n.id),this.safeDispatchEvent("relay:discover",{detail:n.id});this.log("found %d relay peers in peer store",e.length);let t=new Ut({concurrency:5});this.log("start random walk");for await(let n of this.randomWalk.walk({signal:this.discoveryController.signal})){if(this.log.trace("found random peer %p",n.id),t.has(n.id)){this.log.trace("random peer %p was already in queue",n.id);continue}if(this.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(o=>o.toString()));continue}this.log.trace("wait for space in queue for %p",n.id),await ke(t.onSizeLessThan(10),this.discoveryController.signal),this.log("adding random peer %p to dial queue (length: %d)",n.id,t.size),t.add(async()=>{let o=he([this.discoveryController.signal,AbortSignal.timeout(5e3)]);K(1/0,o);try{await this.connectionManager.openConnection(n.id,{signal:o})}finally{o.clear()}},{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p",n.id,o)})}await t.onIdle()}).catch(e=>{this.discoveryController.signal.aborted||this.log.error("failed when finding relays on the network",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort()}};var Xm=class extends Ee{connectionManager;reservationStore;listeningAddrs;log;constructor(e){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.reservationStore=e.relayStore,this.listeningAddrs=new st,this.reservationStore.addEventListener("relay:removed",this._onRemoveRelayPeer)}_onRemoveRelayPeer=e=>{let t=this.listeningAddrs.has(e.detail);this.log("relay peer removed %p - had reservation",e.detail,t),t&&(this.listeningAddrs.delete(e.detail),this.safeDispatchEvent("listening"))};async listen(e){this.log("listen on %a",e);let t=e.decapsulate("/p2p-circuit"),n=await this.connectionManager.openConnection(t);if(!this.reservationStore.hasReservation(n.remotePeer)){this.log("making reservation on peer %p",n.remotePeer),await this.reservationStore.addRelay(n.remotePeer,"configured");return}let o=this.reservationStore.getReservation(n.remotePeer);if(o==null)throw new hl("Did not have reservation after making reservation");if(this.listeningAddrs.has(n.remotePeer)){this.log("already listening on relay %p",n.remotePeer);return}this.listeningAddrs.set(n.remotePeer,o.addrs.map(i=>Y(i).encapsulate("/p2p-circuit"))),this.safeDispatchEvent("listening")}getAddrs(){return[...this.listeningAddrs.values()].flat()}async close(){await this.reservationStore.cancelReservations(),this.listeningAddrs.clear(),this.reservationStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),this.safeDispatchEvent("close")}};function U9(r){return new Xm(r)}var NT=60*1e3*10,BT=60*1e3*5,OT=30*1e3,zd=class extends Ee{peerId;connectionManager;transportManager;peerStore;events;reserveQueue;reservations;maxDiscoveredRelays;maxReservationQueueLength;reservationCompletionTimeout;started;log;relayFilter;constructor(e,t){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:reservation-store"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new st,this.maxDiscoveredRelays=t?.discoverRelays??0,this.maxReservationQueueLength=t?.maxReservationQueueLength??N9,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??L9,this.started=!1,this.relayFilter=x2(100),this.reserveQueue=new Ut({concurrency:t?.reservationConcurrency??D9,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{let o=[...this.reservations.values()].find(i=>i.connection===n.detail.id);o!=null&&this.#t(n.detail.remotePeer,o).catch(i=>{this.log("could not remove relay %p - %e",n.detail,i)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(Nc)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[Nc]:void 0,[Kd]:void 0}})})),this.reservations.size<this.maxDiscoveredRelays&&(this.log("not enough relays %d/%d",this.reservations.size,this.maxDiscoveredRelays),this.safeDispatchEvent("relay:not-enough-relays",{}))}).catch(e=>{this.log.error(e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}async addRelay(e,t){if(this.peerId.equals(e)){this.log.trace("not trying to use self as relay");return}if(this.reserveQueue.size>this.maxReservationQueueLength){this.log.trace("not adding potential relay peer %p as the queue is full",e);return}if(this.reserveQueue.has(e)){this.log.trace("potential relay peer %p is already in the reservation queue",e);return}if(this.relayFilter.has(e.toMultihash().bytes)){this.log.trace("potential relay peer %p has failed previously, not trying again",e);return}this.log.trace("try to reserve relay slot with %p",e),await this.reserveQueue.add(async()=>{let n=Date.now();try{let o=this.reservations.get(e);if(o!=null){let u=this.connectionManager.getConnections(e),f=!1;if(u.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),u.map(h=>h.id).includes(o.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),f=!0),f&&Ym(o.reservation.expire)>NT){this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e);return}await this.#t(e,o)}if(t==="discovered"&&[...this.reservations.values()].reduce((u,f)=>(f.type==="discovered"&&u++,u),0)>=this.maxDiscoveredRelays){this.log.trace("already have enough discovered relays");return}let i=AbortSignal.timeout(this.reservationCompletionTimeout);K(1/0,i);let s=await this.connectionManager.openConnection(e,{signal:i});if(s.remoteAddr.protoNames().includes("p2p-circuit")){this.log("not creating reservation over relayed connection");return}let a=await this.#e(s,{signal:i}),c=Ym(a.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+c).toString());let l=Math.min(Math.max(c-BT,OT),Math.pow(2,31)-1),d=setTimeout(()=>{this.log("refresh reservation to relay %p",e),this.addRelay(e,t).catch(async u=>{this.log.error("could not refresh reservation to relay %p - %e",e,u);let f=this.reservations.get(e);if(f==null){this.log.error("did not have reservation after refreshing reservation failed %p",e);return}await this.#t(e,f)}).catch(u=>{this.log.error("could not remove expired reservation to relay %p - %e",e,u)})},l);this.reservations.set(e,{timeout:d,reservation:a,type:t,connection:s.id}),await this.peerStore.merge(e,{tags:{[Nc]:{value:1,ttl:c},[Kd]:{value:1,ttl:c}}}),await this.transportManager.listen([Y(`/p2p/${e.toString()}/p2p-circuit/p2p/${this.peerId.toString()}`)]),this.safeDispatchEvent("relay:created-reservation",{detail:e})}catch(o){this.log.error("could not reserve slot on %p after %dms",e,Date.now()-n,o),this.relayFilter.add(e.toMultihash().bytes);let i=this.reservations.get(e);i!=null&&this.#t(e,i).catch(s=>{this.log.error("could not remove reservation on %p after reserving slot failed - %e",e,s)})}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}reservationCount(){return this.reservations.size}async cancelReservations(){await Promise.all([...this.reservations.entries()].map(async([e,t])=>{await this.#t(e,t)}))}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(_i,t),i=ot(n).pb(Fo);await i.write({type:Fo.Type.RESERVE},t);let s;try{s=await i.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(s.status===At.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let d=Y(l);d.getPeerId()==null&&(d=d.encapsulate(`/p2p/${e.remotePeer}`)),d=Y(d.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(d.toString())}return s.reservation.addrs=[...c].map(l=>Y(l).bytes),s.reservation}let a=`reservation failed with status ${s.status??"undefined"}`;throw this.log.error(a),new Error(a)}async#t(e,t){if(!this.reservations.has(e)){this.log("not removing relay reservation with %p from local store as we do not have a reservation with this peer",e);return}this.log("removing relay reservation with %p from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),await this.peerStore.merge(e,{tags:{[Nc]:void 0,[Kd]:void 0}}),this.safeDispatchEvent("relay:removed",{detail:e}),this.reservations.size<this.maxDiscoveredRelays&&(this.log("not enough relays %d/%d",this.reservations.size,this.maxDiscoveredRelays),this.safeDispatchEvent("relay:not-enough-relays",{}))}};var MT=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(Y)}catch{return!1}return!0},jm={maxInboundStopStreams:zm,maxOutboundStopStreams:zm,stopTimeout:3e4},Gd=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;stopTimeout;started;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??jm.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??jm.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??jm.stopTimeout;let n=t.discoverRelays??0;n>0&&(this.discovery=new Wd(e,{filter:t.discoveryFilter??A2(B9,O9)}),this.discovery.addEventListener("relay:discover",o=>{this.reservationStore.addRelay(o.detail,"discovered").catch(i=>{this.log.error("could not add discovered relay %p",o.detail,i)})})),this.reservationStore=new zd(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.startDiscovery()}),this.reservationStore.addEventListener("relay:created-reservation",()=>{this.reservationStore.reservationCount()>=n&&this.discovery?.stopDiscovery()}),this.started=!1}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[_e]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[Vr](){return this.discovery!=null?["@libp2p/identify"]:[]}[dn]=!0;isStarted(){return this.started}async start(){await this.registrar.handle(Wm,e=>{this.onStop(e).catch(t=>{this.log.error("error while handling STOP protocol",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await bt(this.discovery,this.reservationStore),this.started=!0}async stop(){await Ct(this.discovery,this.reservationStore),await this.registrar.unhandle(Wm),this.started=!1}async dial(e,t){if(e.protoCodes().filter(p=>p===R9).length!==1){let p="Invalid circuit relay address";throw this.log.error(p,e),new Pn(p)}let n=e.toString().split("/p2p-circuit"),o=Y(n[0]),i=Y(n[n.length-1]),s=o.getPeerId(),a=i.getPeerId();if(s==null||a==null){let p=`ircuit relay dial to ${e.toString()} failed as address did not have both relay and destination PeerIDs`;throw this.log.error(`c${p}`),new Pn(`C${p}`)}let c=De(s),l=De(a),d=!1,f=this.connectionManager.getConnections(c)[0];f==null?(await this.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new H("circuit-relay:open-connection")),f=await this.connectionManager.openConnection(c,t),d=!0):t.onProgress?.(new H("circuit-relay:reuse-connection"));let h;try{return t.onProgress?.(new H("circuit-relay:open-hop-stream")),h=await f.newStream(_i),await this.connectV2({stream:h,connection:f,destinationPeer:l,destinationAddr:i,relayAddr:o,ma:e,disconnectOnFailure:d,onProgress:t.onProgress})}catch(p){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,p),h?.abort(p),d&&await f.close(),p}}async connectV2({stream:e,connection:t,destinationPeer:n,destinationAddr:o,relayAddr:i,ma:s,disconnectOnFailure:a,onProgress:c}){try{let l=ot(e),d=l.pb(Fo);c?.(new H("circuit-relay:write-connect-message")),await d.write({type:Fo.Type.CONNECT,peer:{id:n.toMultihash().bytes,addrs:[Y(o).bytes]}}),c?.(new H("circuit-relay:read-connect-response"));let u=await d.read();if(u.status!==At.OK)throw new de(`failed to connect via relay with status ${u?.status?.toString()??"undefined"}`);let f=new Bc(u.limit),h=Qm({stream:l.unwrap(),remoteAddr:s,localAddr:i.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger,onDataRead:f.onData,onDataWrite:f.onData});return this.log("new outbound relayed connection %a",h.remoteAddr),await this.upgrader.upgradeOutbound(h,{limits:f.getLimits(),onProgress:c})}catch(l){throw this.log.error(`circuit relay dial to destination ${n.toString()} via relay ${t.remotePeer.toString()} failed`,l),a&&await t.close(),l}}createListener(e){return U9({connectionManager:this.connectionManager,relayStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>M9.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Nr.exactMatch(t))}async onStop({connection:e,stream:t}){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(u){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",u)}let n=AbortSignal.timeout(this.stopTimeout),o=ot(t).pb(In),i=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,i.type),i?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await o.write({type:In.Type.STATUS,status:At.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(i.type!==In.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:In.Type.STATUS,status:At.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!MT(i)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:In.Type.STATUS,status:At.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let s=yt(Ce(i.peer.id));if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,s)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await o.write({type:In.Type.STATUS,status:At.PERMISSION_DENIED},{signal:n}),await t.close();return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:In.Type.STATUS,status:At.OK},{signal:n});let a=new Bc(i.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.addressManager.getAddresses()[0],d=Qm({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,logger:this.logger,onDataRead:a.onData,onDataWrite:a.onData});this.log("new inbound relayed connection %a",d.remoteAddr),await this.upgrader.upgradeInbound(d,{limits:a.getLimits()}),this.log("%s connection %a upgraded","inbound",d.remoteAddr)}};function Zm(r={}){return e=>new Gd(e,r)}var F9=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},UT=new WeakMap;function FT({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(F9());let i,s,a,c=r??clearTimeout,l=()=>{c(i),a(F9())},d=()=>{o&&o.removeEventListener("abort",l)},u=new Promise((f,h)=>{s=()=>{d(),f(n)},a=h,i=(e??setTimeout)(s,t)});return o&&o.addEventListener("abort",l,{once:!0}),UT.set(u,()=>{c(i),i=null,s()}),u}}var $T=FT(),Yd=$T;var cn;(function(r){let e;(function(o){o.UNUSED="UNUSED",o.CONNECT="CONNECT",o.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.UNUSED=0]="UNUSED",o[o.CONNECT=100]="CONNECT",o[o.SYNC=300]="SYNC"})(t||(t={})),function(o){o.codec=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ie((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.observedAddresses!=null)for(let a of o.observedAddresses)i.uint32(18),i.bytes(a);s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={observedAddresses:[]},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{if(s.limits?.observedAddresses!=null&&a.observedAddresses.length===s.limits.observedAddresses)throw new Ue('Decode error - map field "observedAddresses" had too many elements');a.observedAddresses.push(o.bytes());break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>oe(o,r.codec()),r.decode=(o,i)=>ne(o,r.codec(),i)})(cn||(cn={}));function Jm(r,e){return Nr.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:z1.matches(r)?!0:Fg.matches(r)?Ot(r.toOptions().host)===!1:!1}var $9=1024*4,K9=100,Qd={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},Xd=class{started;timeout;retries;maxInboundStreams;maxOutboundStreams;peerStore;registrar;connectionManager;addressManager;transportManager;topologyId;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:dcutr"),this.started=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.timeout=t.timeout??Qd.timeout,this.retries=t.retries??Qd.retries,this.maxInboundStreams=t.maxInboundStreams??Qd.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Qd.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[Vr]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Oc,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{Nr.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Oc,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{this.log.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Oc),this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async upgradeInbound(e){if(await this.attemptUnilateralConnectionUpgrade(e))return;let t;for(let n=0;n<this.retries;n++){let o={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([Oc],{signal:o.signal,runOnLimitedConnection:!0});let i=ot(t,{maxDataLength:$9}).pb(cn);this.log("B sending connect to %p",e.remotePeer);let s=Date.now();await i.write({type:cn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(u=>u.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await i.read(o);if(a.type!==cn.Type.CONNECT)throw this.log("A sent wrong message type"),new de("DCUtR message type was incorrect");let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new de("DCUtR connect message had no multiaddrs");let l=Date.now()-s;this.log("A sending sync, rtt %dms",l),await i.write({type:cn.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await Yd(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:K9});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,d.remoteAddr),await e.close(o);break}catch(i){if(this.log.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,i),t?.abort(i),n===this.retries)throw i}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let i=o.multiaddr;return i.getPeerId()==null?i.encapsulate(`/p2p/${e.remotePeer}`):i}).filter(o=>Jm(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let i=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(Nr.exactMatch(i.remoteAddr))throw new Error("Could not open a new, non-limited, connection");return this.log("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,i.remoteAddr),await e.close({signal:o}),!0}catch(i){this.log.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,i)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)};try{let o=ot(e,{maxDataLength:$9}).pb(cn);this.log("A receiving connect");let i=await o.read(n);if(i.type!==cn.Type.CONNECT)throw this.log("B sent wrong message type"),new de("DCUtR message type was incorrect");if(i.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new de("DCUtR connect message had no multiaddrs");let s=this.getDialableMultiaddrs(i.observedAddresses);if(s.length===0)throw this.log("B had no dialable multiaddrs"),new de("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:cn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==cn.Type.SYNC)throw new de("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:K9,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n)}catch(o){this.log.error("incoming DCUtR from %p failed",t.remotePeer,o),e.abort(o)}finally{await e.close(n)}}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=Y(n);if(!Jm(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Oc="/libp2p/dcutr";function V9(r={}){return e=>new Xd(e,r)}var H9="0.1.0",q9="id",W9="id/push",z9="1.0.0",G9="1.0.0";var $o;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let i of t.listenAddrs)n.uint32(18),n.bytes(i);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let i of t.protocols)n.uint32(26),n.string(i);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 5:{i.protocolVersion=t.string();break}case 6:{i.agentVersion=t.string();break}case 1:{i.publicKey=t.bytes();break}case 2:{if(o.limits?.listenAddrs!=null&&i.listenAddrs.length===o.limits.listenAddrs)throw new Ue('Decode error - map field "listenAddrs" had too many elements');i.listenAddrs.push(t.bytes());break}case 4:{i.observedAddr=t.bytes();break}case 3:{if(o.limits?.protocols!=null&&i.protocols.length===o.limits.protocols)throw new Ue('Decode error - map field "protocols" had too many elements');i.protocols.push(t.string());break}case 8:{i.signedPeerRecord=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})($o||($o={}));var X9=kt(Q9(),1),e3=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,jd=(0,X9.default)(),Zd=e3&&!jd,j9=jd&&!e3,Z9=jd&&e3,J9=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!jd,Jd=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,FJ=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+"_"+"ENV"]==="test",ey=typeof navigator<"u"&&navigator.product==="ReactNative";var cr={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function ty(r){if(r!=null&&r.length>0)try{return Y(r)}catch{}}function qT(r,e){return e!=null||(e=`${r.name}/${r.version}`,J9||j9?e+=` UserAgent=${globalThis.process.version}`:(Zd||Jd||Z9||ey)&&(e+=` UserAgent=${globalThis.navigator.userAgent}`)),e}async function ef(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new de("message was null or undefined");let i={};if(o.listenAddrs.length>0&&(i.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:Y(c)}))),o.protocols.length>0&&(i.protocols=o.protocols),o.publicKey!=null){let c=rt(o.publicKey);if(!xn(c).equals(n.remotePeer))throw new de("public key did not match remote PeerId");i.publicKey=c}let s;if(o.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await vr.openAndCertify(c,Wt.DOMAIN),d=Wt.createFromProtobuf(l.payload),u=En(l.publicKey.toCID());if(!d.peerId.equals(u))throw new de("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(d.peerId))throw new de("signing key does not match remote PeerId");let f;try{f=await r.get(d.peerId)}catch(h){if(h.name!=="NotFoundError")throw h}if(f!=null&&(i.metadata=f.metadata,f.peerRecordEnvelope!=null)){let h=await vr.createFromProtobuf(f.peerRecordEnvelope),p=Wt.createFromProtobuf(h.payload);p.seqNumber>=d.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",p.seqNumber,d.seqNumber),d=p,c=f.peerRecordEnvelope)}i.peerRecordEnvelope=c,i.addresses=d.multiaddrs.map(h=>({isCertified:!0,multiaddr:h})),s={seq:d.seqNumber,addresses:d.multiaddrs}}else t("%p did not send a signed peer record",n.remotePeer);if(t.trace("patching %p with",n.remotePeer,i),await r.patch(n.remotePeer,i),o.agentVersion!=null||o.protocolVersion!=null){let c={};o.agentVersion!=null&&(c.AgentVersion=O(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=O(o.protocolVersion)),t.trace("merging %p metadata",n.remotePeer,c),await r.merge(n.remotePeer,{metadata:c})}let a={peerId:n.remotePeer,protocolVersion:o.protocolVersion,agentVersion:o.agentVersion,publicKey:o.publicKey,listenAddrs:o.listenAddrs.map(c=>Y(c)),observedAddr:o.observedAddr==null?void 0:Y(o.observedAddr),protocols:o.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var Hs=class{host;protocol;started;timeout;peerId;privateKey;peerStore;registrar;addressManager;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;events;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.peerId=e.peerId,this.privateKey=e.privateKey,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.events=e.events,this.log=t.log,this.timeout=t.timeout??cr.timeout,this.maxInboundStreams=t.maxInboundStreams??cr.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??cr.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??cr.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??cr.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??cr.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??cr.protocolPrefix}/${H9}`,agentVersion:qT(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:O(this.host.agentVersion),ProtocolVersion:O(this.host.protocolVersion)}}),await this.registrar.handle(this.protocol,e=>{this.handleProtocol(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.protocol),this.started=!1}};var tf=class extends Hs{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??cr.protocolPrefix}/${W9}/${G9}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??cr.concurrency,(t.runOnSelfUpdate??cr.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})})}[_e]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(d=>d.decapsulateCode(ee("p2p").code)),t=new Wt({peerId:this.peerId,multiaddrs:e}),n=await vr.seal(t,this.privateKey),o=this.registrar.getProtocols(),i=await this.peerStore.get(this.peerId),s=F(i.metadata.get("AgentVersion")??O(this.host.agentVersion)),a=F(i.metadata.get("ProtocolVersion")??O(this.host.protocolVersion)),c=this;async function*l(){for(let d of c.connectionManager.getConnections())(await c.peerStore.get(d.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let f,h=AbortSignal.timeout(c.timeout);K(1/0,h);try{f=await d.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await ot(f,{maxDataLength:c.maxMessageSize}).pb($o).write({listenAddrs:e.map(m=>m.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:s,protocolVersion:a},{signal:h}),await f.close({signal:h})}catch(p){c.log.error("could not push identify update to peer",p),f?.abort(p)}})}await Yt(Er(l(),{concurrency:this.concurrency}))}async handleProtocol(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},s=await ot(n,{maxDataLength:this.maxMessageSize}).pb($o).read(o);await n.close(o),await ef(this.peerStore,this.events,this.log,t,s)}catch(o){this.log.error("received invalid message",o),n.abort(o);return}this.log.trace("handled push from %p",t.remotePeer)}};var rf=class extends Hs{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??cr.protocolPrefix}/${q9}/${z9}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??cr.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(i=>{i.name!==Cn.name&&this.log.error("error during identify trigged by connection:open",i)})})}[_e]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);K(1/0,o),t={...t,signal:o}}try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let i=await ot(n,{maxDataLength:this.maxMessageSize}).pb($o).read(t);return await n.close(t),i}catch(o){throw n?.abort(o),o}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:i,observedAddr:s}=n;if(o==null)throw new de("public key was missing from identify message");let a=rt(o),c=En(a.toCID());if(!e.remotePeer.equals(c))throw new de("identified peer does not match the expected peer");if(this.peerId.equals(c))throw new de("identified peer is our own peer id?");let l=ty(s);return this.log("identify completed for peer %p and protocols %o",c,i),l!=null&&(this.log("our observed address was %a",l),Ot(l?.nodeAddress().address)===!0?this.log("our observed address was private"):this.addressManager.getObservedAddrs().length<(this.maxObservedAddresses??1/0)&&(this.log("storing our observed address"),this.addressManager.addObservedAddr(l))),ef(this.peerStore,this.events,this.log,e,n)}async handleProtocol(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);K(1/0,o);try{let i=await this.peerStore.get(this.peerId),s=this.addressManager.getAddresses().map(d=>d.decapsulateCode(ee("p2p").code)),a=i.peerRecordEnvelope;if(s.length>0&&a==null){let d=new Wt({peerId:this.peerId,multiaddrs:s});a=(await vr.seal(d,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;Ug.matches(t.remoteAddr)||(c=void 0),await ot(n).pb($o).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:Lt(this.privateKey.publicKey),listenAddrs:s.map(d=>d.bytes),signedPeerRecord:a,observedAddr:c,protocols:i.protocols},{signal:o}),await n.close({signal:o})}catch(i){this.log.error("could not respond to identify request",i),n.abort(i)}}};function ry(r={}){return e=>new rf(e,r)}function ny(r={}){return e=>new tf(e,r)}var qs=1e3,t3=60*qs,r3=60*t3,oy=36*r3,iy="/ipfs/kad/1.0.0",sy="/dht/record",n3="/dht/provider",ay=256,cy=24*r3,ly=r3,Aee=10*qs;var Mc=20,Ii=3,uy=5*t3,dy=qs,fy=5*qs,hy=5*t3,py=30*qs,my=180*qs,o3=`${io}-kad-dht`;var Uc;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&t.key.byteLength>0&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&t.value.byteLength>0&&(n.uint32(18),n.bytes(t.value)),t.timeReceived!=null&&t.timeReceived!==""&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={key:re(0),value:re(0),timeReceived:""},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(Uc||(Uc={}));function gy(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),o=String(r.getUTCHours()).padStart(2,"0"),i=String(r.getUTCMinutes()).padStart(2,"0"),s=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${i}:${s}.${c}Z`}function yy(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),o=parseInt(t[2],10)-1,i=parseInt(t[3],10),s=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,o,i,s,a,c,l))}var _t=class r{key;value;timeReceived;constructor(e,t,n){if(!(e instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(t instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=e,this.value=t,this.timeReceived=n}serialize(){return Uc.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:gy(this.timeReceived)}}static deserialize(e){let t=Uc.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=yy(e.timeReceived);if(e.key==null)throw new Error("key missing from deserialized object");if(e.value==null)throw new Error("value missing from deserialized object");return new r(e.key,e.value,t)}};var Ko=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},nf=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},of=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},sf=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var wy;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&(n.uint32(18),n.bytes(t.value)),t.author!=null&&(n.uint32(26),n.bytes(t.author)),t.signature!=null&&(n.uint32(34),n.bytes(t.signature)),t.timeReceived!=null&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 3:{i.author=t.bytes();break}case 4:{i.signature=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(wy||(wy={}));var be;(function(r){r.PUT_VALUE="PUT_VALUE",r.GET_VALUE="GET_VALUE",r.ADD_PROVIDER="ADD_PROVIDER",r.GET_PROVIDERS="GET_PROVIDERS",r.FIND_NODE="FIND_NODE",r.PING="PING"})(be||(be={}));var af;(function(r){r[r.PUT_VALUE=0]="PUT_VALUE",r[r.GET_VALUE=1]="GET_VALUE",r[r.ADD_PROVIDER=2]="ADD_PROVIDER",r[r.GET_PROVIDERS=3]="GET_PROVIDERS",r[r.FIND_NODE=4]="FIND_NODE",r[r.PING=5]="PING"})(af||(af={}));(function(r){r.codec=()=>He(af)})(be||(be={}));var zs;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(zs||(zs={}));var i3;(function(r){r[r.NOT_CONNECTED=0]="NOT_CONNECTED",r[r.CONNECTED=1]="CONNECTED",r[r.CAN_CONNECT=2]="CAN_CONNECT",r[r.CANNOT_CONNECT=3]="CANNOT_CONNECT"})(i3||(i3={}));(function(r){r.codec=()=>He(i3)})(zs||(zs={}));var Ws;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let i of t.multiaddrs)n.uint32(18),n.bytes(i);t.connection!=null&&(n.uint32(24),zs.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:re(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.multiaddrs!=null&&i.multiaddrs.length===o.limits.multiaddrs)throw new Ue('Decode error - map field "multiaddrs" had too many elements');i.multiaddrs.push(t.bytes());break}case 3:{i.connection=zs.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(Ws||(Ws={}));var no;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&af[t.type]!==0&&(n.uint32(8),be.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let i of t.closer)n.uint32(66),Ws.codec().encode(i,n);if(t.providers!=null)for(let i of t.providers)n.uint32(74),Ws.codec().encode(i,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={type:be.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.type=be.codec().decode(t);break}case 10:{i.clusterLevel=t.int32();break}case 2:{i.key=t.bytes();break}case 3:{i.record=t.bytes();break}case 8:{if(o.limits?.closer!=null&&i.closer.length===o.limits.closer)throw new Ue('Decode error - map field "closer" had too many elements');i.closer.push(Ws.codec().decode(t,t.uint32(),{limits:o.limits?.closer$}));break}case 9:{if(o.limits?.providers!=null&&i.providers.length===o.limits.providers)throw new Ue('Decode error - map field "providers" had too many elements');i.providers.push(Ws.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(no||(no={}));function s3(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new CustomEvent("kad-dht:query:send-query",{detail:t})),t}function Fc(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer??[],providers:r.providers??[]};return e.onProgress?.(new CustomEvent("kad-dht:query:peer-response",{detail:t})),t}function cf(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function Sr(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function a3(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function $c(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function c3(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function by(r,e,t){if(t.length===0)throw new C("No records given");let o=F(e).split("/");if(o.length<3)throw new C("Record key does not have a selector function");let i=r[o[1].toString()];if(i==null)throw new sf(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function zT(r,e){return 0}var xy={pk:zT};async function Gs(r,e){let t=e.key,o=F(t).split("/");if(o.length<3)return;let i=r[o[1].toString()];if(i==null)throw new C(`No validator available for key type "${o[1]}"`);await i(t,e.value)}var GT=async(r,e)=>{if(!(r instanceof Uint8Array))throw new C('"key" must be a Uint8Array');if(r.byteLength<5)throw new C("Invalid public key record");if(F(r.subarray(0,4))!=="/pk/")throw new C("key was not prefixed with /pk/");let n=rt(e),o=r.slice(4);if(!te(o,n.toMultihash().bytes))throw new C("public key does not match passed in key")},Ey={pk:GT};var YT=O("/pk/");function vy(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(t===53||t===54||t===55)return n!=="localhost";if(t!==4&&t!==6||n==null)return!1;let o=Ot(n);return o==null?!0:!o})}}async function Vo(r){return(await dt.digest(r)).digest}async function lr(r){return Vo(r.toMultihash().bytes)}function Ho(r){return new Le(`${sy}/${F(r,"base32")}`,!1)}function Sy(r){return Re([YT,r.toMultihash().bytes])}function Ay(r){return F(r.subarray(0,4))==="/pk/"}function _y(r){let e=Ce(r.subarray(4));return yt(e)}function l3(r,e){let t=new Date;return new _t(r,e,t).serialize()}var QT=290,XT=54,jT=55,ZT=56,JT=4,ek=41;function Iy(r){let e=r.stringTuples();for(let t of e)if(t[0]===QT)return!1;if(e[0][0]===XT||e[0][0]===jT||e[0][0]===ZT)return!0;if(e[0][0]===JT||e[0][0]===ek){let t=Ot(`${e[0][1]}`);return t==null||!t}return!1}var lf=class{log;components;validators;selectors;peerRouting;queryManager;network;constructor(e,t){let{validators:n,selectors:o,peerRouting:i,queryManager:s,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.validators=n,this.selectors=o,this.peerRouting=i,this.queryManager=s,this.network=a}async getLocal(e){this.log("getLocal %b",e);let t=Ho(e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=_t.deserialize(n);return await Gs(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let i=l3(e,n);for(let{value:s,from:a}of t){if(te(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let d=Ho(e);this.log(`Storing corrected record for key ${d.toString()}`),await this.components.datastore.put(d,i.subarray())}catch(d){this.log.error("Failed error correcting self",d)}continue}let c=!1,l={type:be.PUT_VALUE,key:e,record:i};for await(let d of this.network.sendRequest(a,l,o))d.name==="PEER_RESPONSE"&&d.record!=null&&te(d.record.value,_t.deserialize(i).value)&&(c=!0),yield d;c||(yield Sr({from:a,error:new Ko("Value not put correctly")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=l3(e,t),i=Ho(e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray()),yield*Je(this.peerRouting.getClosestPeers(e,{signal:n.signal}),s=>jt(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:be.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let d of this.network.sendRequest(a.peer.id,l,n))c.push(d),d.name==="PEER_RESPONSE"&&(d.record!=null&&te(d.record.value,_t.deserialize(o).value)||c.push(Sr({from:a.peer.id,error:new Ko("Value not put correctly")},n)));return c}),s=>Er(s,{ordered:!1,concurrency:Ii}),async function*(s){for await(let a of s)yield*a})}async*get(e,t={}){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t))a.name==="VALUE"&&n.push(a),yield a;if(n.length===0)return;let o=n.map(a=>a.value),i=0;try{i=by(this.selectors,e,o)}catch(a){if(a.name!=="InvalidParametersError")throw a}let s=o[i];if(this.log("GetValue %b %b",e,s),s==null)throw new Me("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,t),yield n[i]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let i=await this.getLocal(e);yield $c({value:i.value,from:this.components.peerId},t)}catch(i){this.log("error getting local value for %b",e,i)}let n=this,o=async function*({peer:i,signal:s}){for await(let a of n.peerRouting.getValueOrPeers(i,e,{signal:s}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield $c({from:i,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function ky(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function Kc(r){if(r.id==null)throw new Error("Invalid peer in message");let e=Ce(r.id);return{id:yt(e),multiaddrs:(r.multiaddrs??[]).map(t=>Y(t))}}var uf=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:i,routingTable:s,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=i,this.routingTable=s,this.providers=a}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId);let i={type:be.ADD_PROVIDER,key:o,providers:[ky({id:this.components.peerId,multiaddrs:t})]},s=0,a=c=>async()=>{if(c.name!=="FINAL_PEER")return[c];let l=[];this.log("putProvider %s to %p",e,c.peer.id);try{this.log("sending provider record for %s to %p",e,c.peer.id);for await(let d of this.network.sendMessage(c.peer.id,i,n))d.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,c.peer.id),s++),l.push(d)}catch(d){this.log.error("error sending provide record to peer %p",c.peer.id,d),l.push(Sr({from:c.peer.id,error:d},n))}return l};yield*Je(this.peerRouting.getClosestPeers(o,n),c=>jt(c,l=>a(l)),c=>Er(c,{ordered:!1,concurrency:Ii}),async function*(c){for await(let l of c)yield*l}),this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,i=e.multihash.bytes,s=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e);if(a.length>0){let d=[];for(let u of a.slice(0,n))try{let f=await this.components.peerStore.get(u);d.push({id:u,multiaddrs:f.addresses.map(({multiaddr:h})=>h)})}catch(f){if(f.name!=="NotFoundError")throw f;this.log("no peer store entry for %p",u)}if(yield Fc({from:this.components.peerId,messageType:be.GET_PROVIDERS,providers:d},t),yield a3({from:this.components.peerId,providers:d},t),o+=d.length,o>=n)return}let c=async function*({peer:d,signal:u}){let f={type:be.GET_PROVIDERS,key:i};yield*s.network.sendRequest(d,f,{...t,signal:u})},l=new nr(a);for await(let d of this.queryManager.run(i,c,t))if(yield d,d.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",d.providers.length,e,d.closer.length);let u=[];for(let f of d.providers)l.has(f.id)||(l.add(f.id),u.push(f));if(u.length>0&&(yield a3({from:d.from,providers:u},t),o+=u.length,o>=n))return}}};var Ys=class{movingAverage;variance;deviation;forecast;timespan;previousTime;constructor(e){this.timespan=e,this.movingAverage=0,this.variance=0,this.deviation=0,this.forecast=0}alpha(e,t){return 1-Math.exp(-(e-t)/this.timespan)}push(e,t=Date.now()){if(this.previousTime!=null){let n=this.alpha(t,this.previousTime),o=e-this.movingAverage,i=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*i),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var tk=1.2,rk=2,nk=2e3,oo=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new Ys(e.interval??5e3),this.failure=new Ys(e.interval??5e3),this.next=new Ys(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??rk,this.timeoutMultiplier=e.timeoutMultiplier??tk,this.minTimeout=e.minTimeout??nk,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.max(Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier)),this.minTimeout),n=AbortSignal.timeout(t),o=he([e.signal,n]);return K(1/0,o,n),o.start=Date.now(),o.timeout=t,o}cleanUp(e){let t=Date.now()-e.start;e.aborted?(this.failure.push(t),this.next.push(t*this.failureMultiplier),this.metric?.update({failureMovingAverage:this.failure.movingAverage,failureDeviation:this.failure.deviation,failureForecast:this.failure.forecast,failureVariance:this.failure.variance,failure:t})):(this.success.push(t),this.next.push(t),this.metric?.update({successMovingAverage:this.success.movingAverage,successDeviation:this.success.deviation,successForecast:this.success.forecast,successVariance:this.success.variance,success:t}))}};var df=class extends Ee{log;protocol;running;components;timeout;metrics;constructor(e,t){super();let{protocol:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=n,this.timeout=new oo({...t.timeout??{},metrics:e.metrics,metricName:`${t.logPrefix.replaceAll(":","_")}_network_message_send_times_milliseconds`}),this.metrics={operations:e.metrics?.registerCounterGroup(`${t.logPrefix.replaceAll(":","_")}_outbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.logPrefix.replaceAll(":","_")}_outbound_rpc_errors_total`)}}async start(){this.running||(this.running=!0)}async stop(){this.running=!1}isStarted(){return this.running}async*sendRequest(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new C("Message type was missing");this.log("sending %s to %p",t.type,e),yield c3({peer:e},n),yield s3({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);let c=await this._writeReadMessage(i,t,n);i.close(n).catch(l=>{this.log.error("error closing stream to %p",e,l),i?.abort(l)}),yield Fc({from:e,messageType:c.type,closer:c.closer.map(Kc),providers:c.providers.map(Kc),record:c.record==null?void 0:_t.deserialize(c.record)},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield Sr({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async*sendMessage(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new C("Message type was missing");this.log("sending %s to %p",t.type,e),yield c3({peer:e},n),yield s3({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),await this._writeMessage(i,t,n),i.close(n).catch(c=>{this.log.error("error closing stream to %p",e,c),i?.abort(c)}),yield Fc({from:e,messageType:o},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),yield Sr({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await ot(e).write(t,no,n)}async _writeReadMessage(e,t,n){let o=ot(e);await o.write(t,no,n);let i=await o.read(no,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:Kc(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:Kc(s)})}),i}};function Qs(r,e){if(r.byteLength!==e.byteLength)throw new Error("Inputs should have the same length");for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}var qo=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return this.peerDistances.map(e=>e.peer)}async add(e){let t=await lr(e.id);this.addWitKadId(e,t)}addWitKadId(e,t){if(this.peerDistances.find(o=>o.peer.id.equals(e.id))!=null)return;let n={peer:e,distance:sn(this.originDhtKey,t)};this.peerDistances.push(n),this.peerDistances.sort((o,i)=>Qs(o.distance,i.distance)),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await lr(e),n=sn(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return Qs(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var ff=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){let{routingTable:n,network:o,validators:i,queryManager:s,logPrefix:a}=t;this.routingTable=n,this.network=o,this.validators=i,this.queryManager=s,this.peerStore=e.peerStore,this.peerId=e.peerId,this.log=e.logger.forComponent(`${a}:peer-routing`)}async findPeerLocal(e){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(o){if(o.name!=="NotFoundError")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.name!=="NotFoundError")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n={}){let o={type:be.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=Sy(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let i=rt(o.record.value),s=xn(i);if(!s.equals(e))throw new kn("public key does not match id");if(s.publicKey==null)throw new kn("public key missing");yield $c({from:e,value:o.record.value},t)}throw new Ko(`Node not responding with its public key: ${e.toString()}`)}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e);if(o!=null){this.log("found local"),yield cf({from:this.peerId,peer:o},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,i=async function*({peer:s,signal:a}){let c={type:be.FIND_NODE,key:e.toMultihash().bytes};for await(let l of o.network.sendRequest(s,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let d=l.closer.find(u=>u.id.equals(e));d!=null&&(yield cf({from:l.from,peer:d},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}n||(yield Sr({from:this.peerId,error:new Me("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Vo(e),o=this.routingTable.closestPeers(n),i=this,s=new qo(n,this.routingTable.kBucketSize);await Promise.all(o.map(async c=>{await s.add({id:c,multiaddrs:[]})}));let a=async function*({peer:c,signal:l}){i.log("closerPeersSingle %s from %p",F(e,"base32"),c);let d={type:be.FIND_NODE,key:e};yield*i.network.sendRequest(c,d,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await s.add(l)})),yield c;this.log("found %d peers close to %b",s.length,e);for(let c of s.peers)yield cf({from:this.peerId,peer:c},t)}async*getValueOrPeers(e,t,n={}){for await(let o of this._getValueSingle(e,t,n)){if(o.name==="PEER_RESPONSE"&&o.record!=null)try{await this._verifyRecordOnline(o.record)}catch{let s="invalid record received, discarded";this.log(s),yield Sr({from:o.from,error:new Ko(s)},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new of("invalid record received");await Gs(this.validators,new _t(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=await Vo(e),o=this.routingTable.closestPeers(n),i=[];for(let s of o)if(!s.equals(t))try{let a=await this.peerStore.get(s);i.push({id:s,multiaddrs:a.addresses.map(({multiaddr:c})=>c)})}catch(a){if(a.name!=="NotFoundError")throw a}return i.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",i.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p with %d peers in the routing table",e,t,this.routingTable.size),i}};var Cy=kt(N2(),1);var hf=class{log;datastore;cache;cleanupInterval;provideValidity;syncQueue;started;cleaner;constructor(e,t={}){let{cacheSize:n,cleanupInterval:o,provideValidity:i}=t;this.log=e.logger.forComponent("libp2p:kad-dht:providers"),this.datastore=e.datastore,this.cleanupInterval=o??ly,this.provideValidity=i??cy,this.cache=(0,Cy.default)(n??ay),this.syncQueue=new Pr({concurrency:1}),this.started=!1}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cleaner=setInterval(()=>{this._cleanup().catch(e=>{this.log.error(e)})},this.cleanupInterval))}async stop(){this.started=!1,this.cleaner!=null&&(clearInterval(this.cleaner),this.cleaner=void 0)}async _cleanup(){await this.syncQueue.add(async()=>{let e=Date.now(),t=0,n=0,o=new Map,i=this.datastore.batch(),s=this.datastore.query({prefix:n3});for await(let a of s)try{let{cid:c,peerId:l}=Py(a.key),d=Ry(a.value).getTime(),u=Date.now(),f=u-d,h=f>this.provideValidity;if(this.log("comparing: %d - %d = %d > %d %s",u,d,f,this.provideValidity,h?"(expired)":""),h){n++,i.delete(a.key);let p=o.get(c)??new Set;p.add(l),o.set(c,p)}t++}catch(c){this.log.error(c.message)}o.size>0?(this.log("deleting %d / %d entries",n,t),await i.commit()):this.log("nothing to delete");for(let[a,c]of o){let l=Vc(a),d=this.cache.get(l);if(d!=null){for(let u of c)d.delete(u);d.size===0?this.cache.remove(l):this.cache.set(l,d)}}this.log("Cleanup successful (%dms)",Date.now()-e)})}async _getProvidersMap(e){let t=Vc(e),n=this.cache.get(t);return n==null&&(n=await ik(this.datastore,e),this.cache.set(t,n)),n}async addProvider(e,t){await this.syncQueue.add(async()=>{this.log("%p provides %s",t,e);let n=await this._getProvidersMap(e);this.log("loaded %s provs",n.size);let o=new Date;n.set(t.toString(),o);let i=Vc(e);this.cache.set(i,n),await ok(this.datastore,e,t,o)})}async getProviders(e){return this.syncQueue.add(async()=>(this.log("get providers for %s",e),[...(await this._getProvidersMap(e)).keys()].map(n=>De(n))),{throwOnTimeout:!0})}};function Vc(r){let e=typeof r=="string"?r:F(r.multihash.bytes,"base32");return`${n3}/${e}`}async function ok(r,e,t,n){let o=[Vc(e),"/",t.toString()].join(""),i=new Le(o),s=Ve(n.getTime());await r.put(i,s)}function Py(r){let e=r.toString().split("/");if(e.length!==5)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:e[3],peerId:e[4]}}async function ik(r,e){let t=new Map,n=r.query({prefix:Vc(e)});for await(let o of n){let{peerId:i}=Py(o.key);t.set(i,Ry(o.value))}return t}function Ry(r){return new Date(Ft(r))}async function*Dy(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:i,alpha:s,pathIndex:a,numPaths:c,queryFuncTimeout:l,log:d,peersSeen:u,connectionManager:f}=r,h=new fr({concurrency:s,sort:(g,y)=>Qs(g.options.distance,y.options.distance)}),p=await Vo(e);function m(g,y){if(g==null)return;u.add(g);let b=sn(y,p);h.add(async()=>{let w=[o];l!=null&&w.push(AbortSignal.timeout(l));let x=he(w);K(1/0,x);try{for await(let T of i({key:e,peer:g,signal:x,pathIndex:a,numPaths:c})){if(x.aborted)return;if(T.name==="PEER_RESPONSE")for(let k of T.closer){if(u.has(k.id)){d.trace("already seen %p in query",k.id);continue}if(n.equals(k.id)){d("not querying ourselves");continue}if(!await f.isDialable(k.multiaddrs)){d("not querying undialable peer");continue}let v=await lr(k.id),S=sn(v,p);if(Qs(S,b)!==-1){d.trace("skipping %p as they are not closer to %b than %p",k.id,e,g);continue}d.trace("querying closer peer %p",k.id),m(k.id,v)}h.safeDispatchEvent("completed",{detail:T})}}catch(T){if(!o.aborted)return Sr({from:g,error:T},r)}finally{x.clear()}},{distance:b}).catch(w=>{d.error(w)})}m(t,await lr(t));try{for await(let g of h.toGenerator({signal:o}))g!=null&&(yield g)}catch(g){throw o.aborted?new nf("Query aborted"):g}}var pf=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;metrics;constructor(e,t){let{disjointPaths:n=Mc,alpha:o=Ii,logPrefix:i}=t;this.logPrefix=i,this.disjointPaths=n??Mc,this.running=!1,this.alpha=o??Ii,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.metrics={queries:e.metrics?.registerCounter(`${i.replaceAll(":","_")}_queries_total`),errors:e.metrics?.registerCounter(`${i.replaceAll(":","_")}_query_errors_total`),queryTime:e.metrics?.registerMetric(`${i.replaceAll(":","_")}_query_time_seconds`)},this.shutDownController=new AbortController,K(1/0,this.shutDownController.signal)}isStarted(){return this.running}async start(){this.running=!0,this.shutDownController=new AbortController,K(1/0,this.shutDownController.signal)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");let o=this.metrics.queryTime?.timer();if(n.signal==null){let d=AbortSignal.timeout(my);K(1/0,d),n={...n,signal:d}}let i=new AbortController,s=he([this.shutDownController.signal,i.signal,n.signal]);K(1/0,s,i.signal);let a=this.logger.forComponent(`${this.logPrefix}:query:`+F(e,"base58btc")),c=Date.now(),l=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(a("waiting for initial query-self query before continuing"),await ke(this.initialQuerySelfHasRun.promise,s),this.initialQuerySelfHasRun=void 0),a("query:start"),this.metrics?.queries?.increment();let d=await Vo(e),u=this.routingTable.closestPeers(d),f=u.slice(0,Math.min(this.disjointPaths,u.length));if(u.length===0){a.error("Running query with no peers");return}let h=new nr,p=f.map((m,g)=>Dy({key:e,startingPeer:m,ourPeerId:this.peerId,signal:s,query:t,pathIndex:g,numPaths:f.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:a,peersSeen:h,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let m of $t(...p)){if(m.name==="QUERY_ERROR"&&a.error("query error",m.error),m.name==="PEER_RESPONSE")for(let g of[...m.closer,...m.providers])await this.connectionManager.isDialable(g.multiaddrs)&&await this.routingTable.add(g.id);yield m}l=!0}catch(d){if(l||this.metrics?.errors?.increment(),!(!this.running&&d.name==="QueryAbortedError"))throw d}finally{l||(a("query exited early"),i.abort()),s.clear(),o?.(),a("query:done in %dms",Date.now()-c)}}};function sk(r){return r[Symbol.asyncIterator]!=null}function ak(r){if(sk(r))return(async()=>{let e=0;for await(let t of r)e++;return e})();{let e=0;for(let t of r)e++;return e}}var mf=ak;var ck=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function lk(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=ck(r),u=(...h)=>{let p=t.multiArgs?h:h[0];t.filter&&!t.filter(p)||(c.push(p),t.count===c.length&&(n(),i(c)))},f=h=>{n(),s(h)};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=Zr(o,{milliseconds:t.timeout});return i.cancel=n,i}return o}function Hc(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=lk(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}var gf=class{log;peerId;peerRouting;routingTable;count;interval;initialInterval;queryTimeout;started;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){let{peerRouting:n,logPrefix:o,count:i,interval:s,queryTimeout:a,routingTable:c}=t;this.peerId=e.peerId,this.log=e.logger.forComponent(`${o}:query-self`),this.started=!1,this.peerRouting=n,this.routingTable=c,this.count=i??Mc,this.interval=s??uy,this.initialInterval=t.initialInterval??dy,this.queryTimeout=a??fy,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun}isStarted(){return this.started}start(){this.started||(this.started=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.initialInterval))}stop(){this.started=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.started){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=J(),this.started){this.controller=new AbortController;let e=[this.controller.signal];if(this.initialQuerySelfHasRun==null){let n=AbortSignal.timeout(this.queryTimeout);K(1/0,n),e.push(n)}let t=he(e);K(1/0,t,this.controller.signal);try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await Hc(this.routingTable,"peer:add",{signal:t,filter:i=>!this.peerId.equals(i.detail)}),this.log("routing table has peers, continuing with query")),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await Je(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>lo(i,this.count),async i=>mf(i));this.log("self-query found %d peers in %dms",o,Date.now()-n)}catch(n){this.log.error("self-query error",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.started&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};var uk=20,dk=5e3,fk="kad-close",hk=50,yf=class{routingTable;components;closestPeers;newPeers;refreshInterval;peerSetSize;timeout;closeTagName;closeTagValue;log;constructor(e,t){this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.routingTable=t.routingTable,this.refreshInterval=t.refreshInterval??dk,this.peerSetSize=t.peerSetSize??uk,this.closeTagName=t.closeTagName??fk,this.closeTagValue=t.closeTagValue??hk,this.closestPeers=new nr,this.onPeerPing=this.onPeerPing.bind(this)}async start(){let e=await lr(this.components.peerId);this.newPeers=new qo(e,this.peerSetSize),this.routingTable.addEventListener("peer:ping",this.onPeerPing),this.timeout=setInterval(()=>{this.updatePeerTags().catch(t=>{this.log.error("error updating peer tags - %e",t)})},this.refreshInterval)}stop(){this.routingTable.removeEventListener("peer:ping",this.onPeerPing),clearTimeout(this.timeout)}onPeerPing(e){this.newPeers?.add({id:e.detail,multiaddrs:[]}).catch(t=>{this.log.error("error adding peer to distance list - %e",t)})}async updatePeerTags(){let e=new nr(this.newPeers?.peers.map(o=>o.id)),t=e.difference(this.closestPeers),n=this.closestPeers.difference(e);this.closestPeers=e,await Promise.all([...[...t].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:{value:this.closeTagValue},[o3]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[o3]:void 0}})})])}};function qc(r){return Array.isArray(r?.peers)}var wf=class{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e){this.prefixLength=e.prefixLength??Ly,this.kBucketSize=e.kBucketSize??u3,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfOldContactsToPing??Ny,this.lastPingThreshold=e.lastPingThreshold??By,this.ping=e.ping,this.verify=e.verify,this.onAdd=e.onAdd,this.onRemove=e.onRemove,this.addingPeerMap=new st,this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e){this.localPeer={peerId:e,kadId:await lr(e),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await lr(e),lastPing:0},o=this.addingPeerMap.get(e);if(o!=null)return o;try{let i=this._add(n,t);this.addingPeerMap.set(e,i),await i}finally{this.addingPeerMap.delete(e)}}async _add(e,t){let n=this._determineBucket(e.kadId);if(this._indexOf(n,e.kadId)>-1)return;if(n.peers.length===this.splitThreshold&&n.depth<this.prefixLength){await this._split(n),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!mk(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let o=n.peers.filter(s=>!(s.peerId.equals(this.localPeer?.peerId)||s.lastPing>Date.now()-this.lastPingThreshold)).sort((s,a)=>s.lastPing<a.lastPing?-1:s.lastPing>a.lastPing?1:0).slice(0,this.numberOfNodesToPing),i=!1;for await(let s of this.ping(o,t))i=!0,await this.remove(s.kadId);i&&await this._add(e,t)}*closest(e,t=this.kBucketSize){let n=new qo(e,t);for(let o of this.toIterable())n.addWitKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*jt(n.peers,o=>o.id)}count(){function e(t){if(qc(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}async remove(e){let t=this._determineBucket(e),n=this._indexOf(t,e);if(n>-1){let o=t.peers.splice(n,1)[0];await this.onRemove?.(o,t)}}*toIterable(){function*e(t){if(qc(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+F(sn(e,t),"base16"))}_determineBucket(e){let t=F(e,"base2");function n(o,i=0){return qc(o)?o:t[i]==="0"?n(o.left,i+1):n(o.right,i+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>te(n.kadId,t))}async _split(e){let t={prefix:"0",depth:e.depth+1,peers:[]},n={prefix:"1",depth:e.depth+1,peers:[]};for(let o of e.peers)F(o.kadId,"base2")[e.depth]==="0"?(t.peers.push(o),await this.onMove?.(o,e,t)):(n.peers.push(o),await this.onMove?.(o,e,n));pk(e,t,n)}};function pk(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function mk(r,e){return r.lastPing<Date.now()-e}var u3=20,Ly=8;var gk=20,yk=100,Ny=3;var wk=20,bk=100,Oy="kad-peer",xk=1,By=6e5,Ek=!0,vk=1e3,bf=class extends Ee{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??u3,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??Oy,this.peerTagValue=t.peerTagValue??xk,this.pingOldContacts=this.pingOldContacts.bind(this),this.verifyNewContact=this.verifyNewContact.bind(this),this.peerAdded=this.peerAdded.bind(this),this.peerRemoved=this.peerRemoved.bind(this),this.populateFromDatastoreOnStart=t.populateFromDatastoreOnStart??Ek,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??vk,this.pingOldContactQueue=new Ut({concurrency:t.pingOldContactConcurrency??wk,metricName:`${t.logPrefix.replaceAll(":","_")}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??bk}),this.pingOldContactTimeout=new oo({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.logPrefix.replaceAll(":","_")}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new Ut({concurrency:t.pingNewContactConcurrency??gk,metricName:`${t.logPrefix.replaceAll(":","_")}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??yk}),this.pingNewContactTimeout=new oo({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.logPrefix.replaceAll(":","_")}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new wf({kBucketSize:t.kBucketSize,prefixLength:t.prefixLength,splitThreshold:t.splitThreshold,numberOfOldContactsToPing:t.numberOfOldContactsToPing,lastPingThreshold:t.lastPingThreshold,ping:this.pingOldContacts,verify:this.verifyNewContact,onAdd:this.peerAdded,onRemove:this.peerRemoved}),this.closestPeerTagger=new yf(this.components,{logPrefix:t.logPrefix,routingTable:this,peerSetSize:t.closestPeerSetSize,refreshInterval:t.closestPeerSetRefreshInterval,closeTagName:t.closeTagName,closeTagValue:t.closeTagValue}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMinOccupancy:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_kad_bucket_min_occupancy`),routingTableKadBucketMaxOccupancy:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_kad_bucket_max_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.logPrefix.replaceAll(":","_")}_routing_table_kad_bucket_max_depth`),kadBucketEvents:this.components.metrics.registerCounterGroup(`${t.logPrefix.replaceAll(":","_")}_kad_bucket_events_total`)})}isStarted(){return this.running}async start(){this.running=!0,await bt(this.closestPeerTagger),await this.kb.addSelfPeer(this.components.peerId)}async afterStart(){Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let e=0;for(let t of await this.components.peerStore.all({filters:[n=>n.protocols.includes(this.protocol)&&n.tags.has(Oy)],limit:this.populateFromDatastoreLimit})){if(!this.running)return;try{await this.add(t.id),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(t.id,{tags:{[this.peerTagName]:void 0}})}}this.log("added %d peer store peers to the routing table",e)}).catch(e=>{this.log.error("error adding peer store peers to the routing table %e",e)})}async stop(){this.running=!1,await Ct(this.closestPeerTagger),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort()}async peerAdded(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),this.safeDispatchEvent("peer:remove",{detail:e.peerId})}async*pingOldContacts(e,t){if(!this.running)return;let n=[];for(let o of e){if(this.kb.get(o.kadId)==null){this.log("asked to ping contact %p that was not in routing table",o.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let i=this.pingOldContactQueue.find(o.peerId);if(i!=null)return this.log("asked to ping contact %p was already being pinged",o.peerId),await i.join(t)?void 0:o;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=he([c,a?.signal]);K(1/0,c,l);try{return await this.pingContact(o,a)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(c),l.clear()}},{peerId:o.peerId,signal:t?.signal}))return o})}for await(let o of Er(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=he([n,t?.signal]);K(1/0,n,o);try{let i=this.pingNewContactQueue.find(e.peerId);return i!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await i.join({signal:o})):await this.pingNewContactQueue.add(async s=>(this.metrics?.kadBucketEvents.increment({ping_new_contact:!0}),this.log("pinging new peer %p before adding to routing table",e.peerId),this.pingContact(e,s)),{peerId:e.peerId,signal:o})}catch{return this.log.trace("tried to add peer %p but they were not online",e.peerId),this.metrics?.kadBucketEvents.increment({ping_new_contact_error:!0}),!1}finally{this.pingNewContactTimeout.cleanUp(n),o.clear()}}async pingContact(e,t){let n;try{this.log("pinging contact %p",e.peerId);for await(let o of this.network.sendRequest(e.peerId,{type:be.PING},t))if(o.type===xf.PEER_RESPONSE)return o.messageType===be.PING?(this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0):!1;return!1}catch(o){return this.log("error pinging old contact %p - %e",e.peerId,o),n?.abort(o),!1}}get size(){return this.kb==null?0:this.kb.count()}async find(e){let t=await lr(e);return this.kb.get(t)?.peerId}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");await this.kb.add(e,t)}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await lr(e);await this.kb.remove(t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,o=20,i=0;function s(a){if(qc(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<o&&(o=a.peers.length),a.peers.length>i&&(i=a.peers.length);return}s(a.left),s(a.right)}s(this.kb.root),this.metrics.routingTableSize.update(e),this.metrics.routingTableKadBucketTotal.update(t),this.metrics.routingTableKadBucketAverageOccupancy.update(Math.round(e/t)),this.metrics.routingTableKadBucketMinOccupancy.update(o),this.metrics.routingTableKadBucketMaxOccupancy.update(i),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var My=[77591,22417,43971,28421,740,29829,71467,228973,196661,78537,27689,36431,44415,14362,19456,106025,96308,2882,49509,21149,87173,131409,75844,23676,121838,30291,17492,2953,7564,110620,129477,127283,53113,72417,165166,109690,21200,102125,24049,71504,90342,25307,72039,26812,26715,32264,133800,71161,88956,171987,51779,24425,16671,30251,186294,247761,14202,2121,8465,35024,4876,85917,169730,3638,256836,96184,943,18678,6583,52907,35807,112254,214097,18796,11595,9243,23554,887,268203,382004,24590,111335,11625,16619,29039,102425,69006,97976,92362,32552,63717,41433,128974,137630,59943,10019,13986,35430,33665,108037,43799,43280,38195,29078,58629,18265,14425,46832,235538,40830,77881,110717,58937,3463,325358,51300,47623,117252,19007,10170,20540,91237,294813,4951,79841,56232,36270,128547,69209,66275,100156,32063,73531,34439,80937,28892,44466,88595,216307,32583,49620,16605,82127,45807,21630,78726,20235,40163,111007,96926,5567,72083,21665,58844,39419,179767,48328,42662,51550,5251,37811,49608,81056,50854,55513,20922,18891,197409,164656,32593,71449,220474,58919,85682,67854,13758,35066,3565,61905,214793,119572,141419,21504,10302,27354,67003,46131,32668,15165,64871,34450,17821,2757,11452,34189,5160,12257,85523,560,53385,65887,119549,135620,312353,115979,122356,10867,193231,124537,54783,90675,120791,4715,142253,50943,17271,43358,25331,4917,120566,34580,12878,33786,160528,32523,4869,301307,104817,81491,23276,8832,97911,31265,52065,7998,49622,9715,43998,34091,84587,20664,69041,29419,53205,10838,58288,116145,6185,5154,141795,35924,21307,144738,43730,12085,8279,10002,119,133779,199668,72938,31768,39176,67875,38453,9700,44144,4121,116048,41733,12868,82669,92308,128,34262,11332,7712,90764,36141,13553,71312,77470,117314,96549,49135,23602,54468,28605,6327,62308,17171,67531,21319,14105,894,107722,46157,8503,51069,100472,45138,15246,14577,35609,191464,1757,13364,161349,32067,91705,81144,52339,5408,91066,21983,14157,100545,4372,26630,129112,1423,29676,213626,4397,88436,99190,6877,49958,26122,114348,60661,29818,293118,50042,179738,16400,163423,89627,31040,43973,36638,45952,5153,1894,109322,1898,134021,12402,112077,68309,190269,69866,31938,107383,11522,105232,11248,14868,39852,71707,186525,16530,38162,106212,11700,5130,16608,26998,59586,108399,230033,43683,48135,82179,2073,5015,196684,189293,16378,23452,8301,35640,11632,214551,29240,57644,33137,91949,55157,52384,117313,5090,17717,89668,49363,82238,241035,66216,29066,184088,97206,62820,26595,4241,135635,173672,8202,459,71355,146294,29587,3008,135385,141203,14803,6634,45094,69362,50925,546,51884,62011,83296,234584,44515,56050,89476,87751,19373,12691,149923,19794,13833,35846,87557,58339,2884,19145,25647,12224,11024,77338,64608,122297,53025,7205,36189,36294,170779,21750,7739,173883,75192,35664,224240,113121,30181,26267,27036,117827,92015,106516,55628,203549,67949,60462,60844,35911,20457,1820,920,19773,8738,73173,181993,38521,98254,76257,46008,92796,5384,26868,151566,22124,2411,15919,186872,180021,28099,152961,78811,80237,62352,102653,74259,184890,16792,123702,224945,29940,19512,75283,14059,112691,92811,233329,20411,138569,53341,109802,50600,134528,66747,5529,166531,31578,64732,67189,1596,126357,967,167999,206598,109752,119431,207825,78791,91938,10301,27311,24233,252343,28831,32812,66002,112267,90895,8786,8095,16824,22866,21813,60507,174833,19549,130985,117051,52110,6938,81923,123864,38061,919,18680,53534,46739,112893,161529,85429,26761,11900,81121,91968,15390,217947,56524,1713,6654,37089,85630,138866,61850,16491,75577,16884,98296,73523,6140,44645,6062,36366,29844,57946,37932,42472,5266,20834,19309,33753,127182,134259,35810,41805,45878,312001,14881,47757,49251,120050,44252,3708,25856,107864,120347,1228,36550,41682,34496,47025,8393,173365,246526,12894,161607,35670,90785,126572,2095,124731,157033,58694,554,12786,9642,4817,16136,47864,174698,66992,4639,69284,10625,40710,27763,51738,30404,264105,137904,109882,52487,42824,57514,2740,10479,146799,107390,16586,88038,174951,9410,16185,44158,5568,40658,46108,12763,97385,26175,108859,664,230732,67470,46663,14395,50750,141320,93140,15361,47997,55784,6791,307840,118569,107326,18056,58281,260415,54691,8790,73332,45633,7511,45674,143373,14031,11799,94491,35646,96544,14560,26049,32983,25791,83814,42094,231370,63955,139212,2359,169908,3108,183486,105867,28197,32941,124968,26402,88267,149768,23053,3078,19091,52924,25383,19209,111548,97361,3959,24880,235061,9099,24921,161254,151405,20508,7159,34381,20133,11434,74036,19974,34769,36585,1076,22454,17354,38727,235160,111547,96454,117448,156940,91330,37299,7310,26915,117060,51369,22620,61861,322264,106850,111694,15091,2624,40345,300446,177064,1707,27389,54792,327783,132669,183543,59003,17744,20603,151134,106923,53084,71803,279424,319816,11579,21946,16728,38274,72711,5085,83391,88646,40159,25027,34680,10752,12988,54126,30365,18338,100445,230674,44874,84974,143877,123253,139372,28082,91477,144002,13096,219729,46016,50029,42377,14601,6660,58244,58978,23918,88206,113611,64452,17541,41032,10942,12021,49189,10978,40175,37156,10947,71709,106894,112538,57007,137486,150608,152719,40615,7746,279716,13101,19524,28708,40578,72320,1096,182051,94527,51275,22833,45164,81917,77519,48508,5421,140302,37845,149830,5587,27579,5357,428725,248187,6326,206760,39814,32585,89923,44341,288753,284443,96368,31201,94189,119504,20359,52073,103216,179,27934,32801,96035,34111,34309,101326,18198,20704,210266,37643,27880,141873,106e3,19414,56614,167714,66483,107885,86602,4379,20796,75467,4987,5017,118857,26003,34308,114428,29198,6686,29697,73632,3739,69795,16798,41504,7207,30722,21436,36735,28067,28545,3239,11221,36031,41889,100010,19247,317673,29495,174554,6424,129725,53845,94986,7955,59676,2604,191497,19735,102214,62954,23844,11872,179525,261436,34492,428,78404,142035,16747,17246,27578,37021,33672,57944,26056,135760,2369,61674,122066,31327,19374,157065,40553,130982,69619,71290,38855,72100,92903,95940,51422,165999,65713,57873,50726,7288,20272,2081,42326,22624,81120,57914,79352,19447,1684,72302,11774,302559,161481,96396,13692,414988,3721,79066,56627,46883,21150,11747,12184,5856,113458,176117,84416,52079,27933,3354,59765,141359,2212,216309,2555,23458,196722,142463,45701,44548,28798,19418,215,29916,9396,10574,114226,84475,13520,18694,34056,4524,90302,62930,13539,19407,77209,7728,38088,9535,2263,23875,183945,17750,26274,67172,10585,28042,22199,7478,51331,66030,26774,192929,31434,25850,50197,52926,178158,4679,181256,70184,229600,9959,105594,72158,73974,2726,35085,78087,23284,35568,51713,155676,5401,27254,11966,17569,223253,71993,103357,111477,55722,30504,26034,46774,35392,36285,214814,41143,163465,1051,16094,81044,6636,76489,179102,20712,39178,35683,125177,54219,30617,52994,25324,50123,2543,87529,58995,10688,125199,12388,60158,125481,131646,7642,133350,65874,3438,97277,101450,10075,56344,116821,50778,60547,98016,106135,13859,14255,16300,77373,173521,8285,45932,37426,4054,114295,55947,7703,39114,52,51119,128135,19714,60715,9554,50492,88180,2823,118271,52993,122625,97919,23859,37895,25040,33614,32102,20431,3577,9275,15686,43031,157741,110358,1884,40291,125391,13736,5008,64881,87336,77381,70711,43032,49155,118587,70494,4318,10168,30126,12580,10524,280104,104001,145413,2862,84140,6603,106005,13566,12780,11251,42830,571,179910,82443,13146,469,42714,32591,265217,424024,92553,54721,134100,6007,15242,114681,59030,16718,85465,200214,85982,55174,165013,23493,56964,82529,109150,32706,27568,82442,5350,14976,13165,44890,60021,21343,33978,17264,4655,22328,27819,75730,16567,55483,14510,17926,45827,150609,3704,7385,272531,161543,76904,122163,52405,2039,19165,41623,14423,228354,3369,176360,85491,7122,35789,303724,4465,13628,2233,55311,118771,20713,10006,221519,45115,71021,35650,29775,7337,10864,20665,21142,1746,15080,1624,32449,10905,105743,229797,7701,3940,22997,178467,57208,389057,39683,59403,63344,63125,54847,69691,18336,56448,3362,37202,18282,29648,138224,35867,10495,5911,28814,26653,31514,176702,26550,45621,11734,4525,40543,73944,121080,27858,155561,14887,44670,30742,8796,107455,113472,56369,75581,183777,240095,133699,153299,8768,160464,26058,49078,103971,21875,71486,44888,17156,9678,89541,123019,102337,3972,83930,21245,87852,109660,287918,183019,686,10100,39177,283941,11274,24736,26793,26214,25995,77011,141580,4070,23742,46285,46632,30700,26669,19056,35951,115575,174034,56097,35463,87425,24575,44245,38701,82317,85922,281616,100333,147697,61503,7730,84330,8530,59917,61597,17173,9092,32658,90288,193136,39023,20381,56654,31132,7779,1919,1375,117128,30819,11169,40938,23935,115201,101155,151034,4835,11231,74550,89388,59951,91704,107312,167882,115062,12732,72738,88703,464019,158267,57995,60496,737,14371,123867,4174,243339,159946,7568,16025,134556,110916,38103,191,80226,88794,29688,27230,10454,76308,57647,77409,113483,66864,14745,19808,12023,46583,84805,16015,17102,2231,20611,3547,95740,250131,34559,108894,8498,15853,159169,148920,20942,2813,93160,45188,210613,45531,52587,149062,39782,28194,57849,60965,84954,89766,84453,100927,16501,27658,165311,103841,54192,207341,19558,20084,319622,5672,205467,98462,61849,36279,13609,147177,24726,165015,209489,59591,31157,6551,117580,75060,141146,277310,21072,22023,106474,63041,137443,122965,68371,5383,42146,98961,113467,30863,23794,4843,99630,30392,82679,13699,241612,33601,93146,24319,18643,32155,95669,40440,15333,34089,67799,142144,58245,38633,114531,117400,77861,188726,5507,2568,8853,10987,107222,2663,2421,11530,13345,30075,41785,118661,104786,17459,12490,16281,71936,193555,17431,5944,71758,26485,77317,20803,367167,158,7362,93430,11735,172445,46002,11532,54482,930,62911,2235,23004,179236,4764,101859,208113,22477,55163,95579,14098,67320,162556,90709,156949,3826,57492,4025,34092,87442,104565,6718,186015,28214,14209,10039,107186,233912,58877,81637,55265,39828,6194,145813,50831,105849,4974,88319,122296,10272,197216,95714,51540,72418,23324,91555,8743,140452,250249,51666,34124,7229,38592,129641,78169,174242,22464,149964,51450,14034,10026,95376,26190,120062,14401,8700,265,31386,143573,7203,229889,61567,4227,140981,2466,72052,10787,10062,30958,6099,38471,30103,23202,208101,70847,467,58934,32271,32984,36637,24107,30771,17109,73353,13650,2098,157040,67366,66904,106018,265380,107238,18535,44025,32681,144983,62505,91295,56120,3082,77508,10322,63023,36700,81885,224127,16721,45023,239261,111272,13852,7866,149243,204199,32309,22084,42029,38316,126644,104973,14406,43454,67322,61310,15789,40285,24026,181047,6301,70927,23319,115823,27248,66693,115875,278566,63007,146844,56841,59007,87368,180001,22370,42114,80605,12022,10374,308,25079,14689,12618,63368,7936,264973,212291,136713,95999,105801,18965,32075,48700,52230,35119,96912,32992,8586,16606,101333,101812,14969,39930,759,193090,27387,42914,12937,5058,62646,64528,38624,25743,37502,3716,4435,30352,178687,26461,132611,42002,138442,35833,59582,16345,8048,60319,49349,309,47800,49739,90482,26405,34470,63786,32479,85028,39866,47846,11649,23934,29466,2816,42864,31828,7410,74885,49632,47629,111801,90749,19536,18767,105764,59606,21223,10746,76298,22220,39408,7190,79654,64856,11602,82156,272765,17079,70089,245473,51813,184407,384678,1576,122249,5064,27481,6188,25790,74361,27541,318284,45430,31488,620,93579,45723,192118,22670,51913,4162,70244,35966,26397,16199,50899,209613,121702,287507,2993,36101,132229,67345,33062,76295,118628,78705,52316,34375,107083,107454,44863,127561,33964,3073,154010,190914,55967,39074,6272,31047,5550,41123,26154,98638,47110,19998,148091,50229,31329,59900,195442,19106,61347,73497,70015,682,45850,25776,38022,148951,6288,37411,232526,109277,27286,32342,9262,5220,16651,23175,46740,129438,78614,121925,66914,88710,127952,5563,21500,34521,10739,14863,191006,62956,17359,16749,67027,56284,69134,43301,35039,58883,54466,60823,404451,75743,59856,86979,7923,34273,83785,32142,7693,268986,197428,282681,17049,22346,22990,92245,107180,3357,37104,96724,49153,7683,31197,43267,82231,164276,23696,20848,188364,22309,24821,158707,1018,22514,70922,27792,45589,59709,10765,736,35218,63479,51987,24275,63588,55361,92929,81964,4658,20122,12330,44058,13065,311456,72224,8337,211229,38979,22590,138478,52757,32595,133600,8838,31549,94412,43391,90056,1585,94802,127271,6223,31889,137038,132910,2165,57616,230152,6080,10748,36737,74579,134062,50525,180532,119270,34556,76155,82394,52595,29258,31435,87820,67996,26943,183878,38007,2410,13526,180297,69856,3503,187396,167700,7838,16701,9199,56267,3661,37407,65994,23767,5708,62508,221700,67088,86978,46776,84434,32088,5612,9149,88244,21685,95151,46750,189612,2979,506311,2594,3628,40074,105039,78243,28523,6651,38058,71999,30992,12764,68261,108991,6165,26450,61961,13400,22426,7490,60890,109623,2070,12958,50355,67979,257096,7213,42578,52121,35716,65461,7516,124758,39268,302,64712,14977,1467,219452,2840,34229,11121,21602,19270,63574,8024,1532,17331,79839,78885,52029,180767,57957,6069,91265,61380,55767,8927,32881,287603,22149,35029,68876,6428,199567,46926,13412,104132,21434,366616,45060,110046,81924,128910,45886,52821,130416,29416,77342,21762,67329,121432,79924,11724,38625,81006,102033,28338,13326,3250,82056,82526,38212,21112,12382,111495,3263,7414,86274,93490,40844,30224,45212,24019,48411,71367,24941,76729,57776,3769,38114,202019,197745,31953,237533,33270,201580,255648,100798,44741,32241,98468,106931,10085,15090,170358,33154,66787,18819,69760,25061,234005,82660,6295,131975,16874,9076,4094,25005,17740,40908,19533,220019,44330,99792,50040,19619,13950,55228,24423,31253,95308,103177,184795,28590,82285,5059,3210,75525,49894,70007,56178,10580,36051,139681,21617,98736,3555,106306,164189,37352,63915,47824,24883,145530,61904,28444,11483,19837,145446,30420,112972,85939,11835,191233,2262,20705,58630,1753,148334,1197,144714,6887,11223,107667,60879,77914,4151,57417,81594,96681,169430,1784,20444,95138,254041,27038,596,7117,72808,13759,3353,126776,21074,55322,27081,36942,39547,139830,179275,4453,713,8722,71399,19204,25785,22794,23923,104114,11291,25458,102309,88396,75288,230440,206396,104551,58447,130857,37247,94734,31548,176529,226077,65159,20104,10096,66881,94191,237909,27109,37404,1520,27421,25220,113003,23423,24884,50585,6286,231877,150800,11789,3226,90004,60642,5053,202400,61442,132531,175329,57138,30116,103847,9973,75367,16452,32360,59119,21246,10191,164804,23305,61051,37348,154530,13214,5468,50403,66754,130976,50559,80515,14436,155492,84017,5472,43107,41240,2890,90431,70188,382,76234,48040,50211,281038,237007,32115,142178,1536,22761,96429,1811,31243,1679,49143,55209,17402,235054,61494,7462,77030,34925,87609,78002,9499,9027,73289,201078,101379,63544,27666,5469,10642,30029,49816,132979,95620,58086,351930,116300,2110,2043,30845,6154,11279,16727,4122,2277,27281,4971,3650,39060,61970,65951,39674,75686,38151,11370,130809,177895,32665,63725,122267,7857,39618,118483,44792,157755,178624,136994,24260,41308,22471,12404,21707,12486,30473,52781,50246,20247,39065,909,56825,103158,128603,31542,1089,41935,32744,12428,37963,84420,33134,72921,208449,42622,168151,127335,147107,46699,38216,12591,94342,85814,31423,24944,2605,87542,67473,192551,4496,56321,91819,17630,6300,256183,114569,202090,33209,35289,34897,24967,40520,43470,5344,10199,34810,14283,10381,10017,62923,49924,23233,64539,13051,35686,19698,11570,135555,120868,44924,87065,52318,52335,47586,140906,245885,109834,78668,9065,46990,25258,72022,61243,40838,4545,146387,10537,11557,17470,36930,68104,46711,24264,79401,81043,18225,120488,24746,84338,81652,28266,13776,21878,46973,1047,230465,73357,95777,24973,210160,62210,58404,110633,169651,6937,41870,9909,26822,191062,76553,27519,96256,239070,2478,205678,67955,58532,20601,50120,19148,78501,195724,110740,8249,109665,27446,30568,57631,31425,49752,32820,65504,50079,3663,102256,219898,23849,211315,14645,4359,91767,9528,12449,49366,7941,49763,107848,8930,27086,50686,9744,10447,81935,39513,46514,1670,29229,6172,22312,137280,97759,9806,14445,22976,56458,73391,34983,93760,174219,52573,33149,59747,2429,136277,75123,165263,91040,7446,57632,48633,97140,246081,84766,151684,79918,93268,120346,54059,54875,77858,32996,103590,45276,11968,19600,25849,17159,132907,42828,16817,4913,99462,103303,27395,5737,74184,20749,21160,14377,77062,131403,158735,10999,27799,77785,9320,34366,51593,61070,33746,47048,29268,36675,30262,53297,9832,82e3,20188,122292,39917,7331,18160,68301,185935,134830,15031,4935,10004,165845,185534,46923,30109,44134,122631,18874,22903,112790,26561,18549,348902,82871,140345,255565,135390,63556,103747,145055,179600,145662,296111,61661,211987,23952,52342,126343,48450,32919,44277,82185,9591,62139,205363,376969,394874,108461,18040,120885,14798,39863,16571,16794,58271,81025,55206,14640,118656,6361,44092,85970,6262,153863,108244,180200,72264,79947,38044,10050,5735,61221,80712,5471,115689,11391,11661,184257,20010,60116,30320,19327,134598,45455,27542,18004,125092,452272,1549,91523,46567,180063,156026,2608,11174,58848,37788,65907,80194,30490,5786,40775,119519,106241,11323,156297,8425,61495,2617,29675,2425,59886,112582,49142,59618,4863,50597,86710,50650,168632,27693,85641,83643,18993,25768,84284,28090,93592,36627,312804,43381,9887,9402,100931,97165,3311,173330,66805,28935,4963,184460,3201,78102,19126,21607,37496,24938,22615,16153,32862,134792,153318,61120,6067,2812,12826,12792,23825,37559,64662,202250,102694,155488,85881,149193,46233,65383,15521,106982,11358,176786,25752,39717,34208,24510,32464,77742,39371,72028,138229,60688,71386,102834,132477,2208,11548,63670,271279,28351,30338,38620,32491,99845,143885,152266,13252,2825,178663,108097,1775,78201,14897,113573,163346,62292,171129,22183,96598,38733,64971,166776,117445,9968,146393,44677,74867,20908,97328,12761,25656,26785,9148,112344,26115,99176,110121,22437,49547,6180,79320,5835,31392,43328,33377,75870,119860,69497,80273,7325,155219,43167,111173,28347,20222,3763,71752,55041,47252,14618,28088,15012,97805,194698,54636,2036,41349,6173,96604,61530,51859,43782,13361,24334,22668,24792,7070,23441,16789,3209,36211,208475,26242,32880,122181,182407,21444,31060,88459,29929,77907,12716,10934,97005,20599,31690,8403,58445,30303,22700,10336,86731,103115,337709,72556,46788,112566,47684,67089,53548,36874,56487,41387,125985,26893,40071,106683,73712,18787,40105,72992,67246,137276,50802,36790,70328,138827,22466,39263,183295,29858,50975,9322,57397,10654,24364,30383,55799,41600,23584,127295,296610,129078,143558,244131,86397,36049,1085,80677,3820,108139,5476,34767,24683,7758,13060,7239,131671,250593,59556,103392,29810,4188,252323,39404,116877,7651,43600,40338,13554,157253,39196,25978,144387,61211,234,50104,6129,10449,93777,9240,356378,274148,4439,72970,3724,147770,78680,62570,115877,40027,40547,36817,224392,64609,34795,165027,67440,2477,37206,23431,50754,164797,46018,94995,170982,27051,7957,22767,3674,27900,56419,18930,60701,41302,2692,84749,339721,61996,111094,80221,50129,1045,8153,62945,19202,8250,37208,37418,32560,79477,41106,88569,33963,36693,5892,30570,1581,66471,49647,11922,160717,29442,5643,114865,82962,95982,132098,22633,22838,94726,54556,28566,205039,162340,33216,16849,35847,221339,94851,26533,71469,1805,3804,12935,45483,71020,36310,65381,192960,34240,35165,59773,1248,46954,155332,96864,4246,388800,16129,57133,74592,44807,442014,38203,42574,80818,91592,26377,36424,65760,977,77387,22628,147610,28018,30561,98454,6969,119628,63648,18170,36854,26601,64018,22027,37279,51395,152934,21153,9430,58760,194742,5330,55115,34158,28917,174111,13171,122326,1526,43896,66094,25325,4234,148354,11450,275,18999,112191,44365,22723,68409,8733,57746,96565,75007,14196,108844,29475,88599,177563,100792,106156,86323,93726,14248,135341,194131,40126,47099,14779,8272,39597,95983,171398,65882,28052,10393,47213,40689,22120,72212,106829,34964,109146,753,648,21660,30047,17527,181025,5619,145357,4085,216883,9359,186951,24779,53931,24545,36197,223296,62628,168101,4243,107313,30321,26642,13049,51059,31027,107912,807,73550,26551,84369,122422,165872,49754,74213,234264,33151,52014,33100,87183,22365,52500,40013,23302,5652,72723,21404,26107,48434,587,94049,168493,96418,32871,70860,31709,25128,443,71597,166253,15670,70994,26341,133675,28280,75491,54756,47955,56028,26182,11952,113272,472197,64640,110753,17919,337,50642,22576,142,87371,53391,93210,126694,15285,19642,85667,14148,1506,42092,52962,33243,11970,20734,135843,57044,58880,13002,219134,22876,64754,232519,4257,43120,321573,24799,64526,124728,52579,81472,70831,276848,17403,74359,23021,182101,74597,23744,148267,12055,7976,5349,11772,67540,167347,65318,18720,127832,108238,22828,90233,9987,259080,118185,73209,79270,13775,90100,137742,90799,70569,15699,19961,9087,67475,57872,39731,8810,134897,131868,146849,19898,3334,2281,167061,91073,60356,467742,74712,188,53179,137679,92769,29241,9537,132595,80119,1041,88962,5976,40171,44911,102859,139059,104558,98987,47761,19272,71472,113864,175377,73338,10857,23402,23758,1591,139864,5644,4076,118760,16427,134198,18853,20291,100849,37423,22038,36677,19071,195521,57445,11069,31869,55718,66882,148490,44,41296,75242,49704,166810,9906,20943,122258,49112,105667,15969,10344,6408,187694,21399,72742,58970,14867,14376,81889,41856,23225,15042,56993,16074,131389,74276,72407,53875,383108,53597,37363,68993,44854,122548,430927,198279,38430,80409,12245,2981,628,2818,17760,37437,238229,7968,46892,2200,3730,34190,65983,37959,112291,87850,70827,6522,20750,73913,111621,41652,19587,2780,58668,25916,85259,18200,168962,95781,42445,102050,7776,57662,103313,47742,96358,41964,66174,100396,29069,204735,19679,27978,7479,40264,22534,61183,36081,107436,58223,14680,23002,101311,24716,124108,12908,5646,31750,40380,14215,232799,102772,14122,96775,61398,50917,12096,149880,67833,598749,124194,155871,49216,790,14677,65319,56917,7440,145744,95701,12206,49405,129269,76199,45732,9767,11058,9047,210885,11051,7392,26307,2130,8132,147526,20802,232698,115660,50060,59789,57344,107623,80343,112676,23291,9866,160971,34032,118291,15719,59730,164911,28975,2659,58046,78480,21854,66209,53863,109085,116045,29021,46481,107552,22130,18764,70254,31272,11300,52460,43933,84738,20721,53869,190840,79673,105300,7561,321817,66924,13940,33281,101046,183181,32176,71878,5678,62924,79535,56646,40303,19559,27703,93042,73368,42187,3670,37376,46440,7023,36816,109628,20680,5940,276440,275233,170848,112093,136996,14984,20226,111441,77693,112960,48577,39370,55707,50314,123404,26570,54281,61372,123391,4857,35928,246740,132507,106646,44241,7196,92258,9825,37688,51197,303141,5590,15476,132986,10955,85782,34486,26696,7991,28813,18858,39546,11703,11365,38185,5716,93555,11925,40121,60002,6985,10976,171384,3887,43394,13337,56346,6381,252336,39573,75042,53711,1028,31781,44295,95925,131713,7214,68125,43571,70954,213234,1628,8760,13391,65485,17320,56038,1710,25248,60803,57399,19839,3870,326,281556,50945,72400,21460,316244,75619,56246,98775,481,13513,55765,50427,7388,123519,32929,57908,27124,61316,101097,57467,30228,48792,10788,20402,37318,50526,155730,34456,158065,145305,17832,43733,64052,4506,35072,205355,177028,184004,187081,68616,35938,83703,10367,36892,93186,260137,51934,89970,4985,23445,26755,21558,7948,78741,23376,124405,85594,68596,57536,49351,12619,56593,132668,99924,109728,71844,71935,196018,65464,17617,14987,89701,143773,33997,8687,22701,33258,2914,4436,72108,85610,9671,49067,2327,82988,1361,1672,44033,35777,30269,24057,10605,82236,616,15793,13919,47249,112086,116698,9484,80207,90574,33304,68624,93127,56101,42210,160929,4827,38995,38095,4701,125119,5027,33680,9236,231236,14135,87837,23318,70261,78893,30151,81482,14332,1084,74256,27532,46644,79185,3148,62615,6981,55672,31668,36825,1849,14536,37446,14738,23779,43058,162749,72199,1168,21346,5592,85932,85302,9668,18351,57135,150360,2080,228015,77953,34670,119302,151751,31009,106725,84265,45214,59289,74178,113071,263206,111009,4021,44449,188119,192629,123592,392506,292847,114487,12831,205858,9852,20780,79648,75767,357014,97721,18166,21005,67950,33226,204009,16536,2987,11335,66717,144910,47950,17262,55060,15063,2934,51038,26775,178497,66008,3427,49433,128592,20036,157553,63861,3089,23015,51210,28696,35933,49942,71135,231518,99620,17248,21835,176536,20676,16944,38700,165831,233253,295625,36723,13023,52745,10907,19423,67972,125868,95473,82875,1183,108455,52685,33417,64095,21433,52438,33191,127809,44505,211823,7810,2752,95548,162031,7185,91196,47563,61721,33359,17897,23682,42806,178101,22874,49707,199897,75419,82456,8618,11171,79712,116847,18783,44190,46564,5346,59046,95032,7893,14916,3214,26800,24172,121453,34362,10250,17408,18888,4840,68696,22831,13162,36005,32512,14800,62357,41723,45046,27247,37486,5372,2564,34261,298500,66509,133920,89138,31305,117697,19097,108304,81386,84106,23802,46411,63304,946,51417,41777,41041,19501,115864,60743,294354,37955,94165,18116,1156,17937,20645,57114,90804,58042,48643,92288,9861,2557,88546,61333,101008,12853,5148,87856,4152,144503,73841,18718,9789,147565,10846,42085,12789,30223,8993,56352,67203,2448,28215,6052,23540,126319,75933,36689,80235,23231,23561,21383,38800,77548,102798,21234,31468,158608,46188,63960,191679,8051,67014,11185,170078,42186,28827,34777,41930,212079,12421,34750,24111,110344,73918,45171,70826,141949,40063,23979,24254,37309,26724,27179,24718,83648,54938,14591,17425,29525,102675,48975,48654,12316,8929,60640,41709,50168,63264,89812,50716,48632,38755,138583,160123,55579,71829,24230,233277,46322,39650,166388,34718,24108,98252,7031,106695,62498,18258,35062,217827,78731,34824,33354,19520,60852,2432,60224,8587,2836,62955,702,20227,42285,40560,95592,62486,11094,53035,143291,18842,46177,77994,1770,9657,107422,172915,32655,128716,25886,25164,156740,119928,165875,85817,11007,89110,33956,12652,65156,180266,8494,36889,19958,20955,96,1264,118288,135769,44754,86671,5632,19026,168220,289120,33569,93821,66144,70635,7687,5642,2714,55445,56636,71545,184182,93133,7332,37389,12643,52315,22729,11014,158742,17050,152889,50178,34601,41945,52136,9948,26914,63548,95721,115951,40759,8960,158258,38938,49232,48325,42234,81523,253019,66128,40978,20048,238048,38760,62928,122560,118532,43687,137472,163689,26680,9878,17448,51035,16211,60834,36749,29178,14241,59868,150086,2305,26477,42422,34342,165341,83279,33894,14257,29928,12743,13957,125571,89134,66712,10952,16507,147839,30146,7249,16565,45399,39874,114565,215780,31990,230881,171477,102,196546,44538,10880,84948,281705,86651,10617,31395,2342,453658,43569,60561,132901,21845,17727,58556,258242,22262,58728,4008,77997,11806,37431,30599,81375,109137,185787,114085,217292,97453,169085,30593,60212,11544,102056,65580,2384,91655,4855,95725,7295,157994,16228,20669,53276,141590,105246,17334,25440,76067,17967,39321,38911,11362,28559,63807,21627,26468,85816,40120,1025,15234,58319,69516,66512,124548,75845,78873,22137,46681,51242,85683,32909,76747,35555,43396,101465,1765,73094,1077,2962,39028,66777,57831,42048,15828,13962,36041,63657,52412,5242,58846,2141,5506,219012,134451,3936,182230,17558,17153,152237,22621,49377,170216,35257,68233,65374,6510,11126,212151,7184,2480,22517,3437,33073,30156,16557,3768,55067,86829,91e3,12350,148650,66017,79424,70885,49066,28250,21369,51213,34533,11510,3258,18176,18465,84413,6315,36411,163765,4346,356,107618,598,13727,285026,162695,8749,14583,7132,63521,184253,32378,25991,5604,30961,53675,4874,84693,5086,34811,26978,56564,7904,33519,51221,113942,69253,6664,125563,22055,220680,102008,742,51930,19494,176108,44424,35123,13025,75685,11759,74335,22250,181453,131147,16984,132115,154311,11991,76452,52609,85351,196,30969,9198,74919,2529,56838,71779,29187,116304,3504,62330,41190,86153,28393,254926,104228,105189,13264,84359,3574,12415,8534,57147,10175,188174,59504,60932,66318,16407,107921,17638,99103,49278,28403,39786,145865,8462,3558,43406,142271,29139,21989,36552,93955,72365,7176,13556,106185,37957,321774,17782,129017,51154,27938,24952,1935,39366,2791,33489,41582,56078,24558,9311,5449,218786,27808,190429,68013,36020,86003,29735,3404,87348,119357,115714,2324,86796,81973,40992,43376,93621,28784,16808,36367,2517,2909,191926,24978,55303,53308,205724,60068,3098,21375,64784,23949,26579,63121,12319,80145,39967,97861,6757,70143,67642,37082,34698,69140,122883,46151,62187,80934,429,19437,135071,137885,222647,13331,154065,327,61778,74257,40116,37493,14855,85079,237641,42342,102164,199965,71204,4662,29368,5042,113914,122214,8955,13149,102503,43173,5659,163787,69003,307084,63392,171080,21390,81918,86666,36622,24126,28887,5736,28054,207170,163428,79891,346467,95363,38980,111806,80828,9200,19288,294896,114468,87405,111715,141705,7015,72754,68463,48738,243147,33397,101210,37051,98801,82847,20397,4940,185559,18716,54718,83491,11725,40803,1128,12128,23060,5174,7745,67007,46701,1571,27807,180186,256996,18975,16837,7877,212758,250379,15440,87954,57755,24719,124057,83461,258,50864,8874,29038,71289,31627,15429,9005,4061,113851,107716,82819,13651,79656,117851,17539,111446,12938,39724,190787,4352,15402,21070,62708,8539,23777,73853,13552,38810,86117,16285,56400,1718,75342,142863,29033,378,110113,180321,32586,23606,26393,160984,207987,23783,8406,16904,24596,47274,11693,46539,60524,78595,48423,31718,20170,9009,146268,15183,191060,172765,1349,138436,37365,10970,40509,225817,20021,70394,152138,21541,66559,66544,89352,2725,17258,91345,7313,3815,115868,8660,40362,4071,103524,39388,118275,21950,6549,38226,32754,209574,29201,43495,18028,20296,40597,18370,47520,202450,24134,2219,8195,69545,38041,136934,46374,19041,159811,84865,58620,846,98749,13569,30714,97246,32186,4479,27355,92973,35214,151491,75963,37631,1561,27200,238083,23182,60756,12291,25766,39355,102333,87362,65741,59906,19538,201575,48772,102938,24438,292580,39964,66366,9004,61379,50548,37622,38732,28379,68180,76622,17488,69849,5963,7219,48143,43413,55358,540,58691,29506,19245,52193,48621,5518,13048,118625,44755,191081,42061,89197,2259,60665,66994,71210,51232,3585,142096,55024,7892,8345,58653,463307,65658,64319,137941,136323,53499,12746,43492,6978,95163,29925,60175,5128,7352,41463,184756,121146,20473,18426,4598,5309,54580,14277,121151,10691,56711,43880,63409,76682,11830,172218,264898,32632,66536,81062,31649,25788,92774,60222,11100,63159,9432,224657,25240,53613,152,138620,163829,2397,85345,12501,37507,64932,38575,43522,65789,80198,78796,35226,3851,108891,73311,3060,28391,93671,39663,46142,30982,66041,37281,68157,26553,71872,81142,211527,39747,118119,22695,2859,11066,20232,168911,7933,197005,17066,111071,44434,133994,120798,12766,227798,45756,132852,29917,36076,55352,65281,129800,41958,18944,84678,18580,168093,132621,39997,54092,27740,32354,3770,114118,103242,43918,15899,18574,145944,3190,123469,219903,24169,100571,62403,16776,92779,14535,17168,16475,14304,37231,1712,28218,242754,61688,28980,1318,51359,222657,99200,67989,31772,23932,35351,201251,49041,27306,19128,40135,3986,77333,19649,120683,151927,21081,7076,78375,77501,101599,8011,89585,96715,58179,5378,102138,106793,26051,217276,4197,16297,27014,46721,13322,22806,5278,29629,70632,9647,71519,58818,40603,128530,8903,36770,56900,31483,26935,43845,34265,34920,87658,6114,84767,64250,47318,50720,19264,162514,33357,13117,6705,46696,75032,71054,87004,42035,69138,11903,99854,102328,19611,34525,69312,6431,49842,101600,133178,108751,41829,89939,225664,48916,99556,9195,130387,5960,36857,116724,53518,94002,39077,53996,6945,22261,64291,8314,152785,57588,16522,9091,5048,87671,35441,39509,1945,12423,158923,178413,37549,14095,1475,73188,62878,4819,24012,68534,42606,4010,120809,57497,59564,101758,103718,32701,80116,12345,95834,46918,21468,53213,15665,31200,3867,5140,96013,250744,21016,10069,13968,35449,180829,27683,39704,59956,22893,3115,26293,32785,75934,62445,141162,62720,2018,83638,19949,114012,95006,3330,99829,130935,309272,9565,55874,121727,37017,23586,319858,40970,27602,8625,112329,61060,100088,118525,25922,16232,1907,60671,51583,44553,80993,5262,94679,8676,940,20736,11823,3020,16476,12340,152600,97416,3703,25744,66826,16245,16876,46446,84798,74227,176020,45192,61955,75496,23946,23626,40372,26036,6149,11822,30582,16541,41914,82385,232823,40921,80773,14930,3631,7517,39619,4348,36180,126106,138939,62611,1477,113512,47321,25052,14546,118881,29060,23589,128322,36795,18401,137921,104699,267929,36194,172791,18113,4766,188215,30083,332586,94089,5805,77909,22194,68234,154976,43220,40660,70001,184893,138095,11128,103010,22663,5108,212615,8485,5565,49222,54614,26530,42639,16319,55062,152662,105595,21114,22216,10294,68158,10436,86950,7206,62115,3977,3657,59874,456,118617,18156,106663,112229,80992,17442,8217,55551,5133,34344,251927,51153,39364,201321,7816,66803,23057,156724,145664,14276,95705,979,2796,6875,13429,212525,50602,26276,28284,3424,19465,52397,46963,31420,51399,206476,92317,48851,637,100820,83349,10317,60227,21972,6908,282439,32857,224767,95629,83882,42106,87338,69757,29840,68709,37665,45244,114577,49188,175943,54009,186746,106158,70168,3358,234002,50555,9221,129338,9562,20118,32923,78479,118280,65752,4977,10474,102174,60947,129006,10570,83451,8598,8078,159367,123785,80438,16742,5905,5281,181513,42402,6977,163136,93179,42191,14968,50421,112401,105440,33456,57347,121611,4221,94954,36517,24046,27796,6255,33394,72990,135408,116627,1233,57874,25654,95419,68156,401399,313338,55208,45573,93124,119251,47200,38196,11909,130667,45391,73904,64964,167846,4137,115606,52036,62214,7969,160925,7187,1132,134835,40309,73195,64494,80472,444841,61111,26500,45323,40743,53625,52797,22659,15631,29739,36706,28841,39147,102836,26794,10536,14845,87305,45874,12241,127587,83833,57183,79722,30844,41304,84655,20825,92500,3722,25655,27811,10157,81634,31362,34088,92487,70123,22190,185100,72658,139035,192523,88241,2078,230490,44528,85638,100198,22088,29982,291233,241062,13865,4445,137791,37835,107218,31726,19718,38234,72528,23046,19177,66695,5109,17251,28077,5617,21554,47839,72425,133825,1486,73065,181275,141508,21768,62971,63082,2512,34200,9904,120309,6392,91243,68416,268253,41199,116757,138551,185526,41246,28986,4093,19057,17295,4148,245766,122360,35356,112075,20301,75441,10998,7977,19769,62922,937,63547,100196,26427,157820,20983,236696,22935,8140,90315,156004,47204,140973,7726,45097,52725,22636,23436,257282,105247,522,88389,216031,202204,46812,211666,19693,68828,81691,45925,11256,30292,372,5236,167826,88328,232776,151611,5360,82104,18841,80393,25465,18285,20320,72377,31730,33160,45803,38715,27705,37379,24163,18360,103586,4015,32305,269494,91252,20080,36567,54650,7797,57073,12650,31164,42209,6375,261663,105528,81661,106002,2800,5375,17247,43151,4442,15727,194619,100855,144898,62320,78465,39929,16454,1967,28311,61363,17219,9395,8745,121445,76939,80385,162380,22009,54191,44248,16299,122830,48151,74429,78291,64755,14238,44966,2511,17712,67954,93583,829,105899,49935,84750,11591,33185,85447,42717,27409,208542,28965,62052,52525,5597,25694,65594,16343,63224,276188,12475,9331,127507,38522,57287,24128,133161,79723,105548,133695,48917,27558,43278,46520,13778,141954,110785,83366,17715,46317,105763,66298,147013,41086,94180,16478,220447,44611,730,19722,78975,117889,125643,26254,16574,18480,65006,15806,38549,246418,46052,36056,8440,34984,30170,3163,59800,4458,115442,4283,41970,33507,104078,1653,22,121158,276486,3655,6338,24048,133421,23641,2161,24422,36006,8086,10675,181474,12307,29514,59143,14729,52509,87128,122470,19446,80852,33314,24573,119864,14237,9652,57779,6612,51851,15284,98871,90581,124466,156831,21190,22015,71380,161906,87247,69201,18392,17908,108470,72962,40719,14338,17911,95260,43339,20610,78916,20710,72451,11315,31448,17263,58853,178878,48111,116002,45497,80506,82605,85880,36300,121755,25215,36118,301929,88728,405223,276136,553,34704,212438,49970,78329,922,20711,25036,257130,38295,145369,18128,15385,30829,55656,48345,8012,3561,28004,122041,192900,58338,112508,41085,29976,87040,47117,23905,4336,92061,138880,97407,42083,172121,6256,25192,172671,5,93568,1420,12677,31605,56743,40620,6015,78415,231077,31298,80026,13902,19048,24924,170586,32955,176119,87859,36731,6773,27711,24658,26475,115216,133207,93250,95820,88522,8317,5714,124047,55219,86860,19677,23961,22928,162209,8904,225992,359835,56084,96201,29392,96558,86071,93643,55114,13347,8183,95129,82012,2017,123336,34219,115554,157159,47747,101684,41008,18735,193781,104151,226906,7552,179874,124113,31159,21162,44010,14771,51268,166128,31382,73124,77438,92830,205709,12113,1292,38937,13114,1334,2118,15597,69581,14449,21934,76618,48728,67038,14967,51495,24243,87736,147249,26720,11119,46063,43749,5843,44147,152629,133428,65703,14269,45604,57982,28672,55616,45957,8438,95433,37698,220862,132034,39456,61870,4161,26501,73560,56418,9845,4654,20916,10456,88920,119358,9015,65931,96507,48029,38534,21676,109081,43078,34943,25089,6131,28766,23665,5477,10255,16695,67,45778,42443,42770,29534,23733,100513,62617,42630,48746,14191,43753,50295,26007,8792,57243,43119,54725,164253,58250,112304,131796,25165,4651,3188,24831,47748,3705,19540,13211,102095,5593,18699,23666,32005,117571,33541,60584,74573,86311,99443,25172,27222,168938,7143,11853,53560,18834,19960,86522,28217,53266,117700,72989,34323,18721,66450,34346,74056,47217,202002,46269,9429,68582,75458,37823,82843,96652,32549,145144,27958,19820,158086,31955,201406,135379,31207,192545,12950,51704,9094,248263,76147,64028,110009,79407,89345,99284,223492,47966,26848,15359,201137,2861,110507,71231,72297,31851,118777,71039,151051,240855,16333,50766,14727,7939,4149,80908,418780,88378,59276,1327,7284,38576,79814,65820,42199,84860,49574,62596,12396,70598,40117,8648,7994,16836,7630,14047,359699,106878,525,29037,28064,13380,11675,50669,74216,103539,180314,27449,56299,172344,19274,7301,246099,32043,19422,36506,129317,6806,30140,4614,46639,66926,932,86600,6322,27847,233103,10541,39025,34887,3517,12972,26220,2031,66561,115015,48658,47596,12714,33845,3893,16165,35237,89983,14769,11962,147224,47018,29977,27979,5552,82338,86023,131368,1218,24853,237840,132193,15455,40873,3668,65351,53388,15229,59889,272245,47934,11858,34347,18038,90853,86981,300602,19343,114181,29362,84921,6095,106059,79472,38015,1206,48741,6208,8e4,21916,17423,6002,108083,24479,34931,56661,9511,26995,100694,163853,35997,81254,58321,18919,171890,86877,91341,74503,70477,53412,7027,59281,39892,131302,5864,15947,61301,67466,162369,47956,27874,35624,282324,21270,111847,102548,41482,30955,116737,28264,8592,55458,22301,75090,29821,30697,51709,3041,19208,8038,24634,30467,87509,126428,19389,18814,152686,20701,83474,45832,80891,105808,11378,153223,120770,98186,150633,49838,9141,12755,30962,5260,74490,21256,31678,65062,33326,289838,187831,20595,89768,2805,58535,10844,70085,12090,2451,138068,98544,24461,4511,6754,41684,28203,3383,65355,82833,30161,83924,234361,128424,28921,222594,33975,125491,34069,11508,67464,144226,41850,98703,34371,7901,21254,38398,65651,23549,53883,213340,123269,12028,71764,177701,28758,2623,68395,11549,15232,68603,9660,63116,36079,57093,31198,20475,48467,89984,35619,186847,107469,31389,43631,73867,41949,68841,114250,1605,30564,63403,17588,27680,99533,12641,70325,50428,73426,78379,11855,91651,72081,91720,60198,15743,12065,83398,140046,6761,46598,45900,5068,886,62448,148968,37347,19405,9680,15819,43496,63370,75667,163700,37639,3633,22774,34341,183131,134335,37200,23915,7054,14194,12970,26438,13350,285521,25594,8219,104410,91039,168804,138480,149734,15907,33818,61132,60082,4622,110187,56736,13551,73571,3945,73463,65498,17758,263266,17593,2710,27585,54469,38200,45367,63754,28881,3473,12791,98287,31895,65787,4463,94536,24951,36332,59901,28803,52130,86403,7668,181822,74831,18977,9850,177206,145485,109798,7292,31421,26280,77211,58511,12507,127004,11113,147,8729,56208,43066,79926,129937,31345,83947,39915,46146,98763,42566,1337,13192,18323,105163,80570,117753,16555,72883,11077,159438,40764,70933,83329,26066,12276,72059,21655,173836,126713,69454,153482,91585,70644,102558,110483,6764,127864,190133,3961,101798,20945,71138,82402,90884,69669,44753,923,16939,59700,164258,25969,27082,31399,43846,6306,246093,51342,6153,151581,202801,182731,56475,162188,89426,141356,14355,121815,27536,28023,65257,77523,106668,127314,24947,12790,38796,169698,23555,10725,44573,183083,42088,62716,43265,105958,32050,44067,50118,1668,3874,6243,318411,16599,1691,94999,52378,28671,216728,123258,2059,34969,69225,5913,136280,171443,141515,91662,22175,135282,80020,92270,1663,4808,4482,3495,34691,5226,109830,108512,17342,107488,11606,123190,100247,29666,146527,113014,15794,30894,13224,39585,243192,22351,9903,7836,47699,11078,25468,122291,48821,26780,122679,75521,81450,630,4895,92900,55074,74293,17441,3563,111657,103102,51613,12318,52370,36191,68245,34269,40445,41354,122901,168604,182500,62012,42557,11259,24428,115113,86345,12362,3909,78430,86852,134602,20459,47853,93879,22577,7659,3688,38555,13349,17381,56715,91639,12493,10895,92438,3142,37057,28928,2004,36427,32268,34222,209974,10432,67436,41989,173518,107930,27079,62729,30908,55558,5828,45031,14902,53546,8204,144263,60255,14520,88212,86582,109589,69356,8064,47449,8505,66558,16886,4844,52817,111260,215129,12941,91118,650,20770,6273,73089,40618,62790,2873,35002,14023,97208,19386,102646,36993,143736,135457,35385,113601,17893,32627,84439,100619,56016,6581,57264,172160,45452,111710,203627,70131,24100,322787,1996,35665,70078,22358,90922,83658,4097,63200,58499,14542,99153,52159,6615,12414,63415,31986,16823,1579,65405,137809,8841,16898,48082,259,33014,42375,12260,179850,73667,91389,98882,29532,17311,326251,41092,5928,20742,44964,48019,43505,9317,49265,6643,192712,48424,163487,19861,20113,70848,31928,105333,23685,78563,14638,54755,7158,24142,44018,20774,125255,20331,24280,10163,1285,2336,39851,4299,117269,46714,63816,87779,159624,11731,9971,990,137317,108831,50994,74554,162680,23640,131597,146962,170620,34829,91205,21184,1913,63616,18427,93136,156592,17519,67565,115882,138220,78622,88535,18115,2711,33554,109492,54298,971,24914,25863,36363,45715,27099,194995,14299,178181,111488,72395,322385,157719,130787,11897,81843,83999,11369,49280,118604,40922,61332,110343,53407,75639,40582,300440,54722,25637,13694,48248,48278,194521,56203,52779,48783,72627,10953,376,16733,280238,26351,230789,15132,25168,137270,3588,63704,73376,94031,74284,19443,159557,9697,39901,13351,119050,15406,146455,3460,29556,75195,37673,102524,92329,47289,98413,15311,100684,56345,7116,95480,11590,7200,167,23610,58426,17730,136656,27944,53151,2701,8824,103124,3017,90744,113588,53216,79736,65940,26931,498,29568,80540,143543,21292,1740,59268,16561,180816,42323,50174,40890,52866,10703,57169,4700,17191,4424,93511,49698,166650,26972,48631,165169,82879,69326,202970,4007,2376,231325,139592,22119,62851,37504,68816,58345,67398,186643,43331,277416,53749,15746,23102,17432,4793,151138,48822,54265,48203,198688,14305,54287,2291,18018,113378,123260,7180,97549,87027,120085,2920,76080,8190,102005,5641,64580,14955,59802,54028,58884,19367,81779,412567,85957,97053,103637,78871,29364,27637,141728,4767,30686,112738,130146,42745,12730,105040,14844,232,210944,36581,152317,135543,29744,3129,55647,58149,46319,27265,17499,28005,59948,7170,34138,5702,293047,110892,408,91760,218674,18469,46095,81403,14389,4610,35672,73060,11006,74848,104820,118143,190357,20043,105358,141735,5115,27093,45924,123073,52599,29433,9616,238350,78610,24851,58858,26769,31969,24613,18294,4982,32735,39639,143563,112073,202205,12567,4873,88601,44897,81503,101648,81362,34662,85277,17574,48173,21435,221188,40215,39576,80786,26544,64668,81841,10731,37733,247986,149188,127703,495,18382,54388,72446,43071,30974,198723,89608,41360,190,33045,8386,31658,19992,237838,119015,137622,50890,100913,6460,116233,267230,26621,104129,65114,14190,41542,14888,85962,23342,23041,26453,43725,71809,45186,4770,46452,53894,56616,221286,18973,9038,109299,55365,19366,26863,18808,60909,69353,41738,83463,12100,68561,72860,3980,13796,49340,12332,31311,27418,4255,53430,18976,45523,510,14224,30477,26581,4530,3651,101663,139840,22709,150861,31996,63923,120623,262522,3076,10528,2929,14672,130238,18087,9816,121894,100308,25085,55111,14565,18952,53293,2042,369988,23674,61789,133529,28783,108293,35477,47119,36448,71049,40015,33055,78598,198442,1833,159937,40654,77444,189245,113153,8621,18599,38553,35223,166072,2375,11659,21786,89523,6032,12116,63046,159398,18454,3678,32521,47626,11411,103527,38896,42946,15696,26370,10185,8413,37080,165583,4331,63555,14907,72220,50056,6623,62236,36565,49783,10049,17503,100581,55951,146244,24724,9626,17969,25524,109300,173965,99994,101056,46459,43647,53737,277968,8347,123521,74858,33829,44762,77574,877,81377,222525,123532,30602,43881,53145,2973,16284,81940,61281,127044,63620,9875,14756,114829,19032,9202,52759,119141,23928,120551,19607,3599,33401,76821,73233,117430,39968,36539,7071,5446,121735,194059,15206,45283,6706,15603,65615,1207,165723,92275,34773,104447,8396,32353,205240,164323,13600,60555,79205,25532,22907,33410,57480,107111,69630,32137,47832,70913,33161,20321,2371,117348,10714,86246,1625,11763,17900,268,78457,99175,97940,101092,86660,32221,14041,128504,125080,53744,124263,31017,13897,403,31859,21964,5633,111630,5547,77329,17961,18241,84995,25984,12983,67491,62168,47262,5241,297,51191,7351,8967,147212,82060,16821,782,11033,82431,62957,5026,43459,77963,203477,53528,6247,191852,87774,74164,215654,13467,1522,219964,28589,244104,16242,117821,67725,72570,156792,17186,15979,26990,44128,193014,35276,57125,16212,166451,68017,6905,77608,16364,53777,75921,76426,37975,26203,269296,64099,84122,12077,38533,830,4407,20139,963,43028,38902,42911,37503,83343,85045,16979,1165,60835,137387,58380,86990,110066,134540,56331,193845,81238,17922,163093,38744,110641,12502,56404,34862,26865,125964,12965,111648,25547,7771,27196,136980,9555,29551,107158,57885,18831,37705,35505,101742,13970,102109,62548,124657,23328,11124,89592,146376,248050,6241,22033,18337,80685,29898,11908,216623,67721,106162,146610,21377,15085,91552,42041,62560,122532,125336,102365,121537,142559,29693,223919,11515,110495,18776,22494,5895,185059,103592,229351,51220,100102,37027,257855,29359,54123,36066,106493,12244,79258,32002,432,56205,94836,90182,6726,14762,29391,48938,26864,38083,60364,3310,60192,14766,205567,57504,110760,22649,24666,46333,21517,3430,13135,28873,27052,158809,11597,20529,6695,23138,22960,37137,45574,6545,305877,43423,26153,24769,59844,14501,10430,134352,56169,13213,103432,49523,35181,13435,12408,129475,64620,230854,77390,51990,15653,83248,33466,44571,117828,51481,2187,10559,68019,18021,54895,48247,18354,33737,4554,108595,37288,39767,116707,9175,3726,108877,21616,83684,49862,1938,8543,276466,20134,108498,48770,102254,31914,131520,185291,100559,51890,209,19526,76471,50544,71814,99351,8172,198526,28816,20419,9109,98389,136777,76479,75596,30635,165417,48216,120220,25955,211071,39314,24308,32164,2559,146280,43403,9233,17947,90585,1786,86920,125662,2457,64741,32152,32918,122882,78538,44001,31723,56426,23375,103172,88177,145697,52506,49319,68016,31664,41488,18486,110400,7030,28241,986,109199,19900,42147,56864,65287,49183,7858,24e3,30453,840,16673,25907,68916,89927,6309,158335,36407,199737,130464,13137,59603,201778,195292,21015,42466,179062,172561,89492,11075,180407,31868,72493,20998,60217,9865,19530,39274,130266,54539,21623,12535,13505,40641,73375,4087,85633,2153,3117,70680,55788,92096,47509,98493,37490,271936,151475,3032,16171,96642,34106,78425,125761,19591,3366,19316,54508,24183,50786,194248,91528,33253,34622,108355,41741,705,3814,3883,108929,13203,67831,10142,59754,68208,29128,84820,56880,38794,24972,48571,40821,40476,18137,164254,24064,236309,79181,11282,395,39169,2013,51587,28551,9645,701,109513,115899,113566,12762,62045,58322,103726,41343,40866,244102,143816,2490,70346,40973,52618,15412,30720,104315,38917,42027,93676,17513,107418,20706,123890,13399,97727,24044,87962,65606,44250,98044,65276,74790,101473,19350,91570,1326,87790,172042,7577,100813,86896,85891,41512,108130,27794,14875,71431,12835,156250,58135,3759,22476,42176,115873,34686,56523,73643,108505,51491,20838,12721,32863,45700,29496,13700,34294,55360,29206,155942,123812,7706,163234,203,132720,49358,144431,8130,175788,35818,3270,76832,25710,54095,97274,28779,94621,74396,19092,128242,58067,20885,14670,93255,15107,63291,23654,126900,129421,59294,262659,9798,3251,67344,28600,44629,50672,29072,26999,31526,23183,49175,165843,175455,17282,175411,32022,45989,30298,90690,78118,83156,23749,35636,31317,7069,80381,94561,133756,14960,97404,6138,41065,78041,32843,16601,34123,9559,146529,123377,96395,54441,42012,84257,123541,10745,22139,106459,11720,150883,172651,154996,110538,4728,53447,25704,2009,71152,119354,21166,66604,1429,216162,8637,122250,63520,27180,29172,36124,276428,107787,77184,4680,14952,104903,24418,14793,51561,52931,8371,26342,48526,7118,92066,67280,40653,8847,34597,105438,14198,50163,61188,146286,50315,41205,170829,161496,585,197359,95056,1687,365794,91349,48507,5804,49263,5146,104902,96365,117343,132222,46084,96919,16875,8073,262381,79982,52663,13928,16056,153908,15145,109256,132308,18763,24904,167644,13618,40750,18686,147124,114709,150038,52849,2938,12568,48617,8778,5459,44202,44591,74914,17183,248689,13878,7822,80060,23116,194037,18487,2067,7798,43077,33678,244028,31320,74273,2794,19466,8218,36280,183997,48124,19416,29656,19280,98734,7715,18311,30701,133602,150307,126956,7378,2933,79903,13178,12593,86571,26604,92446,13574,44205,65699,427599,21118,8245,14407,27877,47936,33542,7916,26460,117762,21596,37818,2249,127359,209394,60044,47677,308089,36791,154971,31417,6998,150042,174360,12255,43009,29335,48739,3912,101398,53340,2580,146939,151295,45360,125275,15273,45383,27456,48761,23314,8750,60801,85823,104759,27894,123685,66968,39480,26917,55290,83305,2696,98390,57569,145853,340733,4919,20024,52268,30884,7413,203685,70989,112855,4129,50536,349518,68205,332641,159581,135361,236026,37563,176404,64899,6578,122033,63871,1850,85234,82089,66124,74145,121098,107351,12687,36881,117334,13136,14698,85933,93866,18047,32620,310,15094,46e3,88451,23632,36645,27940,87618,80520,58892,20976,27702,140090,96075,67841,103292,238964,87778,107338,17019,83427,67522,7302,8261,47570,116787,8730,80484,61772,174422,56005,131193,52875,14588,28471,59817,9586,15720,158155,51307,109734,15196,11025,59331,3884,52626,102602,84797,25158,27314,4437,20488,76214,189248,35023,114952,157376,2827,62439,102878,129749,36405,10329,109339,108633,36662,1254,13267,5470,87105,58004,15397,10434,159667,21864,52022,179464,3013,32147,31496,116832,18494,105502,129227,107267,50033,13481,9954,24267,22141,16257,116154,36185,950,115685,11305,176708,2048,178671,112573,287867,162328,497663,95170,50979,193861,50987,30368,136257,31830,46549,15119,169876,23788,17462,249887,57377,1949,35448,14791,43769,210091,3783,34612,282103,88380,245190,5457,20491,98908,11402,86899,117916,16028,162584,60644,320177,156096,31065,55876,22e3,77655,9992,23397,13757,317623,63978,215255,2443,17648,93231,27388,104529,93807,55505,140477,12046,112040,70887,40152,94365,112353,25063,114679,266061,71248,119555,15589,2244,617,14129,211431,70110,100652,7777,4383,85911,89221,21010,120615,58357,86405,37554,41647,18,15143,69662,60491,14714,186134,148344,42347,5410,168175,44535,42449,343894,129417,99682,20659,27272,140483,63455,222159,17536,13722,42637,62324,11976,114691,148109,2283,32057,182393,4295,147364,33705,2075,44303,30274,28331,63740,69740,29148,10346,44862,33716,73937,153333,12930,38784,247159,2515,41053,20256,83368,256189,54639,115240,5096,24661,175419,153552,26516,141,138176,63885,34115,47222,55709,2765,28479,38875,236608,12229,22921,77291,54426,45388,2860,57787,114579,295139,105782,17826,71066,19119,54364,69385,16568,12323,28057,33346,34919,124763,155533,101386,31644,8627,49001,303600,29868,63213,9103,77280,71333,9696,138789,37059,24823,5057,21352,32368,114208,56803,19424,10445,58514,8661,209508,26187,171838,10460,63454,14016,122504,41328,21329,46618,32493,38225,7855,31763,7945,29876,8734,6438,24205,97490,139977,130740,47323,33195,85390,57194,13813,60600,21313,96251,7699,27584,170521,139271,1363,4402,336738,129223,84983,69150,13147,3590,163929,207225,155260,55916,20288,4503,8398,98490,11773,27512,37113,84976,86558,28365,11756,116005,182148,13733,115313,47644,67208,85069,9347,14995,226141,14704,101835,41159,35314,13113,63526,214039,29978,50446,83339,17440,129441,72522,118641,97816,24907,73844,15717,118884,167255,96509,162793,30847,36849,51297,78974,77793,10427,1873,2972,9999,35074,28190,64297,146836,46298,60038,163007,108919,61219,2403,75022,127339,4233,110389,69022,9833,128097,88016,79390,222936,22570,94657,28462,56956,38803,81536,30474,152794,19566,16481,147408,74574,81895,20731,1918,1366,76367,187321,54494,24366,21690,61696,33283,107477,77499,31112,414383,74362,18463,218441,120929,59848,258629,201924,69269,454,19989,13054,59894,3623,58908,20681,35723,78523,102680,38988,184112,108087,50944,132704,52966,21699,18860,96349,201411,82697,85395,95658,5093,6427,177894,44191,32755,26961,155739,6249,31310,81030,26574,84311,120155,86730,113535,7424,48888,13516,45747,98098,20077,183995,81945,43210,26704,40420,75831,45648,11180,6855,57927,65528,124096,34851,2598,156633,107572,127352,38169,123845,60142,62722,105584,232364,23211,68120,1601,22169,89299,747,258039,80572,7258,152249,11862,101204,8834,121434,33761,19175,133142,46343,40178,48723,3589,41977,30210,38868,62257,10087,82658,87827,90646,16415,47552,351723,28298,72225,91146,272760,1701,11295,1652,109651,300747,51863,198800,29446,11794,32345,37538,22356,33102,37590,113544,37970,11478,179743,25454,103417,59905,221970,105196,145604,7817,164809,102360,16974,75840,255333,56902,6659,1954,645,59400,67769,7689,18675,5215,13793,20536,27852,3387,29523,259718,16860,94625,43143,29245,15848,233581,22685,63631,78557,22836,133302,84513,1348,51826,47129,98836,58284,1830,1749,94642,10933,6145,12506,10975,13879,103781,144434,10268,28409,32346,52968,121567,107374,77268,23686,35097,10501,155275,15303,47136,21102,168741,55332,90385,15996,84817,681,137803,25054,142275,6163,38175,8056,124296,240642,65621,4934,178205,16101,62803,60964,18230,100622,76465,44689,14545,9543,47514,16852,93380,28048,12047,107106,37575,101485,77047,57326,34819,96137,76916,6469,46264,115983,75768,87668,69942,13027,165,8373,114231,26434,52844,42799,182044,23580,146254,38081,43236,33883,146220,382894,14606,46035,36481,166621,35417,95382,2957,59384,60428,36358,66343,75378,22267,22950,83528,17577,56474,25285,4619,179691,75355,95836,53295,34588,171410,4487,14679,84208,44015,18562,109133,54101,11531,86052,174479,303157,28095,9953,35642,14564,39802,16145,77606,117406,53038,121117,53624,22062,1212,7632,127157,237292,189087,10478,127345,102515,181997,86752,87623,10966,121602,68783,68681,83042,114380,138349,191305,67176,50085,39016,1427,42384,1412,67118,122616,72389,25260,2237,13576,137346,19938,20304,2191,68759,5373,61364,238507,75814,23931,69565,38993,131741,38364,12528,87762,5679,129853,5310,186831,32653,90338,260176,389531,108118,26843,43985,50175,30563,25106,56965,18130,140428,4542,165503,117991,24219,229605,1819,129663,1240,3797,76093,18398,71339,51919,93043,27175,47060,216257,6483,35051,1217,16512,80798,129064,13225,69339,8548,237079,72298,2575,34280,51379,117910,55671,53345,247552,29486,39328,140821,34681,57045,60177,5004,90269,78522,2479,322607,48474,61296,13057,31558,4678,59271,6699,27044,31988,35944,12503,83480,4389,136508,3781,114121,70279,4488,155829,42214,2898,68191,75695,305850,45041,74344,106509,30087,17429,93292,12477,290,23080,114802,35714,18751,26554,105424,17775,2144,2412,100610,65192,113975,52975,180272,135050,129815,76238,106483,21440,63186,4260,46189,9711,28249,4169,23429,23390,8324,141585,63809,67668,38457,38063,39226,59972,1189,203916,62368,14403,16949,61767,85801,1739,40147,35049,76757,33124,62102,15780,103593,103009,53484,22952,67973,114645,6566,5245,50462,7601,8288,3513,194571,80276,1908,54592,5124,58571,2513,6800,273997,193904,1119,17991,117245,2508,129156,82366,26278,71465,63341,56943,39662,106116,94966,156875,9736,2204,122308,94418,27134,1280,24539,49022,45314,3764,50904,46424,30699,28087,293839,9400,33646,40165,822,147499,50263,116179,29085,11863,31314,5578,17797,5104,12454,1604,15342,219206,10232,67800,94261,25872,13565,90339,78971,75377,26649,41184,47695,11514,35369,20767,14227,41953,309396,148270,147938,33074,14453,27499,109019,39018,25738,240196,158931,52820,8612,95853,21524,137010,84901,70869,70021,116794,48404,38771,6732,1070,70990,187297,49140,5238,576,3564,253975,16027,16483,2811,37775,19034,25259,4053,2e3,70083,95774,19713,33431,92703,91314,42381,288770,48194,95985,3991,77418,13406,241328,245086,56533,35275,62725,9246,51924,70181,95331,16163,31410,79016,39312,120878,119371,275987,80124,27712,9186,220,23598,146167,85209,68238,282190,57048,31273,30555,80913,17594,75779,59160,135002,101219,189377,29225,96735,60126,62522,104e3,27620,86814,17240,147533,11001,5425,43682,410,49460,87270,69480,46315,59448,1816,76201,9431,11788,87960,29063,65539,47347,11678,33846,7008,196704,9895,6753,8633,120892,59970,572824,115934,6646,202559,892,48351,37611,251282,57823,67263,57750,26527,34485,90747,7685,88370,6144,64182,1709,41969,21458,62327,181657,49247,225330,122600,114574,107124,85361,111833,63243,71420,15655,191178,72430,18063,51425,54002,12364,53225,86557,18193,97580,41232,138398,67821,128724,8944,233212,101353,52099,42127,14006,120107,32789,32132,3498,18123,33758,56058,5779,128760,59888,98869,18445,84702,51911,13234,218379,20093,39031,8074,70195,20708,23462,24355,131384,60189,26390,10403,41060,7140,10781,49410,42261,87202,82566,41663,43105,60276,2768,5733,74176,28329,2297,145430,131632,83615,122915,105441,655,224102,5284,136426,67763,16294,188511,32538,61049,27893,3394,13951,159099,28542,17930,145360,9492,190122,32285,78855,26440,13570,58648,73908,4239,124561,2444,74172,53131,11468,10794,73566,11623,35343,64710,30481,4163,10328,38309,29901,10538,154377,76132,92405,24839,11679,3465,13449,11637,7824,2337,57754,1260,14458,41118,19878,38661,13416,159180,37074,163164,54137,28627,52134,184900,8520,40385,29546,30502,22386,66527,107458,6850,24022,47983,30603,35083,8934,304066,39500,9,28261,33026,77251,9374,44833,116312,34990,29236,63563,125639,135405,165398,159055,55690,88141,69643,236964,31983,25572,20436,36746,60896,31850,16179,11828,5888,3043,66368,9750,31167,7915,53111,36430,1333,64344,93659,20061,60596,180191,51630,6792,30244,43509,101058,22409,420,44210,109783,43223,27030,72477,72831,32679,29235,7675,47556,12258,39907,149412,84926,118247,24692,71717,105038,86009,45941,41189,89453,29856,52543,30627,226798,67303,59230,67415,34408,1367,99685,16867,128419,52147,4111,125381,117881,16173,44093,102224,31575,23234,24870,83790,127407,239098,3200,994,1255,100903,242275,117266,55116,38205,16140,29662,11307,40414,208793,123355,56470,4862,75600,30119,58218,70828,24075,26974,7802,192353,4851,5475,78720,66596,3409,28573,64396,30381,30690,59859,88256,5406,99945,103064,34463,37727,24238,86643,60088,4057,23741,5967,162904,38240,28356,93858,25510,122879,6897,3278,7057,11971,4400,35461,211413,21395,59615,39471,87233,55795,128426,3051,22470,41950,14705,3974,180108,80476,78442,204996,91987,15634,67610,139015,142373,35611,51134,10387,4353,153456,57749,181039,14183,68447,151532,21107,36452,20551,3186,46247,46383,129666,88736,140662,146243,2066,8360,7978,64818,106963,17896,47801,10723,114821,223295,74192,3293,3393,16987,74064,11277,91622,4270,29828,27951,387869,103235,1374,61988,120083,477,145892,128378,11779,211263,61354,18221,17869,46530,83061,108538,157981,90608,67199,95080,49064,195814,12302,66307,10348,231346,160732,112859,63633,146558,21271,31037,198802,47622,12862,95710,3910,77850,73961,85585,34752,61e3,4082,24595,103679,71107,8208,79568,150019,16615,24961,139857,32664,197366,4559,54735,32696,4126,162019,75698,13916,70108,159638,19834,9349,24675,175560,49643,18206,52459,27992,10809,88865,401975,133172,29e3,34558,30915,3658,25834,42430,36562,125265,18182,10155,40149,97082,208980,19575,60853,90529,66545,9600,789,46420,2317,88593,55595,98980,115302,5742,169155,1073,177901,3472,11189,63711,78643,65472,50459,127979,93,42202,67053,21720,157650,11145,141378,42033,22824,85705,79114,35584,15974,1510,54172,28562,12451,104226,19190,97151,73024,20948,5151,81741,21499,29006,84183,198074,54003,45120,170125,26240,35177,28389,64863,79974,60778,176915,232183,45342,2038,80253,41564,40703,32689,5430,100689,5366,23007,134279,14266,26712,73993,24934,64242,52113,102887,61801,46415,201049,54251,62133,122757,164883,30815,139966,2319,30842,766,13362,10287,134518,86111,81665,82440,28333,43019,18963,8804,161944,23439,102144,101145,80029,39052,248708,30350,117340,11878,128467,974,138625,63961,5237,74778,61834,67040,43814,13690,65947,33809,232476,115258,181745,28824,94013,9510,10246,93722,81976,7217,114383,3493,16014,69045,72692,12145,80981,9507,6692,1620,60820,330444,35474,33962,4797,7053,295463,46445,27026,12491,77988,49524,35675,90947,29114,166705,101385,133782,32704,6186,84595,176031,185623,45966,151302,63069,1699,107491,947,15458,74452,196212,6046,10498,12163,10239,35191,243951,9277,9090,29539,54460,22820,26514,112549,60372,51753,48756,21812,70861,260326,41,44222,10441,16961,48148,138771,216194,5914,52153,53400,212036,56519,26245,10117,45888,15294,138019,90913,26368,43842,42111,23348,6082,194845,161089,156206,51546,11647,30759,302912,262094,8635,78876,26535,35283,54183,31183,85484,147873,12989,5197,6356,72894,65347,20150,27370,73787,1493,45918,12366,190217,20724,13858,10981,67449,81213,7553,14115,72242,271517,11842,48310,88743,143726,22177,3290,243231,58452,62937,12592,1654,40066,33477,13751,9921,128442,15868,7106,75236,83773,10775,36938,10482,170465,17368,17469,161508,32752,98340,800,19824,264456,3901,87319,2867,26782,9630,113102,185815,24197,44584,86366,40224,3636,140916,31731,267731,9567,53678,72984,29389,27963,17106,50282,284911,60170,8322,12608,23374,89652,5268,39044,229766,8869,151350,31436,177342,12269,183212,120418,116270,2843,78888,69192,7865,184099,1086,129897,18383,70508,20242,18508,229924,124569,35749,50589,55626,9884,83115,40971,30671,18135,14452,38861,17844,201826,5549,26413,17189,13561,38539,10679,143331,3314,36785,171194,49685,187713,67506,4618,104039,17060,195080,50648,33159,19238,67559,134840,28599,157523,17130,38064,117398,94355,31918,13575,34538,40326,13997,3494,348283,62481,26862,3603,104426,244363,153709,112487,304612,199674,41239,35545,54869,293005,28223,26277,26899,4533,18518,15492,38587,80488,70485,160395,263,60162,11382,222152,4696,250751,51921,182609,10707,48463,46243,1227,49111,111564,46502,33342,56846,68541,63559,858,139927,16654,229375,76759,26478,33205,95828,23399,92945,2637,35630,28470,143992,50214,14174,21456,166191,65665,1711,21594,78019,97599,111701,36,147151,110246,189022,43021,30397,40757,131935,42065,73335,48039,26596,28984,15102,2361,7421,202167,69744,43766,52826,3642,83304,33873,75140,63169,192389,36551,92748,13039,123959,233220,21738,84447,77230,20228,187852,19095,25799,92136,108774,29237,53947,2299,118106,2687,8830,42331,202924,33667,2023,73763,30704,19363,19779,16737,35629,48081,24068,101013,162338,291912,13749,24745,328289,167679,70086,48299,23306,16732,17801,43322,54589,3586,63653,43624,53474,925,109177,251316,43805,13082,19511,86565,142182,92461,17117,101033,103319,64589,4022,4351,235897,5352,82705,107142,46391,156084,5860,61365,10558,13045,7717,18357,33922,12590,33065,6928,46993,783,46937,67846,8952,26295,6107,119656,18799,17458,50747,4229,179559,112727,118080,20683,41464,125468,51560,49749,44231,7359,35339,62988,136487,67015,5208,29150,24956,105186,48858,6143,18097,6972,16404,73489,58742,97196,36357,164616,5834,32267,13746,147733,15113,132091,34127,106298,39729,106426,22294,9780,15602,36213,71502,42808,66802,599,60755,5851,39120,67363,108623,126368,72770,91263,32486,30596,151717,7951,52002,43103,11768,68942,40901,39344,24037,127500,116890,48403,16926,86750,17745,48648,159545,34460,58419,5634,114317,67865,31462,23352,24010,98185,125708,69686,68337,13610,26271,70691,2980,4768,27225,102402,75453,28106,8104,6931,1176,6274,6475,112635,22498,6176,238686,26832,28893,90319,14441,15682,15087,39517,45270,109134,104440,45965,47645,81772,7876,52683,87720,12898,4505,185665,2769,113401,15664,57592,105229,137381,97059,119268,6876,43309,33886,128363,35476,144249,67013,143587,83367,25703,91436,59347,53236,2289,16519,19844,46309,58558,99834,23313,218816,231303,36388,51333,183535,109792,139277,54306,90139,18235,8275,32710,37677,82464,86025,92204,88842,117723,37570,128723,234242,76350,73795,34896,148247,58424,11105,11744,45746,63372,17118,49772,199520,81902,38004,22911,33752,3125,1995,53792,4689,26909,108150,146062,69674,41811,161444,84855,8999,28561,16731,93937,3189,21967,24890,22943,1356,145300,51569,28802,517,118679,31703,40607,48098,108854,25003,10233,73969,177495,5248,24516,215347,146192,48712,60626,69188,40735,5866,586,101541,6509,47590,52129,5969,222045,110933,25733,24223,65339,62812,2414,155418,35819,16022,78423,43138,20995,128255,240673,46745,236093,72176,57085,97841,61248,107,36068,193177,105427,55726,215229,20446,47228,100420,87091,14429,121708,23605,21157,187721,21880,2997,203976,99166,95068,25877,7724,98925,83401,4829,13182,18229,13718,239662,38653,116505,153497,30589,89029,38962,181302,43853,78872,180301,4786,248240,7401,106136,112590,77745,19731,60880,77789,125748,135487,5975,48627,34084,12419,215770,47557,254582,10364,106495,21856,67539,88981,38805,21428,48732,42316,12149,16078,52808,25327,51322,33850,51147,12253,122354,46077,56483,254553,115417,81834,150991,94662,86668,7381,12841,100650,18218,15741,22372,68294,50705,15535,84660,61887,22553,72299,31361,24824,17743,46820,64288,31582,77006,111674,116384,30760,80920,86149,77192,51979,79691,60342,122805,103800,240873,160744,233114,78962,54920,8608,3484,316104,72548,24337,5088,230040,21926,10172,36838,26,86221,83458,102176,12062,17571,41929,41170,28428,68239,41750,103930,2634,18313,53019,34825,97837,63115,24606,73157,152474,14715,91439,37033,109806,140259,30668,174760,380,135597,95673,136073,65073,134249,13829,17279,122305,4420,46444,10237,64848,203623,70728,10349,182885,65075,24519,25783,40318,34139,22222,63394,55266,102764,41422,20126,65100,90408,53640,35128,48932,11192,38935,96839,34782,39492,19396,41332,6250,5511,19492,51304,25936,104466,54099,73771,86115,5080,7669,30891,111700,13931,25276,72289,135447,14820,258641,25265,31005,281179,75286,393,95359,14623,13584,6680,101227,80173,44933,76666,54542,13244,39348,458,25379,109451,134348,81143,6959,65554,12027,51311,8716,57589,140731,28467,23316,17272,30458,25980,55229,77197,83798,28302,114784,7428,34548,26241,14712,39336,103304,18928,54080,12870,334,87722,15208,16895,142098,114262,39820,83913,57817,28682,7721,14900,108672,11250,62246,42849,415188,1724,26555,24549,25505,26443,107450,145899,61035,43528,6901,60726,65906,267741,21338,147590,42079,18924,73017,135236,15393,5206,4026,84185,1531,5988,113890,82647,303391,7386,69844,71611,189865,76523,31877,13315,19314,198575,32821,1928,67641,25913,104475,103489,3297,70391,18406,15446,113347,19295,93790,27856,1792,167471,116449,8541,4408,41757,63233,25765,86680,64501,27034,24816,34975,6079,4486,49693,36229,16917,21581,62426,27862,11612,54284,35702,194034,355,24277,48262,87411,70504,310164,118018,12516,47559,43502,57433,107139,9290,66533,80863,14634,34312,91725,28606,21342,67241,72355,43244,375789,37402,174015,105070,8342,44167,67494,1890,16365,11723,271002,1865,47918,8350,45564,27742,25110,125803,8553,49504,81925,62211,4534,15491,19011,80373,206920,667,102405,128623,245524,5553,113309,192739,65766,19567,22832,261958,29679,21293,71134,20962,105123,24721,860,21752,33448,18372,157167,94822,35770,173224,232737,75729,28937,46828,28062,25453,5207,140366,36665,30652,6169,67920,150458,92040,23186,184604,92330,20891,176492,49427,27828,38305,42495,143982,49560,25503,90043,29747,65328,47830,12932,11068,77721,9003,25213,94205,140426,46090,89945,138173,192691,33329,112232,129905,35709,27514,1841,19957,31411,127476,53572,17497,173549,55063,175135,19841,69314,5192,237921,117660,150697,4060,273045,50414,98940,65348,153665,164423,58804,156695,48994,213928,86036,28608,8355,39574,34540,16927,135680,18374,151587,10830,53805,16878,16623,4282,48030,8537,14986,46102,13062,72897,72,33050,108227,39451,45935,651,113320,40535,95176,57450,48843,5003,19019,10407,211163,3848,1068,4988,32091,30095,41692,15099,43602,107434,50744,7627,171349,16313,150832,352665,207750,33937,38256,51091,156e3,87889,90663,84175,24908,114900,50365,31494,83829,5398,169342,47521,54818,18935,8356,43094,41212,174536,10082,92550,6678,60614,23355,69721,14796,34149,128830,58187,3179,208,40325,28399,225029,401412,51150,31580,207268,6657,10993,69818,64282,289845,23308,12961,38447,6681,52944,31855,2572,47646,120728,179148,37240,45196,218274,4816,3695,21961,50084,35209,18073,51452,27004,6100,33941,1377,84831,171214,85,141510,9078,99227,32610,6417,11718,49868,65579,87902,73018,49062,46280,61742,21512,40862,107733,15941,29168,157765,144919,14487,5767,158014,140070,7241,573,71584,16921,223566,40331,179473,35081,47926,140885,41508,52104,59180,42310,32811,29048,123517,102413,80208,10104,14746,12649,153641,126022,37965,113017,4171,83,142592,2809,6362,50416,71323,116894,260776,16204,1524,5760,30351,12658,20703,54403,36083,45408,74772,4946,14485,50759,111222,10890,2195,167147,92962,130534,16283,177256,35016,15472,210156,151187,73922,117691,43250,52051,37392,24811,24358,30830,5775,818,21969,1476,127322,151783,58392,31021,106913,65215,89407,90802,28531,11690,20234,95249,44602,37256,18707,11928,5161,4410,26571,51903,49768,22008,25252,65780,209499,68769,203726,13249,137363,48845,86823,6658,5674,31881,1083,1823,108676,34518,166752,13791,14287,91576,91429,8665,11529,26401,16191,91972,30964,5254,28486,54697,79613,66520,18447,22870,45203,194466,22822,51703,12278,76716,44595,73455,33546,12235,144843,36154,51247,11116,33040,3180,225753,60864,1972,28469,12891,28879,10338,144157,56294,353058,38302,41447,87532,110616,27065,168438,6557,1213,50804,144643,24817,2390,136531,38174,247513,16190,4059,122791,131994,137430,39506,57650,16305,5188,54309,106128,20628,88071,67394,395446,250285,66176,91254,1399,114196,43915,60230,44853,27206,106353,43013,18733,345105,226453,51202,16607,57106,117175,35492,10476,89598,127439,15187,39624,13688,61570,10615,31111,59370,6238,175252,32143,224492,41388,95408,34384,148238,78307,38959,9340,160091,61443,15737,11216,41244,170,38299,102443,113097,26382,14027,33707,3957,76300,66160,19431,18900,6952,1717,108656,82206,188021,257335,27295,43999,41210,31777,46956,57457,12657,11489,15697,48060,204748,53583,82422,284790,30503,137341,8120,19615,220311,15991,10217,63424,9808,67431,70976,98221,4491,15177,28535,144789,751,13230,2394,1504,33977,132104,30316,22230,931,97193,185240,24826,22687,174322,15307,22988,1390,188745,180325,29580,59068,74903,18994,29195,79,15436,7622,38462,11566,138710,44828,45774,37768,99236,68137,84083,19282,22698,17134,74807,126662,173497,46248,16938,119735,3212,28292,213652,49013,9975,32180,45660,86250,4801,68788,95490,77482,113751,11994,44624,94452,46839,128497,100316,5798,58588,73184,202987,65417,37790,88524,1606,43156,97964,105717,34947,11203,100060,37742,130074,93653,107799,94311,196106,41347,8035,10780,16390,27883,118236,167395,1979,25006,19375,31628,18916,144723,78502,114047,103107,86492,107686,5844,20934,206963,23556,22591,16562,146333,20167,10471,117434,33085,2863,9740,36669,41849,37271,22790,18209,28979,8231,12952,54408,21731,25130,45208,55748,138120,75826,414,29593,9925,292865,25999,683,123149,7036,92159,86055,61827,103680,23176,54918,58466,57578,13305,5709,86479,16697,31064,17660,200919,10770,49793,33423,32370,52047,16488,62555,6459,8426,83493,7763,59725,82812,18628,67760,79405,68557,9612,7673,28102,56517,69620,171797,32458,29541,15870,81109,32080,207644,71495,21202,11039,91036,61230,2810,130800,32260,4613,60590,37112,75214,33979,126402,155062,30642,63875,12810,194463,82799,47664,16725,36685,43367,61099,449,172150,102867,21691,301838,36745,7130,18671,57316,34852,38034,54182,35578,65900,99486,19771,3456,2658,16914,99866,28390,28109,8262,21147,34353,20006,4228,137085,1675,203023,283196,198286,214375,163329,290603,152574,40471,83506,30068,14730,23177,131539,34759,27668,32178,71896,104799,116305,85430,119262,42860,25160,8911,23428,49437,105322,6519,16203,6349,74711,1230,38045,8540,75165,44736,25909,51026,317034,4984,32281,91312,27060,44431,17817,45363,155937,239085,35697,59784,91993,29531,126740,213757,76560,167776,285273,24262,8237,65030,41160,74437,48804,118916,13159,37842,1031,75349,1478,11655,108777,23435,277425,101734,67469,70231,124711,43532,28514,65526,54956,1e3,21882,17728,25302,40952,52214,149632,1999,2111,3259,63362,89961,220561,39777,26335,9063,10572,12416,34551,34623,38604,24723,5947,15588,69927,66252,119177,69173,46629,28714,70715,212408,20521,406913,74380,11716,50659,50862,37009,88460,130101,7210,53853,538,65120,151950,55806,163748,52837,13153,21100,16674,64536,6091,138201,44837,58547,3723,163,2177,32288,85454,34033,8497,14282,25742,10535,10741,79559,117493,243787,49337,100718,79495,40139,42956,7551,55433,15421,31509,23034,45081,547,61176,53434,328001,8470,36263,30145,4519,74173,53935,11845,73774,60211,78025,3,4102,73782,109293,315332,48412,26683,13714,6865,20128,18490,104141,325,39470,171970,115860,15707,7268,73301,74336,31370,2368,111827,107757,136231,142844,97138,96638,84053,38691,23801,1588,10573,122098,77039,240,186135,146101,11996,18143,112963,46171,155836,348769,47795,121213,116266,132515,3344,144804,31286,99187,255838,129694,35894,48779,55235,148582,71967,65282,15174,13920,47080,6147,108242,157593,125025,7136,1286,28957,127956,28402,98813,20805,7532,109417,40610,5041,32958,15142,18408,108596,33543,50517,27748,80114,233434,91447,487,37094,100048,30541,43477,10639,89862,155868,37667,8726,60684,237903,73408,99589,12190,38739,97348,3914,13594,2680,149016,13907,30171,28343,23530,115225,61104,35821,147679,14337,4297,244282,24085,326976,56428,7851,21303,131620,71446,83253,68692,111870,5224,15813,38197,49026,45057,13660,3306,76345,40671,27905,91072,996,68527,62085,91351,122634,55109,168209,2024,27560,112707,17352,8306,167115,169921,166958,5031,46020,11844,67284,19130,76185,6920,32849,5450,14610,22451,21002,17392,31872,66682,84796,13709,40210,59898,12029,8719,53564,21462,91884,21647,88379,194428,12754,37797,132826,160016,22567,54383,53186,77611,31107,8339,4694,19185,90355,23597,17222,140675,28442,23668,55977,9128,61555,28774,155229,17658,9390,24379,69357,15752,127381,239631,62460,93181,55913,45133,140155,18676,25249,33164,29581,82837,67223,22362,29975,7317,52813,1943,29613,20012,207130,49617,49651,5636,15334,36313,29226,28084,95247,72072,19e3,224932,15811,114,32127,38097,37508,88507,37225,27359,91626,12193,69279,20608,11055,88156,92808,2152,57259,55275,72789,24475,104414,1708,9882,3818,48661,66897,1631,34806,227930,85815,87753,18321,250664,72733,25107,206797,50891,8082,196411,92596,96764,152823,65514,22819,387277,62176,51225,40329,15563,189,3659,73670,64357,51793,275136,33482,86653,74615,67058,11318,125720,15388,22388,8267,1730,102663,170910,40784,7144,85373,13040,7088,94309,583,44224,140424,77439,18496,164026,36578,4722,9151,5824,63365,26510,35199,40500,79277,32495,44614,35233,9566,203293,152144,7097,2330,183480,98629,13423,330887,44130,68600,30939,97829,31012,345465,56747,94879,4939,160027,149761,99423,46099,32251,15332,8761,96094,128555,5763,235318,222223,55729,30241,55420,201746,3987,81382,8259,49325,23287,7719,24633,251100,92311,18591,110533,64759,170260,393860,7175,21144,132887,3593,75346,101277,91109,16387,259187,11627,57459,173829,44694,55780,49797,89192,120443,62622,3904,14814,23887,1027,112258,64955,99800,11132,66353,36202,48624,18158,88481,96882,43059,11040,2455,7077,21651,181159,99126,100434,61388,68186,19161,110468,120052,8819,55324,41494,7014,37689,3618,87729,92615,207943,9823,128657,12587,15857,6379,67628,51216,71775,157617,63244,1503,3864,218754,110864,5769,21492,7243,1192,87921,85529,31512,18537,42698,35350,73510,84474,34301,8991,21013,35034,566,38832,19838,35586,37216,39413,55006,12178,59742,856,84563,6900,25632,17437,49786,30723,13847,70845,4044,7843,23944,235976,55530,48942,6518,20939,73769,192653,52936,95207,23895,132542,142982,22632,87452,48042,54018,178468,10728,26230,23559,363,81269,142012,5718,346258,31456,84333,246476,51018,66692,101804,120570,39962,30373,70593,2864,60541,19425,54209,104092,7201,31545,48018,25865,15442,46257,40443,8328,6451,111782,47527,97754,33046,470,245116,31095,39,91934,87208,73470,36708,36521,12801,70624,36272,8892,79768,12427,55454,103756,5908,52390,62962,22720,141138,94634,41689,128402,126390,6628,106394,35527,134394,82727,254651,194502,148064,89549,3202,28359,957,21954,27906,49840,142747,8307,24206,48978,1186,71728,133038,71474,91306,6333,110959,74600,70387,18983,62609,56057,22970,1147,135850,1321,28834,3578,59715,102227,32827,81415,99952,55636,257598,390,22702,35701,85872,402916,39216,189795,14929,19467,10112,144422,61514,5279,63421,134686,41436,8424,51925,10598,132295,124416,4604,194739,210929,57866,31829,51626,50007,9976,91878,61906,56168,81906,60918,61859,40017,23059,16887,40927,62064,12785,32893,32913,21782,93965,20169,44387,79084,38463,11457,93950,27127,157050,2697,337088,5116,54128,48255,33279,8821,27352,25515,124022,65710,28906,38557,33390,1722,104435,72215,38551,12094,30978,25113,6671,37355,175109,42862,98024,65406,221276,59624,118012,64637,78760,86697,21426,1639,40350,12584,67193,84144,31396,7863,143011,69629,63112,9454,28666,65798,46372,134721,6314,51402,30837,151922,2847,38676,38008,92823,136245,17540,5504,109295,205242,37606,5211,214892,1586,20670,208711,137743,19328,40652,16995,20023,14657,154919,34422,12996,13918,38221,47690,16398,2959,37680,89122,6721,198469,91876,172043,83898,101992,26084,94570,3635,76958,22853,76497,38266,176590,168403,44464,142840,79180,184594,1984,41806,83147,11985,6546,366068,59732,24533,271505,8736,39084,222992,93429,28962,58985,86665,8432,30028,14548,32439,54424,165029,55175,27458,69046,121277,46168,33732,20661,24581,135574,123110,37556,79260,72611,16957,12939,46162,58238,44907,72936,253758,41324,32518,96480,11949,124438,65280,43256,34107,53533,43531,37037,28366,45970,32741,173438,6121,194202,62969,26355,30314,58370,28455,1848,50519,82830,90393,21761,295490,10936,256940,133568,44050,20269,4089,27457,21610,219460,36743,14821,101388,52005,13124,30979,140816,167362,26054,18458,60789,34917,40447,26606,33422,9066,3452,83614,5761,20263,137238,25038,91310,101,52322,74548,42572,38084,214054,186568,31802,17665,30620,141936,37730,14420,4265,187218,49640,188208,51441,55388,96452,66659,40869,42039,60967,221027,19234,178581,29105,96050,9165,196118,157335,3738,40354,117436,2965,34136,59659,15570,50843,230035,31444,71260,43886,18316,5387,38500,168508,17406,32174,8828,103373,143806,90367,3560,18719,122310,16508,26719,2541,105429,6645,37998,73190,10591,235916,49737,87112,233941,53188,32193,79154,4544,52905,126477,7580,63501,57314,3216,31337,6541,103083,60846,49,9756,15481,1355,43840,14319,13743,27486,10222,73114,230718,418644,16706,6674,279748,23058,45273,295831,86306,2743,5535,88773,21829,35253,120938,31153,3169,16839,42847,8751,80974,33942,36867,35514,16485,26474,77775,56877,5391,48346,3882,108713,31403,27804,55248,26235,43821,136104,40118,175507,28034,203908,18732,1788,34030,106427,36958,54359,7251,44936,15356,69139,455,157915,22173,140291,50348,43275,82066,49621,54952,15216,36226,96695,66855,6936,1987,8227,196087,4631,68827,99004,47541,110265,17953,147605,110242,58520,31312,38724,329975,642,3155,34497,75937,6207,73843,6120,17249,51429,117746,3218,910,68961,319671,14938,29555,34700,1649,66673,72268,9655,76800,153087,6941,210168,27130,35398,1780,73242,3135,56689,19556,165307,8765,35967,121458,13333,70453,17350,117253,22265,13340,44265,39869,441,3742,135025,23581,33309,16543,17731,13291,157637,283005,21408,101360,63887,52312,83873,5338,233779,23759,186949,34531,177320,38069,156465,91004,19353,59852,68160,14891,1338,1072,29823,1950,28901,81407,313445,73038,84807,162348,240257,37162,138934,16111,58013,41253,102951,16457,96056,19541,56402,67217,41638,94381,89674,29481,37456,80815,151579,13937,13683,132537,19699,134545,67020,29816,222341,141235,427578,48868,129557,233342,23077,87871,16213,18728,16184,9469,37913,19680,2798,171356,178328,13216,50049,72690,71904,124644,55455,7504,29052,41036,266546,19899,30391,188755,8659,59469,16,104298,112943,53865,76203,138226,68857,139953,14125,107625,119795,173133,4398,50273,48808,54390,16466,122086,31835,67035,50971,48859,7508,46427,66477,73021,84615,39985,83076,46779,201569,53336,36443,60865,168164,143810,51393,25548,169307,32896,24485,38424,21837,29087,275813,51674,6714,64883,46169,187369,55186,76192,12852,12018,62134,31067,118303,16542,12125,10579,4928,26291,43854,7091,10946,253716,109062,39283,17261,113012,258512,47764,125126,32646,55892,80279,201623,149872,3192,385,1208,48750,5376,58738,22335,5427,82416,47811,32435,143086,38930,94128,59975,156037,37977,38224,62485,7698,50405,71027,16462,21559,136153,34131,107506,162069,63703,3101,215029,40407,4178,3774,9187,80019,17880,97926,67579,2600,18405,8351,47924,86638,70820,92206,86453,29610,42241,119200,3198,15466,67813,57863,35454,4779,99518,4649,104641,144269,33730,38073,65864,6838,109456,193298,154007,5623,45741,30846,182578,25573,157224,1543,58575,138703,146140,44971,49356,18275,59064,20300,13122,11848,24453,11973,9797,86843,2919,25530,49210,1130,161220,76788,75373,85604,34926,36014,17777,17255,51533,11676,92226,51845,119859,21525,5936,18507,28050,1140,31418,14857,34207,47859,10750,36382,32079,106909,59426,87757,38393,110042,15965,97104,33757,35344,97993,53979,33651,45407,41884,82515,173089,7177,58371,35365,47543,51927,35587,10670,23544,29306,84233,39976,76076,62097,9007,8668,28119,78281,120790,19835,143020,54968,18670,64959,20649,34469,42570,33001,136570,87796,120044,1106,58700,63951,127623,12805,83057,40212,31773,49850,7361,54336,347524,101314,23751,19569,48791,29174,49369,20467,7465,75842,38281,623,112457,60210,28849,51003,94720,6426,90047,85560,43761,3579,85105,34607,90410,118528,7224,42907,111163,18168,6960,161135,191298,5247,100584,127552,171568,20121,91173,12636,54615,20199,63730,98105,2396,40387,14438,125012,4765,33235,12865,45299,37728,82098,77872,114037,59253,19675,24838,398016,102561,11446,17069,57508,178277,65836,99941,26114,2585,271882,136866,50126,11027,155648,118367,14585,8910,123015,335383,40434,41016,53021,14439,87098,176860,201543,121888,2358,9286,5739,22666,54270,37884,169381,33984,93859,16124,89364,72207,51639,76366,99029,65812,2198,12147,174891,194289,6986,30252,88822,21284,11445,288337,160821,33034,100869,43852,25761,52882,1144,103809,1924,84458,86079,43411,13542,139276,18141,34978,41298,7276,26481,173800,33210,17951,142652,33616,33677,2210,19941,98568,2486,192414,80136,12058,235883,50963,249638,29572,27221,47034,6124,72107,63346,97620,158513,299699,40388,23235,37176,224244,198386,121323,67992,23827,63170,17838,106622,158590,26807,5345,23489,91891,55474,74834,37981,13058,5977,72552,34706,26828,145172,19904,21367,34043,960,77092,91381,4733,47446,7680,41697,5170,16960,14741,46101,13656,473,51842,37433,11103,11551,121951,13191,97536,165932,50397,51628,129028,9069,44885,6590,59195,47045,32940,225472,90345,21833,13303,29407,96615,141951,5198,6028,18395,7181,3861,14966,156358,167182,36529,55253,25942,173153,30959,27261,50691,150176,162201,38467,48462,80602,42163,118482,168,108756,26011,17166,54149,456538,22512,91374,13816,90358,131615,18132,226707,1824,28139,26860,42253,93877,77351,65575,8980,80574,22020,27948,40422,91324,76376,13528,39281,91685,82215,122541,144066,1983,193851,17283,26320,2739,194978,4790,26845,42627,61300,65815,174612,55133,4200,191130,79771,158321,52280,166796,221620,62461,11278,4067,88152,83409,31717,121367,13522,47325,37945,10406,174348,249321,154101,64912,29938,51775,17220,15776,166138,78890,84425,54121,42861,16368,24572,291647,10197,32073,22651,11677,97509,26952,35787,18424,41910,71614,94977,72318,41594,70024,275419,37702,60199,7335,39107,61315,18271,18394,33768,87884,104277,123724,7277,56288,71981,189803,49320,3352,6798,14240,8954,69220,94433,57372,28620,68863,193727,85575,42309,41667,67689,42081,22543,44824,12719,28540,114236,101553,27638,27296,4300,5353,4663,19379,94098,3758,95888,95144,80344,87320,28447,259518,12718,71391,152731,37063,24132,31911,104896,15672,103782,1521,4945,72541,23717,122632,15619,87175,206120,29428,189780,61416,28350,44457,972,1175,47233,198738,95789,41907,21953,97034,59341,22864,53713,16873,32971,20693,20954,31336,21477,16169,38370,16412,9019,3841,24599,21938,17085,6484,81198,76413,5849,72514,12320,65247,276175,37234,59796,52642,16312,57349,198507,94148,46134,18958,125552,1747,18725,151873,14901,5490,68287,29470,3689,64794,40814,26018,25692,54450,2703,88278,124886,173087,174e3,24159,179477,24276,46004,201876,209202,445,52876,31948,30206,157610,39180,18439,44124,50469,5774,96278,222758,200216,50290,45486,20435,46986,46276,140133,142326,15569,13363,47522,92583,2182,7135,16853,22998,30272,4952,63263,35623,39096,53789,44864,20053,110392,124213,4630,16087,28221,127787,25839,77481,44693,13464,113146,6983,27069,55717,50102,4760,7107,26186,66507,59145,36032,104182,71328,29425,64317,50781,47465,94298,69706,74899,22754,120756,25108,93077,56834,73286,39928,16218,41699,176763,7555,70819,50083,26895,23315,26014,16773,123079,41712,5719,31516,90427,158540,85051,183128,40864,27505,55392,9058,45224,96857,30901,136622,96557,56304,120061,11501,151448,5773,89743,7769,86069,2935,18471,41628,10114,33660,110170,49479,26745,92846,33221,26731,18795,87076,8550,2100,29972,120289,3077,72490,33784,2630,208722,50861,63483,79029,6419,39467,14302,45286,64207,9686,67513,44170,1050,77246,59266,17055,53801,7150,11111,42432,4278,94579,362117,36175,42902,41933,39002,98489,22913,74161,84773,57036,17556,162288,74485,178760,93867,73635,128860,50362,261,67455,80001,46080,35662,4368,25247,19230,74393,22588,1822,27682,235324,13798,85998,13194,235067,23514,71669,147632,23191,134748,214683,105101,1518,25489,247114,7380,54842,26922,3971,26361,20844,68642,170517,77339,123255,8963,77818,150998,48466,36806,2732,23261,11741,236162,18243,126216,28690,50546,16385,92760,197383,246558,201295,88255,67588,71687,176076,172653,169058,33906,63747,24835,157621,43338,30050,46152,132741,2770,51371,94835,6614,15112,11749,56936,1250,19027,399017,58036,100215,23388,55815,308768,124152,94803,9521,64186,8971,28,30427,62163,7616,103838,35079,29203,131235,7743,17389,10882,37420,61460,228512,85363,41581,131077,62822,119647,10130,54445,26925,19968,29016,24446,74028,24176,61448,67185,9254,8563,119129,9771,99184,37716,39514,10532,221512,258753,218630,55980,23394,32141,61924,66749,32411,3741,36475,26678,77010,44946,91203,128749,116953,20476,49625,53116,13735,102335,29376,51946,83407,67892,59212,34685,21083,1546,112982,32972,74397,1078,190545,16082,86140,58591,89611,101531,10061,105104,76319,20035,17551,52611,169061,190842,100780,23907,90413,115619,9675,34710,193435,49443,129734,11183,258877,16318,136182,126808,44635,27304,192375,2599,125648,47051,12091,23814,721,58800,40137,66726,97930,60877,74487,7942,54326,9841,41428,13762,8211,85383,6950,99177,79806,201786,296464,124087,13144,29741,41721,47634,55088,254286,106408,17041,99064,12942,64086,45233,14005,2612,55827,255,7984,13980,38574,12776,46654,73499,249951,2101,26676,25996,132326,116415,119062,50449,31033,23038,11589,179252,20007,14860,129270,21143,17796,144715,60106,70758,69842,34674,282133,44014,16774,57268,38528,24053,46373,201667,28327,471023,51889,102667,21193,114909,84132,69317,96723,67969,16134,68145,15058,28765,32035,2524,101089,98664,25045,76571,14957,86040,118506,262428,154764,81573,39681,283900,73287,127825,544,80448,52347,38512,175971,15180,45467,33086,46552,48894,81107,43213,36672,54025,76703,8053,7608,13299,56619,20752,238099,54164,105133,1444,32942,953,37564,8e3,66316,119463,106817,404,13667,149108,128597,31267,10269,49836,106150,1484,52330,76965,160486,171648,38456,31263,22424,37738,66245,67467,143369,60471,75610,20895,115528,86070,60854,40796,49347,18989,15030,11371,37578,15779,79867,10187,86462,46402,155626,93200,40229,7090,57547,108053,99598,11088,47505,41218,206017,2173,20988,30219,22919,80563,57566,42369,93141,41675,2407,182519,120495,27154,16702,29456,14349,7958,16688,117177,140375,42467,261919,74916,153569,10836,34742,49526,7621,105997,12212,2270,392377,7755,17959,25086,232152,138791,33847,13860,35316,5811,1344,71259,50452,207539,92635,50359,5821,33674,30255,2086,2587,96264,17543,42,6029,9580,43007,139248,82831,12917,29607,25786,51467,42137,85161,100698,31561,88989,121990,278500,3602,109344,37982,15279,116442,28936,30880,87894,58079,128661,126731,67392,28051,146885,4861,16216,97344,42827,147561,153948,22684,21335,47685,1853,43349,15185,59642,10229,25520,187921,108972,5579,98037,24945,6697,19193,63734,137934,75056,89740,19767,224268,56138,63643,151661,39313,70618,84031,89723,84074,13703,85626,35460,8867,64845,3439,57906,99776,63968,49270,81130,34356,16210,23547,36446,34090,140028,72439,2221,22163,57058,363492,113754,18913,95451,48663,54464,54037,176097,68425,3023,34906,29482,117389,341780,80431,58330,16753,92616,60907,94846,147486,4498,48646,7773,46801,7778,18946,464978,47558,33223,177444,7328,15626,63337,94700,11743,9351,255024,39098,16447,42647,96230,39769,58840,10068,63439,35800,65843,58823,413844,9156,51258,7434,61791,85018,6872,3692,28096,7121,33024,6009,75532,31997,192535,9661,3304,9547,14753,31987,25314,55689,15896,20430,39472,31340,99744,25398,115569,54883,28719,205423,23071,57855,64638,149867,25671,82403,37616,20668,39989,77996,74948,140555,175248,64810,36515,46595,4958,248773,24045,28728,136673,168704,20804,114833,100325,27135,21205,96151,153134,45992,7093,13992,76047,1980,19432,145001,75159,87462,17710,1013,45556,34297,144882,20648,26061,11319,129567,108555,18872,464580,33386,22717,65948,167189,5603,135042,79542,8801,202632,18114,91882,5973,5239,67315,4431,60916,47819,71693,32597,32606,18183,45072,80329,76385,24749,51305,40314,156514,14693,130345,13168,66214,18029,12858,34801,27628,14544,10823,40522,40185,33739,148694,23548,9923,61012,28859,17933,19442,34364,99849,164107,141167,30629,21054,6744,36491,8096,42474,41706,155060,30650,10600,163442,1143,96655,61390,52359,7559,51568,64256,203854,4467,22453,14504,436398,7878,6980,8293,63610,293747,16167,35763,19627,147603,15419,18032,110744,51346,33681,54571,40472,48615,39073,21604,13754,173027,92560,11083,47299,63062,11813,52007,29883,9734,139722,15953,1550,20651,13616,49306,16113,90089,92326,7584,30712,72424,164858,6831,152871,55746,197721,34167,196442,6022,112107,55215,7538,123381,4920,43539,77165,8939,50392,34192,20225,79762,22505,58667,40770,29788,97180,82835,4568,8579,13273,363569,35898,49983,436,36598,3237,131691,62418,35591,8101,4073,379438,65218,76072,33887,2968,27573,212619,288680,68278,72851,150504,217896,6913,121339,22017,35340,51072,43616,75043,31437,10833,81487,4364,22968,41454,106687,85446,19863,109625,149241,524,141850,214404,54376,657,237023,9401,108137,53800,32474,49712,53334,126876,27337,45552,177696,8269,15036,12097,42240,2328,125374,119295,99715,2500,19624,39441,27220,102691,60957,94543,39101,18566,67362,13975,78230,25017,34017,239007,90027,39351,41681,35354,43822,1043,916,58587,141983,94818,38799,75459,41114,67432,16195,36606,59568,22272,126769,31424,68659,12287,134302,257977,5756,207285,95637,47248,117689,19583,77451,22373,12200,54993,117118,34244,29386,34562,53819,71267,64172,77665,49368,7716,59301,25749,45426,194789,17297,2650,1766,32501,45198,20403,20984,6600,14171,94604,19037,5402,29896,9938,59935,109708,88081,145182,44844,39167,352626,164173,35374,45982,6122,154,73419,220487,53834,53601,17992,8609,229321,5610,68098,66815,71012,95069,140968,27396,8957,134489,24656,86659,56598,134852,17316,123838,255436,6613,41610,138033,81452,32023,32396,123687,63398,8693,29712,30407,19296,121188,3551,36099,20032,111948,56624,16547,27453,35916,15378,52039,56849,13489,22214,73177,53097,277349,2157,14029,187886,10260,141743,246460,91880,50869,3788,49486,133566,54950,33120,129337,53768,18333,9525,26902,312251,10297,9020,70759,16647,112432,59260,84609,9818,82766,73569,468,46001,75780,55028,52106,11498,43645,108069,17150,17753,29417,16705,31799,9606,289,122254,115975,8620,6133,255357,56908,14456,133464,43554,79224,11247,29630,160,12756,25464,65960,350428,62521,321796,100359,67358,35169,46172,113128,48988,88868,31094,33266,6847,60887,98188,49659,69117,92977,220228,13947,80181,35103,62170,97351,13475,2440,199768,19498,36597,46971,25234,67806,62881,84717,73648,181966,10488,94149,21550,26655,63436,48375,14405,165650,9621,24439,28043,42735,4490,29963,56674,45373,1934,262446,50855,67098,26898,5261,52696,40644,33900,9440,180286,87162,22940,19704,26936,69769,10254,101759,27406,12243,48e3,73926,113215,54935,5726,192787,4312,106216,9366,11550,52949,23457,212271,277152,133895,108374,6191,96477,29980,218916,58024,54696,40853,91124,65894,91170,65908,252552,6793,29212,15389,44516,122515,52617,35058,9017,103536,39510,49136,19242,130652,662077,74699,47024,31422,8517,73351,24399,13867,128360,4810,4434,61779,111983,61036,17798,110240,59722,102960,39688,10001,23803,23039,176498,56659,44814,134295,17188,77577,74466,226175,102472,154333,63900,111747,18062,41171,79669,32773,408933,42562,28931,30907,107388,43487,2946,240310,23938,24354,319,184983,7927,6488,1422,10790,68809,68209,64775,4361,202,17123,59634,51200,44391,18188,17843,2619,74278,3230,9540,47187,21702,36274,56894,43907,16310,34790,16866,6150,5561,13587,107545,108873,126867,86986,28640,33427,19017,5762,80637,17430,46903,2047,131055,25958,13558,5444,47152,13900,44563,122857,45348,70863,39593,54332,38068,33637,318,40310,143467,18502,24520,11377,62013,28942,27246,28269,83545,17999,59015,90707,30065,15161,34720,1263,37008,2012,6060,98575,92933,5721,299,199555,24578,29223,2985,743,115825,109523,136657,47454,26378,53586,3733,174945,93340,244456,5693,37386,28782,89767,27545,23573,18798,136425,34320,84778,20041,48453,38215,7477,71958,40621,8773,5874,187927,105965,51100,43533,18083,8443,10180,43597,2003,183999,69689,12216,129696,146188,62389,34044,68410,12765,43273,26949,266807,3345,34477,79197,5688,47539,213110,21634,22257,50092,32222,42346,39530,63668,98,134978,74022,5152,59088,174145,37220,9934,9545,118937,5724,87240,19875,15784,40143,23263,87513,181654,285152,37881,263241,4966,43934,10433,186657,6470,74416,225854,25908,142677,246262,32280,6192,75890,45546,143264,135305,29742,47013,77787,11732,126658,8763,37950,21806,57557,113464,89465,108995,164574,23894,22996,23169,15369,23117,17642,130607,40503,36239,280990,44666,9981,40427,147487,26869,168452,32886,32991,46798,240839,15111,70502,65697,88548,44145,28701,48767,31139,206777,35659,181164,166262,14554,171445,31786,66523,76607,17956,6507,31279,90476,116611,167918,6560,1243,115324,80128,41867,55897,187323,37069,32596,189444,145931,13390,105530,65709,26805,6999,55714,41300,22915,68951,22138,21120,22264,10058,19945,33635,56123,99085,10032,5818,6016,46649,57476,35264,94413,112522,262288,93686,83038,14341,23204,28807,66084,77987,6101,126673,7133,38126,5923,122091,170240,97772,46874,215746,43948,41622,3272,55596,8332,146411,251315,13533,8561,81521,115449,48616,175175,2063,186556,3036,134537,75772,29728,82360,22973,186559,86348,89100,38388,82297,45610,2613,87082,9986,177812,57884,23591,47485,42543,33582,44713,74439,257444,252451,31825,35631,38540,33066,5147,13973,4343,51830,70378,22827,26448,95560,36896,241741,48067,203953,298860,61620,20450,3220,67272,6586,107662,100160,108684,6929,57226,4762,7457,1320,40404,77204,99309,62750,208653,59977,44e3,74315,34332,5819,172217,64904,114077,18147,84012,1791,98456,90930,21446,116669,103938,7422,85140,59713,5768,326211,16239,75411,13229,29398,10758,236107,1539,112472,95979,152154,151294,306,21196,38146,10700,6891,84282,109646,56492,40539,6589,119491,51354,30685,140209,136906,29622,73617,49553,70525,51671,166869,139616,74395,37439,49595,45678,11959,33211,86560,52434,9282,62690,112155,130810,5243,108261,99970,265613,72551,80049,6391,33365,90721,66737,69872,87011,1860,9032,112544,60905,37371,89015,140351,19076,850,373531,2802,36725,218795,72062,28990,16550,24614,7815,6187,26336,33373,32162,42791,73555,32062,23386,10244,56392,49442,27076,136262,12412,14883,1134,33675,97153,199281,15608,100152,74072,47942,254301,36451,16026,10687,65067,56708,254030,30290,50490,13864,57941,259331,35588,23485,43486,24869,21620,92971,22072,88645,1048,182050,13343,32452,14825,19509,3325,216938,45740,99716,189082,53740,78245,25609,24311,176777,47340,308354,40669,66085,14102,125339,9225,128709,97207,1271,200933,78439,113451,88975,18324,46521,11819,18570,141756,72512,170020,52754,63550,118515,103073,93330,32736,50499,14722,31600,68452,398867,29316,172786,18417,104924,2606,5670,84818,16288,67106,59580,82929,607401,291,85829,359,15897,35830,50696,65630,52672,22115,356968,29895,40837,231192,34024,38957,26722,406,23335,124952,72068,68804,13268,147101,164740,276569,162596,66943,11569,26654,66358,4777,23229,102127,5848,978,2921,59666,5371,28212,90108,42938,39320,2499,4271,108792,33510,125072,71653,65239,38250,66357,38577,13964,86251,35708,50755,36010,29448,12209,3844,38222,206337,100876,67827,137088,14167,252225,84163,195270,1306,5703,54198,779,46802,22028,51124,86759,70560,113164,35685,162145,45471,34561,422,2611,6464,47486,19223,38246,9191,18331,89942,243642,212364,15893,17518,22617,6409,30046,126182,59716,36560,104428,18846,26592,19458,50793,147333,30826,1388,27647,10922,14495,33545,19269,135828,39727,41601,46931,233379,49169,131130,182112,16276,82381,118209,142445,128310,19672,28740,82907,33436,3118,102206,28723,24819,41937,38854,5157,3881,111491,1142,9776,421673,152241,29309,14961,87854,6054,15424,3796,82656,54996,2108,55367,239450,154525,9643,118103,106041,64601,68549,48707,30266,25772,18740,9462,229669,91798,112152,191327,14493,72828,8175,66636,236474,25817,87351,129027,76653,20422,22983,71240,27846,44661,12399,46158,77704,53101,35032,11072,17300,109294,33638,24408,1895,11241,760,17584,82479,125877,63150,141075,34259,23274,81698,15732,43577,48340,91584,14688,16379,24481,150280,96420,262050,48635,43727,61819,56268,72003,88178,17281,79912,13218,122519,125295,166396,11811,2171,118930,67746,17636,178278,174656,95661,173039,83845,79689,17473,98555,127696,203415,54730,22925,232239,9309,12136,175026,20740,180188,10747,39816,314017,266131,10040,175732,112550,220651,31974,37393,888,23008,86799,4303,64905,148467,75337,251,3284,370102,50264,9835,5438,23655,4481,29851,329,12855,7162,64931,78141,12804,42372,296771,83547,18624,34874,86271,3360,48665,77735,88767,11463,63527,28889,22258,29140,194315,113924,25499,6406,31334,1845,4802,49184,43455,35469,127594,92970,61038,115005,38840,87761,106838,8811,20572,55637,11162,96721,132425,108925,2948,125457,36356,3502,75270,27622,127192,2561,123095,49394,61155,16897,110064,9699,89448,53356,19628,220310,21622,83036,9885,112214,6087,26713,17901,161912,91492,3440,68594,9266,92238,8087,6866,150194,72175,80701,13459,31836,43243,239700,95846,44749,50647,21945,230538,120612,132371,244604,5193,105637,34661,41341,68775,85393,1874,8771,33718,49672,77403,595452,99507,6490,58895,128742,7704,39239,73217,43816,62824,37804,199976,22361,80005,87514,94832,14089,4574,139975,59142,75523,100268,43906,53442,15152,2547,186002,17011,19513,204282,3343,60568,128318,119250,4298,51871,41336,71759,21921,45074,98169,145889,99427,11350,1237,5520,28799,7803,53702,21026,136352,38293,128690,12158,90132,44600,10184,26957,39459,126025,78904,82999,59373,39301,150198,120529,153042,20177,50089,14764,271571,30530,123161,38975,101562,22941,5648,124654,109243,69817,71675,49162,106884,21241,107795,30258,16572,188262,141456,7688,60718,8271,11044,32440,104608,103419,236109,93156,43293,128929,42107,67180,25201,115254,185488,130954,72813,167547,20537,39969,38432,22582,184022,1139,27199,5655,17767,97412,122606,209377,27070,35871,326617,188954,42680,73512,80911,22629,3011,95021,315242,157737,383,41821,41808,19335,27950,15674,25677,110950,35375,76835,59108,57370,35262,16569,160415,37706,78086,32041,49691,137143,9782,172080,50148,77917,6323,10110,69172,17711,21795,59511,76184,135114,31046,132319,59105,157578,20549,80778,57649,158421,65143,4575,72235,21899,10797,92745,34035,106079,80159,4508,78304,25350,75457,46458,32937,25623,47,8531,104751,84953,8138,36508,187199,66310,115274,13253,32461,38536,1916,42007,187160,35055,26325,84394,35963,94216,45590,97782];var Ef=15,vf=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:i,refreshQueryTimeout:s,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=i??hy,this.refreshQueryTimeout=s??py,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(o=>o.toISOString()).join(", ")} ]`),Promise.all(n.map(async(o,i)=>{try{if(await this._refreshCommonPrefixLength(i,o,e),this._numPeersForCpl(t)===0){let s=Math.min(2*(i+1),n.length-1);for(let a=i+1;a<s+1;a++)try{await this._refreshCommonPrefixLength(a,o,e)}catch(c){this.log.error(c)}}}catch(s){this.log.error(s)}})).catch(o=>{this.log.error(o)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(o=>{this.log.error(o)})}async _refreshCommonPrefixLength(e,t,n){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let o=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,o,this.routingTable.size);let i=AbortSignal.timeout(this.refreshQueryTimeout);K(1/0,i);let s=await mf(this.peerRouting.getClosestPeers(o.toMultihash().bytes,{signal:i}));this.log(`found ${s} peers that were close to imaginary peer %p`,o),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,o,this.routingTable.size)}_getTrackedCommonPrefixLengthsForRefresh(e){e>Ef&&(e=Ef);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");if(this.routingTable.kb.localPeer==null)throw new Error("Local peer not set");let t=pt(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=Ce(o);return yt(i)}async _makePeerId(e,t,n){if(n>Ef)throw new Error(`Cannot generate peer ID for common prefix length greater than ${Ef}`);let s=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=s&a|t&~a,l=My[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,dt.code),u.setUint8(1,32),u.setUint32(2,l,!1),new Uint8Array(u.buffer,u.byteOffset,u.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb?.localPeer!=null)for(let{kadId:e}of this.routingTable.kb.toIterable()){let t=sn(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var Sf=class{providers;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.providers=t.providers}async handle(e,t){if(t.key==null||t.key.length===0)throw new de("Missing key");let n;try{n=Z.decode(t.key)}catch{throw new de("Invalid CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),this.log("%p asked us to store provider record for for %c",e,n),await Promise.all(t.providers.map(async o=>{if(!e.equals(o.id)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log.trace("received provider %p for %s (addrs %s)",e,n,o.multiaddrs.map(s=>Y(s).toString()));let i=Ce(o.id);await this.providers.addProvider(n,yt(i))}))}};var Af=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(this.log("incoming request from %p for peers closer to %b",e,t.key),t.key==null)throw new de("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);te(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(ee("p2p").code))});let o={type:be.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:i})=>i.length).map(i=>({id:i.id.toMultihash().bytes,multiaddrs:i.multiaddrs.map(s=>s.bytes)})),providers:[]};return o.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),o}};var _f=class{peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:i}=t;this.log=e.logger.forComponent(`${i}:rpc:handlers:get-providers`),this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new de("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=Z.decode(t.key)}catch{throw new de("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([this.providers.getProviders(n),this.peerRouting.getCloserPeersOffline(t.key,e)]),s=await this._getPeers(o),a=await this._getPeers(i.map(({id:l})=>l)),c={type:be.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:a.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toMultihash().bytes,multiaddrs:l.multiaddrs.map(d=>d.bytes)})),providers:s.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toMultihash().bytes,multiaddrs:l.multiaddrs.map(d=>d.bytes)}))};return this.log("got %s providers %s closerPeers",c.providers.length,c.closer.length),c}async _getAddresses(e){return[]}async _getPeers(e){let t=[];for(let n of e)try{let o=await this.peerStore.get(n),i=this.peerInfoMapper({id:n,multiaddrs:o.addresses.map(({multiaddr:s})=>s)});i.multiaddrs.length>0&&t.push(i)}catch(o){if(o.name!=="NotFoundError")throw o}return t}};var If=class{peerStore;datastore;peerRouting;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.peerStore=e.peerStore,this.datastore=e.datastore,this.peerRouting=t.peerRouting}async handle(e,t){let n=t.key;if(this.log("%p asked for key %b",e,n),n==null||n.length===0)throw new de("Invalid key");let o={type:be.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(Ay(n)){this.log("is public key");let a=_y(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Me("No public key found in key book");c=Lt(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new _t(n,c,new Date).serialize(),o}let[i,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return i!=null&&(this.log("had record for %b in local datastore",n),o.record=i.serialize()),s.length>0&&(this.log("had %s closer peers in routing table",s.length),o.closer=s.map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=Ho(e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=_t.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>oy){await this.datastore.delete(t);return}return o}};var Tf=class{log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:ping`)}async handle(e,t){return this.log("ping from %p",e),t}};var kf=class{components;validators;log;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new de(o)}try{let o=_t.deserialize(t.record);await Gs(this.validators,o),o.timeReceived=new Date;let i=Ho(o.key);await this.components.datastore.put(i,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,i)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var Cf=class{handlers;routingTable;log;metrics;constructor(e,t){let{providers:n,peerRouting:o,validators:i,logPrefix:s,peerInfoMapper:a}=t;this.metrics={operations:e.metrics?.registerCounterGroup(`${s.replaceAll(":","_")}_inbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${s.replaceAll(":","_")}_inbound_rpc_errors_total`)},this.log=e.logger.forComponent(`${s}:rpc`),this.routingTable=t.routingTable,this.handlers={[be.GET_VALUE.toString()]:new If(e,{peerRouting:o,logPrefix:s}),[be.PUT_VALUE.toString()]:new kf(e,{validators:i,logPrefix:s}),[be.FIND_NODE.toString()]:new Af(e,{peerRouting:o,logPrefix:s,peerInfoMapper:a}),[be.ADD_PROVIDER.toString()]:new Sf(e,{providers:n,logPrefix:s}),[be.GET_PROVIDERS.toString()]:new _f(e,{peerRouting:o,providers:n,logPrefix:s,peerInfoMapper:a}),[be.PING.toString()]:new Tf(e,{logPrefix:s})}}async handleMessage(e,t){let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}try{return this.metrics.operations?.increment({[t.type]:!0}),await n.handle(e,t)}catch{this.metrics.errors?.increment({[t.type]:!0})}}onIncomingStream(e){let t="unknown";Promise.resolve().then(async()=>{let{stream:n,connection:o}=e,i=o.remotePeer;try{await this.routingTable.add(i)}catch(a){this.log.error(a)}let s=this;await Je(n,a=>Xt(a),async function*(a){for await(let c of a){let l=no.decode(c);t=l.type,s.log("incoming %s from %p",l.type,i);let d=await s.handleMessage(i,l);d!=null&&(yield no.encode(d))}},a=>Qt(a),n)}).catch(n=>{this.log.error("error handling %s RPC message from %p - %e",t,e.connection.remotePeer,n)})}};var Pf=class extends Ee{log;components;protocol;running;registrarId;constructor(e,t){super();let{protocol:n,logPrefix:o}=t;this.components=e,this.log=e.logger.forComponent(`${o}:topology-listener`),this.running=!1,this.protocol=n}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.registrarId=await this.components.registrar.register(this.protocol,{onConnect:e=>{this.log("observed peer %p with protocol %s",e,this.protocol),this.dispatchEvent(new CustomEvent("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var d3=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await Yt(this.dht.provide(e,t))}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,t,n){await Yt(this.dht.put(e,t,n))}async get(e,t){for await(let n of this.dht.get(e,t))if(n.name==="VALUE")return n.value;throw new Me("Could not find value for key")}},f3=class{dht;constructor(e){this.dht=e}async findPeer(e,t={}){for await(let n of this.dht.findPeer(e,t))if(n.name==="FINAL_PEER")return n.peer;throw new Me("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},Sk=32,Ak=64,Rf=class extends Ee{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;constructor(e,t={}){super();let{kBucketSize:n,clientMode:o,validators:i,selectors:s,querySelfInterval:a,protocol:c,logPrefix:l,maxInboundStreams:d,maxOutboundStreams:u,providers:f}=t,h=l??"libp2p:kad-dht";this.running=!1,this.components=e,this.log=e.logger.forComponent(h),this.protocol=c??iy,this.kBucketSize=n??20,this.clientMode=o??!0,this.maxInboundStreams=d??Sk,this.maxOutboundStreams=u??Ak,this.peerInfoMapper=t.peerInfoMapper??vy,this.providers=new hf(e,f??{}),this.validators={...Ey,...i},this.selectors={...xy,...s},this.network=new df(e,{protocol:this.protocol,logPrefix:h}),this.routingTable=new bf(e,{kBucketSize:n,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:h,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let p=J();t.allowQueryWithZeroPeers===!0&&p.resolve(),this.queryManager=new pf(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:h,initialQuerySelfHasRun:p,routingTable:this.routingTable}),this.peerRouting=new ff(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:h}),this.contentFetching=new lf(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:h}),this.contentRouting=new uf(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:h}),this.routingTableRefresh=new vf(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:h}),this.rpc=new Cf(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:h,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new Pf(e,{protocol:this.protocol,logPrefix:h}),this.querySelf=new gf(e,{peerRouting:this.peerRouting,interval:a,initialInterval:t.initialQuerySelfInterval,logPrefix:h,initialQuerySelfHasRun:p,routingTable:this.routingTable}),this.network.addEventListener("peer",m=>{let g=m.detail;this.onPeerConnect(g).catch(y=>{this.log.error("could not add %p to routing table",g.id,y)}),this.dispatchEvent(new CustomEvent("peer",{detail:g}))}),this.topologyListener.addEventListener("peer",m=>{let g=m.detail;Promise.resolve().then(async()=>{let y=await this.components.peerStore.get(g),b={id:g,multiaddrs:y.addresses.map(({multiaddr:w})=>w),protocols:y.protocols};await this.onPeerConnect(b)}).catch(y=>{this.log.error("could not add %p to routing table",g,y)})}),this.dhtPeerRouting=new f3(this),this.dhtContentRouting=new d3(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",m=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let g=m.detail.peer.addresses.some(({multiaddr:b})=>Iy(b)),y=this.getMode();g&&y==="client"?await this.setMode("server"):y==="server"&&!g&&await this.setMode("client")}).catch(g=>{this.log.error("error setting dht server mode",g)})})}[Symbol.toStringTag]="@libp2p/kad-dht";[_e]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[Vr]=["@libp2p/identify"];get[ln](){return this.dhtContentRouting}get[un](){return this.dhtPeerRouting}get[Yo](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log.trace("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t=!1){if(e===this.getMode()&&!t){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol),e===this.getMode()&&!t){this.log("already in %s mode",e);return}e==="client"?(this.log("enabling client mode while in %s mode",this.getMode()),this.clientMode=!0):(this.log("enabling server mode while in %s mode",this.getMode()),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running=!0,await this.setMode(this.clientMode?"client":"server",!0),await bt(this.routingTable,this.providers,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh),await bt(this.querySelf)}async stop(){this.running=!1,await Ct(this.querySelf,this.providers,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener)}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var xf;(function(r){r[r.SEND_QUERY=0]="SEND_QUERY",r[r.PEER_RESPONSE=1]="PEER_RESPONSE",r[r.FINAL_PEER=2]="FINAL_PEER",r[r.QUERY_ERROR=3]="QUERY_ERROR",r[r.PROVIDER=4]="PROVIDER",r[r.VALUE=5]="VALUE",r[r.ADD_PEER=6]="ADD_PEER",r[r.DIAL_PEER=7]="DIAL_PEER"})(xf||(xf={}));function Uy(r={}){return e=>new Rf(e,r)}var Gy=kt(zy(),1),Zs=Gy.default;var sw=kt(rw(),1);var Js={};Xe(Js,{create:()=>Vk,derivedEmptyPasswordKey:()=>Nf});var Nf={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function Vk(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",i=r?.saltLength??16,s=r?.iterations??32767,a=rr.get();t*=8;async function c(u,f){let h=a.getRandomValues(new Uint8Array(i)),p=a.getRandomValues(new Uint8Array(n)),m={name:e,iv:p};typeof f=="string"&&(f=O(f));let g;if(f.length===0){g=await a.subtle.importKey("jwk",Nf,{name:"AES-GCM"},!0,["encrypt"]);try{let b={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(b,w,{name:e,length:t},!0,["encrypt"])}catch{g=await a.subtle.importKey("jwk",Nf,{name:"AES-GCM"},!0,["encrypt"])}}else{let b={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(b,w,{name:e,length:t},!0,["encrypt"])}let y=await a.subtle.encrypt(m,g,u);return Re([h,m.iv,new Uint8Array(y)])}async function l(u,f){let h=u.subarray(0,i),p=u.subarray(i,i+n),m=u.subarray(i+n),g={name:e,iv:p};typeof f=="string"&&(f=O(f));let y;if(f.length===0)try{let w={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},x=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,x,{name:e,length:t},!0,["decrypt"])}catch{y=await a.subtle.importKey("jwk",Nf,{name:"AES-GCM"},!0,["decrypt"])}else{let w={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},x=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,x,{name:e,length:t},!0,["decrypt"])}let b=await a.subtle.decrypt(g,y,m);return new Uint8Array(b)}return{encrypt:c,decrypt:l}}async function p3(r,e){let n=await Js.create().encrypt(r,e);return it.encode(n)}async function m3(r,e,t){if(r.type==="RSA")return Wk(r,e,t);if(r.type==="Ed25519")return Hk(r,e,t);if(r.type==="secp256k1")return qk(r,e,t);throw new Kr}async function Hk(r,e,t="libp2p-key"){if(t==="libp2p-key")return p3(ls(r),e);throw new C(`export format '${t}' is not supported`)}async function qk(r,e,t="libp2p-key"){if(t==="libp2p-key")return p3(ls(r),e);throw new C("Export format is not supported")}async function Wk(r,e,t="pkcs-8"){if(t==="pkcs-8")return zk(r,e);if(t==="libp2p-key")return p3(ls(r),e);throw new C("Export format is not supported")}async function zk(r,e){let t=rr.get(),o=new ht({value:[new tt({value:0}),new ht({value:[new kr({value:"1.2.840.113549.1.1.1"}),new $n]}),new Kn({valueHex:r.raw})]}).toBER(),i=new Uint8Array(o,0,o.byteLength),s=pt(16),a=await Wu(yo,e,s,{c:1e4,dkLen:32}),c=pt(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),d=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,i),u=new ht({value:[new Kn({valueHex:s}),new tt({value:1e4}),new tt({value:32}),new ht({value:[new kr({value:"1.2.840.113549.2.11"}),new $n]})]}),f=new ht({value:[new kr({value:"1.2.840.113549.1.5.13"}),new ht({value:[new ht({value:[new kr({value:"1.2.840.113549.1.5.12"}),u]}),new ht({value:[new kr({value:"2.16.840.1.101.3.4.1.42"}),new Kn({valueHex:c})]})]})]}),p=new ht({value:[f,new Kn({valueHex:d})]}).toBER(),m=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...F(m,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
19
- `)}async function g3(r,e){try{let t=await Gk(r,e);return I8(t)}catch{}if(!r.includes("BEGIN"))throw new C("Encrypted key was not a libp2p-key or a PEM file");return Yk(r,e)}async function Gk(r,e){let t=it.decode(r);return Js.create().decrypt(t,e)}async function Yk(r,e){let t=rr.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let i=O(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=ui(i),{iv:a,salt:c,iterations:l,keySize:d,cipherText:u}=Qk(s),f=await Wu(yo,e,c,{c:l,dkLen:d}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Wc(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,u)),{result:m}=ui(p);n=iw(m)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let i=O(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=ui(i);n=iw(s)}else throw new C("Could not parse private key from PEM data");let o=T8(n);if(o.type!=="RSA")throw new C("Could not parse RSA private key from PEM data");return o}function Qk(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new C("Only pkcs5PBES2 encrypted private keys are supported");let n=e.valueBlock.value[1].valueBlock.value[0];if(n.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.12")throw new C("Only pkcs5PBKDF2 key derivation functions are supported");let i=n.valueBlock.value[1],s=Wc(i.valueBlock.value[0].getValue()),a=1e4,c=32;if(i.valueBlock.value.length===3)a=Number(i.valueBlock.value[1].toBigInt()),c=Number(i.valueBlock.value[2].toBigInt());else if(i.valueBlock.value.length===2)throw new C("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key");let l=e.valueBlock.value[1].valueBlock.value[1],d=l.valueBlock.value[0].toString();if(d!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(d!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new C("Only AES-CBC encryption schemes are supported")}}}}let u=Wc(l.valueBlock.value[1].getValue());return{cipherText:Wc(r.valueBlock.value[1].getValue()),salt:s,iterations:a,keySize:c,iv:u}}function iw(r){return Wc(r.valueBlock.value[2].getValue())}function Wc(r){return new Uint8Array(r,0,r.byteLength)}var Xk="/pkcs8/",w3="/info/",zc=new WeakMap,Ti={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},y3={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function ea(r){return r==null||typeof r!="string"?!1:r===(0,sw.default)(r.trim())&&r.length>0}async function It(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function ki(r){return new Le(Xk+r)}function ta(r){return new Le(w3+r)}async function jk(r){let e=ls(r),t=await dt.digest(e);return Se.encode(t.bytes).substring(1)}var Bf=class{components;init;log;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=Zs(y3,t),this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<Ti.minKeyLength)throw new Error(`dek.keyLength must be least ${Ti.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Ti.minSaltLength)throw new Error(`dek.saltLength must be least ${Ti.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Ti.minIterationCount)throw new Error(`dek.iterationCount must be least ${Ti.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Ya(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";zc.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[_e]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},y3),t=Math.ceil(Ti.minSaltLength/3)*3;return e.dek.salt=F(pt(t),"base64"),e}static get options(){return y3}async findKeyByName(e){if(!ea(e))throw await It(),new C(`Invalid key name '${e}'`);let t=ta(e);try{let n=await this.components.datastore.get(t);return JSON.parse(F(n))}catch(n){throw await It(),this.log.error(n),new Me(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:w3};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(F(n.value));if(o.id===e)return o}throw new C(`Key with id '${e}' does not exist.`)}catch(t){throw await It(),t}}async importKey(e,t){if(!ea(e))throw await It(),new C(`Invalid key name '${e}'`);if(t==null)throw await It(),new C("Key is required");let n=ki(e);if(await this.components.datastore.has(n))throw await It(),new C(`Key '${e}' already exists`);let i,s;try{i=await jk(t);let l=zc.get(this);if(l==null)throw new C("dek missing");let d=l.dek;s=await m3(t,d,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await It(),l}let a={name:e,id:i},c=this.components.datastore.batch();return c.put(n,O(s)),c.put(ta(e),O(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!ea(e))throw await It(),new C(`Invalid key name '${e}'`);let t=ki(e);try{let n=await this.components.datastore.get(t),o=F(n),i=zc.get(this);if(i==null)throw new C("dek missing");let s=i.dek;return await g3(o,s)}catch(n){throw await It(),n}}async removeKey(e){if(!ea(e)||e==="self")throw await It(),new C(`Invalid key name '${e}'`);let t=ki(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(ta(e)),await o.commit(),n}async listKeys(){let e={prefix:w3},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(F(n.value)));return t}async renameKey(e,t){if(!ea(e)||e==="self")throw await It(),new C(`Invalid old key name '${e}'`);if(!ea(t)||t==="self")throw await It(),new C(`Invalid new key name '${t}'`);let n=ki(e),o=ki(t),i=ta(e),s=ta(t);if(await this.components.datastore.has(o))throw await It(),new C(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(i),d=JSON.parse(F(l));d.name=t;let u=this.components.datastore.batch();return u.put(o,c),u.put(s,O(JSON.stringify(d))),u.delete(n),u.delete(i),await u.commit(),d}catch(c){throw await It(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await It(),new C(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await It(),new C(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await It(),new C(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=zc.get(this);if(n==null)throw new C("dek missing");let o=n.dek;this.init.pass=t;let i=t!=null&&this.init.dek?.salt!=null?Ya(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";zc.set(this,{dek:i});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(ki(a.name)),l=F(c),d=await g3(l,o),u=i.toString(),f=await m3(d,u,d.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(ki(a.name),O(f)),h.put(ta(a.name),O(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function Of(r={}){return e=>new Bf(e,r)}var ra=class{memoryStorage;points;duration;blockDuration;execEvenly;execEvenlyMinDelayMs;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.execEvenly=e.execEvenly??!1,this.execEvenlyMinDelayMs=e.execEvenlyMinDelayMs??this.duration*1e3/this.points,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new b3}async consume(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);if(s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s.consumedPoints>this.points)throw this.blockDuration>0&&s.consumedPoints<=this.points+t&&(s=this.memoryStorage.set(o,s.consumedPoints,this.blockDuration)),new yl("Rate limit exceeded",s);if(this.execEvenly&&s.msBeforeNext>0&&!s.isFirstInDuration){let a=Math.ceil(s.msBeforeNext/(s.remainingPoints+2));a<this.execEvenlyMinDelayMs&&(a=s.consumedPoints*this.execEvenlyMinDelayMs),await Yd(a)}return s}penalty(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}reward(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,-t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}block(e,t){let n=t*1e3,o=this.points+1;return this.memoryStorage.set(this.getKey(e),o,t),{remainingPoints:0,msBeforeNext:n===0?-1:n,consumedPoints:o,isFirstInDuration:!1}}set(e,t,n=0){let o=(n>=0?n:this.duration)*1e3;return this.memoryStorage.set(this.getKey(e),t,n),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:t,isFirstInDuration:!1}}get(e){let t=this.memoryStorage.get(this.getKey(e));return t!=null&&(t.remainingPoints=Math.max(this.points-t.consumedPoints,0)),t}delete(e){this.memoryStorage.delete(this.getKey(e))}_getKeySecDuration(e){return e?.customDuration!=null&&e.customDuration>=0?e.customDuration:this.duration}getKey(e){return this.keyPrefix.length>0?`${this.keyPrefix}:${e}`:e}parseKey(e){return e.substring(this.keyPrefix.length)}},b3=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let i=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||i>0?(o.value+=t,{remainingPoints:0,msBeforeNext:i,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,i=this.storage.get(e);i!=null&&clearTimeout(i.timeoutId);let s={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,s),o>0&&(s.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),s.timeoutId.unref!=null&&s.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:s.value,isFirstInDuration:!0}}get(e){let t=this.storage.get(e);if(t!=null)return{remainingPoints:0,msBeforeNext:t.expiresAt!=null?t.expiresAt.getTime()-new Date().getTime():-1,consumedPoints:t.value,isFirstInDuration:!1}}delete(e){let t=this.storage.get(e);return t!=null?(t.timeoutId!=null&&clearTimeout(t.timeoutId),this.storage.delete(e),!0):!1}};var ge;(function(r){r[r.NEW_STREAM=0]="NEW_STREAM",r[r.MESSAGE_RECEIVER=1]="MESSAGE_RECEIVER",r[r.MESSAGE_INITIATOR=2]="MESSAGE_INITIATOR",r[r.CLOSE_RECEIVER=3]="CLOSE_RECEIVER",r[r.CLOSE_INITIATOR=4]="CLOSE_INITIATOR",r[r.RESET_RECEIVER=5]="RESET_RECEIVER",r[r.RESET_INITIATOR=6]="RESET_INITIATOR"})(ge||(ge={}));var Gc=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),x3=Object.freeze({NEW_STREAM:ge.NEW_STREAM,MESSAGE:ge.MESSAGE_INITIATOR,CLOSE:ge.CLOSE_INITIATOR,RESET:ge.RESET_INITIATOR}),aw=Object.freeze({MESSAGE:ge.MESSAGE_RECEIVER,CLOSE:ge.CLOSE_RECEIVER,RESET:ge.RESET_RECEIVER});var E3=1<<20,Zk=4<<20,Mf=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=E3,t=Zk){this._buffer=new ce,this._headerInfo=null,this._maxMessageSize=e,this._maxUnprocessedMessageQueueSize=t}write(e){if(e==null||e.length===0)return[];if(this._buffer.append(e),this._buffer.byteLength>this._maxUnprocessedMessageQueueSize)throw new de("Unprocessed message queue size too large!");let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.name==="InvalidMessageError")throw l;break}let{id:n,type:o,length:i,offset:s}=this._headerInfo;if(this._buffer.length-s<i)break;let c={id:n,type:o};(o===ge.NEW_STREAM||o===ge.MESSAGE_INITIATOR||o===ge.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(s,s+i)),t.push(c),this._buffer.consume(s+i),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=lw(e),{value:o,offset:i}=lw(e,n),s=t&7;if(Gc[s]==null)throw new Error(`Invalid type received: ${s}`);if(o>this._maxMessageSize)throw new de("Message size too large");return{id:t>>3,type:s,offset:n+i,length:o}}},Jk=128,cw=127;function lw(r,e=0){let t=0,n=0,o=e,i,s=r.length;do{if(o>=s||n>49)throw e=0,new RangeError("Could not decode varint");i=r.get(o++),t+=n<28?(i&cw)<<n:(i&cw)*Math.pow(2,n),n+=7}while(i>=Jk);return e=o-e,{value:t,offset:e}}var v3=10*1024,S3=class{_pool;_poolOffset;constructor(){this._pool=Ge(v3),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Ve(e.id<<3|e.type,n,o),o+=pe(e.id<<3|e.type),(e.type===ge.NEW_STREAM||e.type===ge.MESSAGE_INITIATOR||e.type===ge.MESSAGE_RECEIVER)&&e.data!=null?(Ve(e.data.length,n,o),o+=pe(e.data.length)):(Ve(0,n,o),o+=pe(0));let i=n.subarray(this._poolOffset,o);v3-o<100?(this._pool=Ge(v3),this._poolOffset=0):this._poolOffset=o,t.append(i),(e.type===ge.NEW_STREAM||e.type===ge.MESSAGE_INITIATOR||e.type===ge.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},eC=new S3;async function*uw(r){for await(let e of r){let t=new ce;eC.write(e,t),yield t}}var Uf=class extends Error{constructor(e="Stream input buffer error"){super(e),this.name="StreamInputBufferError"}};var A3=class extends _n{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?x3:aw,this.send=e.send,this.name=e.name,this.streamId=e.streamId,this.maxDataSize=e.maxDataSize}async sendNewStream(){await this.send({id:this.streamId,type:x3.NEW_STREAM,data:new ce(O(this.name))})}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxDataSize);await this.send({id:this.streamId,type:this.types.MESSAGE,data:e.sublist(0,t)}),e.consume(t)}}async sendReset(){await this.send({id:this.streamId,type:this.types.RESET})}async sendCloseWrite(){await this.send({id:this.streamId,type:this.types.CLOSE})}async sendCloseRead(){}};function dw(r){let{id:e,name:t,send:n,onEnd:o,type:i="initiator",maxMsgSize:s=E3}=r;return new A3({id:i==="initiator"?`i${e}`:`r${e}`,streamId:e,name:`${t??e}`,direction:i==="initiator"?"outbound":"inbound",maxDataSize:s,onEnd:o,send:n,log:r.logger.forComponent(`libp2p:mplex:stream:${i}:${e}`)})}var tC=1024,rC=1024,nC=1024*1024*4,oC=5,iC=500;function fw(r){let e={...r,type:`${Gc[r.type]} (${r.type})`};return r.type===ge.NEW_STREAM&&(e.data=F(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===ge.MESSAGE_INITIATOR||r.type===ge.MESSAGE_RECEIVER)&&(e.data=F(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var Ff=class{protocol="/mplex/6.7.0";sink;source;log;_streamId;_streams;_init;_source;closeController;rateLimiter;closeTimeout;logger;constructor(e,t){t=t??{},this.log=e.logger.forComponent("libp2p:mplex"),this.logger=e.logger,this._streamId=0,this._streams={initiators:new Map,receivers:new Map},this._init=t,this.closeTimeout=t.closeTimeout??iC,this.sink=this._createSink(),this._source=Pt({objectMode:!0,onEnd:()=>{for(let n of this._streams.initiators.values())n.destroy();for(let n of this._streams.receivers.values())n.destroy()}}),this.source=Je(this._source,n=>uw(n)),this.closeController=new AbortController,this.rateLimiter=new ra({points:t.disconnectThreshold??oC,duration:1})}get streams(){let e=[];for(let t of this._streams.initiators.values())e.push(t);for(let t of this._streams.receivers.values())e.push(t);return e}newStream(e){if(this.closeController.signal.aborted)throw new fn("Muxer already closed");let t=this._streamId++;e=e==null?t.toString():e.toString();let n=this._streams.initiators;return this._newStream({id:t,name:e,type:"initiator",registry:n})}async close(e){if(this.closeController.signal.aborted)return;let t=e?.signal??AbortSignal.timeout(this.closeTimeout);try{await Promise.all(this.streams.map(async n=>n.close({signal:t}))),this._source.end(),await this._source.onEmpty({signal:t}),this.closeController.abort()}catch(n){this.abort(n)}}abort(e){this.closeController.signal.aborted||(this.streams.forEach(t=>{t.abort(e)}),this.closeController.abort(e))}_newReceiverStream(e){let{id:t,name:n}=e,o=this._streams.receivers;return this._newStream({id:t,name:n,type:"receiver",registry:o})}_newStream(e){let{id:t,name:n,type:o,registry:i}=e;if(this.log("new %s stream %s",o,t),o==="initiator"&&this._streams.initiators.size===(this._init.maxOutboundStreams??rC))throw new co("Too many outbound streams open");if(i.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=dw({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,fw(l)),this._source.push(l)},type:o,onEnd:()=>{this.log("%s stream with id %s and protocol %s ended",o,t,c.protocol),i.delete(t),this._init.onStreamEnd!=null&&this._init.onStreamEnd(c)},maxMsgSize:this._init.maxMsgSize,logger:this.logger});return i.set(t,c),c}_createSink(){return async t=>{let n=()=>{Ld(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new Mf(this._init.maxMsgSize,this._init.maxUnprocessedMessageQueueSize);for await(let i of t)for(let s of o.write(i))await this._handleIncoming(s);this._source.end()}catch(o){this.log("error in sink",o),this._source.end(o)}finally{this.closeController.signal.removeEventListener("abort",n)}}}async _handleIncoming(e){let{id:t,type:n}=e;if(this.log.enabled&&this.log.trace("incoming message",fw(e)),e.type===ge.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??tC)){this.log("too many inbound streams open"),this._source.push({id:t,type:ge.RESET_RECEIVER});try{await this.rateLimiter.consume("new-stream",1)}catch{this.log("rate limit hit when opening too many new streams over the inbound stream limit - closing remote connection"),this.abort(new Error("Too many open streams"));return}return}let a=this._newReceiverStream({id:t,name:F(e.data instanceof Uint8Array?e.data:e.data.subarray())});this._init.onIncomingStream!=null&&this._init.onIncomingStream(a);return}let i=((n&1)===1?this._streams.initiators:this._streams.receivers).get(t);if(i==null){this.log("missing stream %s for message type %s",t,Gc[n]);try{await this.rateLimiter.consume("missing-stream",1)}catch{this.log("rate limit hit when receiving messages for streams that do not exist - closing remote connection"),this.abort(new Error("Too many messages for missing streams"));return}return}let s=this._init.maxStreamBufferSize??nC;try{switch(n){case ge.MESSAGE_INITIATOR:case ge.MESSAGE_RECEIVER:if(i.sourceReadableLength()>s)throw this._source.push({id:e.id,type:n===ge.MESSAGE_INITIATOR?ge.RESET_RECEIVER:ge.RESET_INITIATOR}),new Uf("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers");i.sourcePush(e.data);break;case ge.CLOSE_INITIATOR:case ge.CLOSE_RECEIVER:i.remoteCloseWrite();break;case ge.RESET_INITIATOR:case ge.RESET_RECEIVER:i.reset();break;default:this.log("unknown message type %s",n)}}catch(a){this.log.error("error while processing message",a),i.abort(a)}}};var _3=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}[Symbol.toStringTag]="@libp2p/mplex";[_e]=["@libp2p/stream-multiplexing"];createStreamMuxer(e={}){return new Ff(this.components,{...e,...this._init})}};function hw(r={}){return e=>new _3(e,r)}var pw="1.0.0",mw="ping",gw="ipfs";var $f=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??gw}/${mw}/${pw}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handleMessage=this.handleMessage.bind(this)}[Symbol.toStringTag]="@libp2p/ping";async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}handleMessage(e){this.log("incoming ping from %p",e.connection.remotePeer);let{stream:t}=e,n=Date.now(),o=Ei(t);Promise.resolve().then(async()=>{for(;;){let i=AbortSignal.timeout(this.timeout);i.addEventListener("abort",()=>{t?.abort(new Fr("ping timeout"))});let s=await o.read(32,{signal:i});await o.write(s,{signal:i})}}).catch(i=>{this.log.error("incoming ping from %p failed with error",e.connection.remotePeer,i),t?.abort(i)}).finally(()=>{let i=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,i)})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=pt(32),i=await this.components.connectionManager.openConnection(e,t),s;if(t.signal==null){let a=AbortSignal.timeout(this.timeout);t={...t,signal:a}}try{s=await i.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let a=Ei(s),[,c]=await Promise.all([a.write(o,t),a.read(32,t)]),l=Date.now()-n;if(!te(o,c.subarray()))throw new fl(`Received wrong ping ack after ${l}ms`);return this.log("ping %p complete in %dms",i.remotePeer,l),l}catch(a){throw this.log.error("error while pinging %p",i.remotePeer,a),s?.abort(a),a}finally{s!=null&&await s.close(t)}}};function yw(r={}){return e=>new $f(e,r)}var ww=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},lC=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var uC=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var dC=function(){function r(e,t,n,o){this.name=e,this.version=t,this.os=n,this.bot=o,this.type="bot-device"}return r}();var fC=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var hC=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var pC=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,mC=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,bw=3,gC=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/EdgA?\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["pie",/^Microsoft Pocket Internet Explorer\/(\d+\.\d+)$/],["pie",/^Mozilla\/\d\.\d+\s\(compatible;\s(?:MSP?IE|MSInternet Explorer) (\d+\.\d+);.*Windows CE.*\)$/],["netfront",/^Mozilla\/\d\.\d+.*NetFront\/(\d.\d)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FB[AS]V\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["curl",/^curl\/([0-9\.]+)$/],["searchbot",pC]],xw=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Windows CE",/Windows CE|WinCE|Microsoft Pocket Internet Explorer/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function vw(r){return r?Ew(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new hC:typeof navigator<"u"?Ew(navigator.userAgent):bC()}function yC(r){return r!==""&&gC.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var i=o.exec(r);return!!i&&[n,i]},!1)}function Ew(r){var e=yC(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new fC;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<bw&&(o=ww(ww([],o,!0),xC(bw-o.length),!0)):o=[];var i=o.join("."),s=wC(r),a=mC.exec(r);return a&&a[1]?new dC(t,i,s,a[1]):new lC(t,i,s)}function wC(r){for(var e=0,t=xw.length;e<t;e++){var n=xw[e],o=n[0],i=n[1],s=i.exec(r);if(s)return o}return null}function bC(){var r=typeof process<"u"&&process.version;return r?new uC(process.version.slice(1)):null}function xC(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var Sw=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"];var Aw=vw(),Yc=Aw!=null&&Aw.name==="firefox",Kf=async function*(){},Vf=async r=>{},EC=30*1e3;function _w(r,e,t=EC,n){r.readyState==="open"&&Promise.resolve().then(async()=>{if(r.bufferedAmount>0){n.log("%s drain channel with %d buffered bytes",e,r.bufferedAmount);let o=J(),i=!1;r.bufferedAmountLowThreshold=0;let s=()=>{i||(n.log("%s drain channel closed before drain",e),o.resolve())};r.addEventListener("close",s,{once:!0}),r.addEventListener("bufferedamountlow",()=>{i=!0,r.removeEventListener("close",s),o.resolve()}),await Zr(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}async function Qc(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??Sw.map(e=>({urls:[e]})),r}var Ci=class{log;peerConnection;remoteAddr;timeline;metrics;source=Kf();sink=Vf;constructor(e,t){this.log=e.logger.forComponent("libp2p:webrtc:maconn"),this.remoteAddr=t.remoteAddr,this.timeline=t.timeline,this.peerConnection=t.peerConnection;let n=this.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",this.peerConnection.connectionState,"initial state",n),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.timeline.close=Date.now())}}async close(e){this.log.trace("closing connection"),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({close:!0})}abort(e){this.log.error("closing connection due to error",e),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({abort:!0})}};var zt;(function(r){let e;(function(o){o.FIN="FIN",o.STOP_SENDING="STOP_SENDING",o.RESET="RESET",o.FIN_ACK="FIN_ACK"})(e=r.Flag||(r.Flag={}));let t;(function(o){o[o.FIN=0]="FIN",o[o.STOP_SENDING=1]="STOP_SENDING",o[o.RESET=2]="RESET",o[o.FIN_ACK=3]="FIN_ACK"})(t||(t={})),function(o){o.codec=()=>He(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=ie((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.flag!=null&&(i.uint32(8),r.Flag.codec().encode(o.flag,i)),o.message!=null&&(i.uint32(18),i.bytes(o.message)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.flag=r.Flag.codec().decode(o);break}case 2:{a.message=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>oe(o,r.codec()),r.decode=(o,i)=>ne(o,r.codec(),i)})(zt||(zt={}));var vC=2*1024*1024,SC=30*1e3,Hf=16*1024;function AC(r=Hf){let e=pe(r-pe(r)),t=1+pe(Object.keys(zt.Flag).length-1),n=1,o=r-e-t-n,i=pe(o);return e+t+n+i}var _C=AC(),IC=5e3,TC=5e3,T3=class extends _n{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;constructor(e){let t=e.onEnd;switch(e.onEnd=o=>{this.log.trace("readable and writeable ends closed",this.status),Promise.resolve(async()=>{if(!(this.timeline.abort!=null||this.timeline.reset!==null))try{await Zr(this.receiveFinAck.promise,{milliseconds:this.finAckTimeout})}catch(i){this.log.error("error receiving FIN_ACK",i)}}).then(()=>{this.incomingData.end(),t?.(o)}).catch(i=>{this.log.error("error ending stream",i)})},super(e),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=Pt(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??SC,this.maxBufferedAmount=e.maxBufferedAmount??vC,this.maxMessageSize=(e.maxMessageSize??Hf)-_C,this.receiveFinAck=J(),this.finAckTimeout=e.closeTimeout??IC,this.openTimeout=e.openTimeout??TC,this.channel.readyState){case"open":this.timeline.open=new Date().getTime();break;case"closed":case"closing":(this.timeline.close===void 0||this.timeline.close===0)&&(this.timeline.close=Date.now());break;case"connecting":break;default:throw this.log.error("unknown datachannel state %s",this.channel.readyState),new Qo("Unknown datachannel state")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.receiveFinAck.resolve(),this.close().catch(i=>{this.log.error("error closing stream after channel closed",i)})},this.channel.onerror=o=>{let i=o.error;this.abort(i)},this.channel.onmessage=async o=>{let{data:i}=o;i===null||i.byteLength===0||this.incomingData.push(new Uint8Array(i,0,i.byteLength))};let n=this;Promise.resolve().then(async()=>{for await(let o of Xt(this.incomingData)){let i=n.processIncomingProtobuf(o);i!=null&&n.sourcePush(new ce(i))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(t&&this.channel.bufferedAmount>this.maxBufferedAmount)try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await Hc(this.channel,"bufferedamountlow",{timeout:this.bufferedAmountLowEventTimeout})}catch(n){throw n instanceof Fr?new Fr(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`):n}if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new Qo(`Invalid datachannel state - ${this.channel.readyState}`);this.channel.readyState!=="open"&&(this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await Hc(this.channel,"open",{timeout:this.openTimeout}),this.log('channel state is now "%s", sending data',this.channel.readyState)),this.channel.send(e.subarray())}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxMessageSize),n=e.subarray(0,t),o=zt.encode({message:n}),i=Qt.single(o);await this._sendMessage(i),e.consume(t)}}async sendReset(){await this._sendFlag(zt.Flag.RESET)}async sendCloseWrite(e){if(await this._sendFlag(zt.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await ke(this.receiveFinAck.promise,e?.signal,{errorMessage:"sending close-write was aborted before FIN_ACK was received",errorName:"FinAckNotReceivedError"})}catch(n){this.log.error("failed to await FIN_ACK",n)}}else this.log.trace("sending FIN failed, not awaiting FIN_ACK");this.receiveFinAck.resolve()}async sendCloseRead(){await this._sendFlag(zt.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=zt.decode(e);if(t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===zt.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(zt.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===zt.Flag.RESET&&this.reset(),t.flag===zt.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===zt.Flag.FIN_ACK&&(this.log.trace("received FIN_ACK"),this.receiveFinAck.resolve())),this.readStatus==="ready")return t.message}async _sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',this.channel.readyState,e.toString()),!1;this.log.trace("sending flag %s",e.toString());let t=zt.encode({flag:e}),n=Qt.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s",e.toString(),o)}return!1}};function na(r){let{channel:e,direction:t}=r;return new T3({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var Iw="/webrtc",Wo=class{protocol;peerConnection;bufferedStreams=[];metrics;dataChannelOptions;components;log;constructor(e,t){this.components=e,this.peerConnection=t.peerConnection,this.metrics=t.metrics,this.protocol=t.protocol??Iw,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:datachannelmuxerfactory"),this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace('incoming early datachannel with channel id %d and label "%s"',n.id),n.label==="init"){this.log.trace("closing early init channel"),n.close();return}let o={},i=na({channel:n,direction:"inbound",onEnd:s=>{o.onEnd(s)},logger:e.logger,...this.dataChannelOptions});o.stream=i,o.channel=n,o.onEnd=()=>{this.bufferedStreams=this.bufferedStreams.filter(s=>s.stream.id!==i.id)},this.bufferedStreams.push(o)}}createStreamMuxer(e){return new k3(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},k3=class{init;streams;protocol;log;peerConnection;dataChannelOptions;metrics;logger;constructor(e,t){this.init=t,this.log=e.logger.forComponent("libp2p:webrtc:muxer"),this.logger=e.logger,this.streams=t.streams.map(n=>n.stream),this.peerConnection=t.peerConnection,this.protocol=t.protocol??Iw,this.metrics=t.metrics,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace("incoming datachannel with channel id %d",n.id),n.label==="init"){this.log.trace("closing init channel"),n.close();return}let o=na({channel:n,direction:"inbound",onEnd:()=>{this.log("incoming channel %s ended with state %s",n.id,n.readyState),this.#e(o,n)},logger:this.logger,...this.dataChannelOptions});this.streams.push(o),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(o)},this.init.streams.length>0&&queueMicrotask(()=>{this.init.streams.forEach(n=>{n.onEnd=()=>{this.log("incoming early channel %s ended with state %s",n.channel.id,n.channel.readyState),this.#e(n.stream,n.channel)},this.metrics?.increment({incoming_stream:!0}),this.init?.onIncomingStream?.(n.stream)})})}#e(e,t){this.log.trace("stream %s %s %s onEnd",e.direction,e.id,e.protocol),_w(t,`${e.direction} ${e.id} ${e.protocol}`,this.dataChannelOptions.drainTimeout,{log:this.log}),this.streams=this.streams.filter(n=>n.id!==e.id),this.metrics?.increment({stream_end:!0}),this.init?.onStreamEnd?.(e)}async close(e){try{await Promise.all(this.streams.map(async t=>t.close(e)))}catch(t){this.abort(t)}}abort(e){for(let t of this.streams)t.abort(e)}source=Kf();sink=Vf;newStream(){let e=this.peerConnection.createDataChannel("");this.log.trace("opened outgoing datachannel with channel id %s",e.id);let t=na({channel:e,direction:"outbound",onEnd:()=>{this.log("outgoing channel %s ended with state %s",e.id,e.readyState),this.#e(t,e)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(t),this.metrics?.increment({outgoing_stream:!0}),t}};var Pi=globalThis.RTCPeerConnection,qf=globalThis.RTCSessionDescription,Tw=globalThis.RTCIceCandidate;var zo=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Mr=class extends zo{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var Xc=class extends zo{constructor(e,t){super(`[stream: ${e}] data channel error: ${t}`),this.name="WebRTC/DataChannelError"}},Wf=class extends zo{constructor(e){super(`There was a problem with the Multiaddr which was passed in: ${e}`),this.name="WebRTC/InappropriateMultiaddrError"}};var jc=class extends zo{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var zf=class extends zo{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},Gf=class extends zo{constructor(e){super(`unsupported hash algorithm code: ${e} please see the codes at https://github.com/multiformats/multicodec/blob/master/table.csv `),this.name="WebRTC/UnsupportedHashAlgorithmError"}};var ur;(function(r){let e;(function(o){o.SDP_OFFER="SDP_OFFER",o.SDP_ANSWER="SDP_ANSWER",o.ICE_CANDIDATE="ICE_CANDIDATE"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.SDP_OFFER=0]="SDP_OFFER",o[o.SDP_ANSWER=1]="SDP_ANSWER",o[o.ICE_CANDIDATE=2]="ICE_CANDIDATE"})(t||(t={})),function(o){o.codec=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ie((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.data!=null&&(i.uint32(18),i.string(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.data=o.string();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>oe(o,r.codec()),r.decode=(o,i)=>ne(o,r.codec(),i)})(ur||(ur={}));var Yf=async(r,e,t)=>{try{let n=J();for(kC(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal}).catch(()=>{})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==ur.Type.ICE_CANDIDATE)throw new de("ICE candidate message expected");let i=JSON.parse(o.data??"null");if(i===""||i===null){t.onProgress?.(new H("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let s=new Tw(i);t.log.trace("%s received new ICE candidate %o",t.direction,i);try{t.onProgress?.(new H("webrtc:add-ice-candidate",s.candidate)),await r.addIceCandidate(s)}catch(a){t.log.error("%s bad candidate received",t.direction,i,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate",t.direction,n),t.signal?.aborted===!0&&Qf(r)!=="connected")throw n}};function Qf(r){return Yc?r.iceConnectionState:r.connectionState}function kC(r,e){r[Yc?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(Qf(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new Ui("RTCPeerConnection was closed"));break;default:break}}}async function kw({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:i,transportManager:s,log:a,logger:c,onProgress:l}){let{baseAddr:d}=Cw(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing base address: %a",d);let u=d.getPeerId();if(u==null)throw new C("Relay peer was missing");let f=i.getConnections(De(u)),h,p=!1;f.length===0?(l?.(new H("webrtc:dial-relay")),h=await s.dial(d,{signal:t,onProgress:l}),p=!0):(l?.(new H("webrtc:reuse-relay-connection")),h=f[0]);try{l?.(new H("webrtc:open-signaling-stream"));let m=await h.newStream(Xf,{signal:t,runOnLimitedConnection:!0}),g=ot(m).pb(ur),y=new Pi(r),b=new Wo({logger:c},{peerConnection:y,dataChannelOptions:e});try{let w=y.createDataChannel("init");y.onicecandidate=({candidate:v})=>{let S=JSON.stringify(v?.toJSON()??null);a.trace("initiator sending ICE candidate %o",v),g.write({type:ur.Type.ICE_CANDIDATE,data:S},{signal:t}).catch(I=>{a.error("error sending ICE candidate",I)})},y.onicecandidateerror=v=>{a.error("initiator ICE candidate error",v)};let x=await y.createOffer().catch(v=>{throw a.error("could not execute createOffer",v),new Mr("Failed to set createOffer")});a.trace("initiator send SDP offer %s",x.sdp),l?.(new H("webrtc:send-sdp-offer")),await g.write({type:ur.Type.SDP_OFFER,data:x.sdp},{signal:t}),await y.setLocalDescription(x).catch(v=>{throw a.error("could not execute setLocalDescription",v),new Mr("Failed to set localDescription")}),l?.(new H("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let T=await g.read({signal:t});if(T.type!==ur.Type.SDP_ANSWER)throw new Mr("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",T.data);let k=new qf({type:"answer",sdp:T.data});return await y.setRemoteDescription(k).catch(v=>{throw a.error("could not execute setRemoteDescription",v),new Mr("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new H("webrtc:read-ice-candidates")),await Yf(y,g,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected, closing init channel"),w.close(),l?.(new H("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await m.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:y,muxerFactory:b}}catch(w){throw a.error("outgoing signaling error",w),y.close(),m.abort(w),w}finally{y.onicecandidate=null,y.onicecandidateerror=null}}finally{if(p)try{await h.close({signal:t})}catch(m){h.abort(m)}}}var jf=class extends Ee{peerId;transportManager;shutdownController;constructor(e,t){super(),this.peerId=e.peerId,this.transportManager=e.transportManager,this.shutdownController=t.shutdownController}async listen(){this.safeDispatchEvent("listening",{})}getAddrs(){return this.transportManager.getListeners().filter(e=>e!==this).map(e=>e.getAddrs().filter(t=>ro.matches(t)).map(t=>t.encapsulate(`/webrtc/p2p/${this.peerId}`))).flat()}async close(){this.shutdownController.abort(),this.safeDispatchEvent("close",{})}};async function Pw({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let i=ot(e).pb(ur);try{r.onicecandidate=({candidate:d})=>{let u=JSON.stringify(d?.toJSON()??null);o.trace("recipient sending ICE candidate %s",u),i.write({type:ur.Type.ICE_CANDIDATE,data:u},{signal:t}).catch(f=>{o.error("error sending ICE candidate",f)})},o.trace("recipient read SDP offer");let a=await i.read({signal:t});if(a.type!==ur.Type.SDP_OFFER)throw new Mr(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `);o.trace("recipient received SDP offer %s",a.data);let c=new qf({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(d=>{throw o.error("could not execute setRemoteDescription",d),new Mr("Failed to set remoteDescription")});let l=await r.createAnswer().catch(d=>{throw o.error("could not execute createAnswer",d),new Mr("Failed to create answer")});o.trace("recipient send SDP answer %s",l.sdp),await i.write({type:ur.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(d=>{throw o.error("could not execute setLocalDescription",d),new Mr("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await Yf(r,i,{direction:"recipient",signal:t,log:o})}catch(a){if(Qf(r)!=="connected")throw o.error("error while handling signaling stream from peer %a",n.remoteAddr,a),r.close(),a;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",n.remoteAddr,a)}let s=Y(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",s),{remoteAddress:s}}var CC="/webrtc",PC="/p2p-circuit",Xf="/webrtc-signaling/0.0.1",RC=30*1e3,Zf=class{components;init;log;_started=!1;metrics;shutdownController;constructor(e,t={}){this.components=e,this.init=t,this.log=e.logger.forComponent("libp2p:webrtc"),this.shutdownController=new AbortController,K(1/0,this.shutdownController.signal),e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dialer events by type"}),listenerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_listener_events_total",{label:"event",help:"Total count of WebRTC listener events by type"})})}[dn]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[_e]=["@libp2p/transport"];[Vr]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(Xf,e=>{this._onProtocol(e).catch(t=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,t)})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(Xf),this._started=!1}createListener(e){return new jf(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(bc.exactMatch)}dialFilter(e){return this.listenFilter(e)}async dial(e,t){this.log.trace("dialing address: %a",e);let{remoteAddress:n,peerConnection:o,muxerFactory:i}=await kw({rtcConfiguration:await Qc(this.init.rtcConfiguration),dataChannel:this.init.dataChannel,multiaddr:e,dataChannelOptions:this.init.dataChannel,signal:t.signal,connectionManager:this.components.connectionManager,transportManager:this.components.transportManager,log:this.log,logger:this.components.logger,onProgress:t.onProgress}),s=new Ci(this.components,{peerConnection:o,timeline:{open:Date.now()},remoteAddr:n,metrics:this.metrics?.dialerEvents}),a=await t.upgrader.upgradeOutbound(s,{skipProtection:!0,skipEncryption:!0,muxerFactory:i,onProgress:t.onProgress});return this._closeOnShutdown(o,s),a}async _onProtocol({connection:e,stream:t}){let n=AbortSignal.timeout(this.init.inboundConnectionTimeout??RC),o=new Pi(await Qc(this.init.rtcConfiguration)),i=new Wo(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:s}=await Pw({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new Ci(this.components,{peerConnection:o,timeline:{open:new Date().getTime()},remoteAddr:s,metrics:this.metrics?.listenerEvents});await this.components.upgrader.upgradeInbound(a,{skipEncryption:!0,skipProtection:!0,muxerFactory:i}),this._closeOnShutdown(o,a)}catch(s){throw this.log.error("incoming signaling error",s),o.close(),t.abort(s),s}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function Cw(r){let e=r.toString().split(CC+"/");if(e.length!==2)throw new C("webrtc protocol was not present in multiaddr");if(!e[0].includes(PC))throw new C("p2p-circuit protocol was not present in multiaddr");let t=Y(e[0]),o=Y("/"+e[1]).getPeerId();if(o==null)throw new C("destination peer id was missing");let i=t.protos().pop();if(i===void 0)throw new C("invalid multiaddr");return i.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:De(o)}}var C3=Object.values(Dn).map(r=>r.decoder).reduce((r,e)=>r.or(e));function Rw(r,e){let t=r.getConfiguration().certificates?.at(0);if(t?.getFingerprints==null){e.log.trace("fetching fingerprint from local SDP");let o=r.localDescription;return o==null?void 0:LC(o.sdp)}if(e.log.trace("fetching fingerprint from local certificate"),t.getFingerprints().length===0)return;let n=t.getFingerprints()[0].value;if(n==null)throw new jc("","no fingerprint on local certificate");return n}var DC=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function LC(r){return r.match(DC)?.groups?.fingerprint}function NC(r){for(let e of r.protoNames())if(e.startsWith("ip"))return e.toUpperCase();return"IP6"}function Jf(r){let t=r.stringTuples().filter(n=>n[0]===Nw).map(n=>n[1])[0];if(t===void 0||t==="")throw new C(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function P3(r){return Ye.decode(C3.decode(r))}function BC(r){let e=P3(Jf(r)),t=R3(e.code),n=e.digest.reduce((i,s)=>i+s.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw new jc(n,r.toString());return[`${t} ${o.join(":").toUpperCase()}`,n]}function R3(r){switch(r){case 17:return"SHA-1";case 18:return"SHA-256";case 19:return"SHA-512";default:throw new Gf(r)}}function OC(r,e){let{host:t,port:n}=r.toOptions(),o=NC(r),[i]=BC(r);return`v=0
18
+ `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),P_=new RegExp(`(?:^${nn}$)|(?:^${ud}$)`),R_=new RegExp(`^${nn}$`),L_=new RegExp(`^${ud}$`),im=r=>r&&r.exact?P_:new RegExp(`(?:${Oo(r)}${nn}${Oo(r)})|(?:${Oo(r)}${ud}${Oo(r)})`,"g");im.v4=r=>r&&r.exact?R_:new RegExp(`${Oo(r)}${nn}${Oo(r)}`,"g");im.v6=r=>r&&r.exact?L_:new RegExp(`${Oo(r)}${ud}${Oo(r)}`,"g");var sm=im;function am(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function A7(){return!1}var{toString:D_}=Object.prototype;function cm(r){return D_.call(r)==="[object RegExp]"}var I7={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function lm(r,e={}){if(!cm(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(I7).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?I7[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function um(r,e,{timeout:t}={}){try{return am(()=>lm(r).test(e),{timeout:t})()}catch(n){if(A7(n))return!1;throw n}}var N_=15,B_=45,_7={timeout:400};function dm(r){return r.length>B_?!1:um(sm.v6({exact:!0}),r,_7)}function T7(r){return r.length>N_?!1:um(sm.v4({exact:!0}),r,_7)}var k7={http:"80",https:"443",ws:"80",wss:"443"},O_=["http","https","ws","wss"];function C7(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:i}=M_(r),a="/"+[U_(o,t),F_(i,n),$_(n)].filter(c=>!!c).reduce((c,l)=>c.concat(l),[]).join("/");return Q(a)}function M_(r){let[e]=r.split(":");O_.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o}=new URL(r);if(o==null||o===""){let i=V_(e);i!=null&&(o=i),i==null&&t==="http:"&&(o="80")}return{scheme:e,hostname:n,port:o}}function U_(r,e){if(!(r==null||r==="")){if(T7(r))return["ip4",r];if(dm(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(dm(t))return["ip6",t]}return[e,r]}}function F_(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function $_(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function V_(r){if(!(r==null||r===""||k7[r]==null))return k7[r]}var K_=["https://trustless-gateway.link","https://4everland.io"],H_=2336;function q_(r){return r=r.toString(),{id:vn(X.createV1(H_,Jt.digest(M(r)))),multiaddrs:[C7(r)]}}var fm=class{gateways;constructor(e={}){this.gateways=(e.gateways??K_).map(t=>q_(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function hm(r={}){return new fm(r)}var pm=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}};function mm(r){return new pm(r)}var Cc=class extends Jn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(lt.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(lt.encode(e.multihash.bytes));if(t==null)throw new Dr;return t}has(e){return this.data.has(lt.encode(e.multihash.bytes))}async delete(e){this.data.delete(lt.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:X.createV1(Jo,ke(lt.decode(e))),block:t}}};var Fz=mr("blockstore:core:tiered");var L7="SHARDING";function z_(r){return r[Symbol.asyncIterator]!=null}function G_(r){if(z_(r))return(async()=>{let t=[];for await(let n of r)t.push(n);return t})();let e=[];for(let t of r)e.push(t);return e}var Pc=G_;function Q_(r){return r[Symbol.asyncIterator]!=null}function Y_(r,e){return Q_(r)?async function*(){yield*(await Pc(r)).sort(e)}():function*(){yield*Pc(r).sort(e)}()}var dd=Y_;var to=class{put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}get(e,t){return Promise.reject(new Error(".get is not implemented"))}has(e,t){return Promise.reject(new Error(".has is not implemented"))}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*putMany(e,t={}){for await(let{key:n,value:o}of e)await this.put(n,o,t),yield n}async*getMany(e,t={}){for await(let n of e)yield{key:n,value:await this.get(n,t)}}async*deleteMany(e,t={}){for await(let n of e)await this.delete(n,t),yield n}batch(){let e=[],t=[];return{put(n,o){e.push({key:n,value:o})},delete(n){t.push(n)},commit:async n=>{await Ct(this.putMany(e,n)),e=[],await Ct(this.deleteMany(t,n)),t=[]}}}async*_all(e,t){throw new Error("._all is not implemented")}async*_allKeys(e,t){throw new Error("._allKeys is not implemented")}query(e,t){let n=this._all(e,t);if(e.prefix!=null){let o=e.prefix;n=tn(n,i=>i.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>tn(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>dd(o,i),n)),e.offset!=null){let o=0,i=e.offset;n=tn(n,()=>o++>=i)}return e.limit!=null&&(n=uo(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=tn(n,i=>i.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>tn(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>dd(o,i),n)),e.offset!=null){let o=e.offset,i=0;n=tn(n,()=>i++>=o)}return e.limit!=null&&(n=uo(n,e.limit)),n}};var Si=class extends to{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(e.toString(),t),e}get(e){let t=this.data.get(e.toString());if(t==null)throw new Dr;return t}has(e){return this.data.has(e.toString())}delete(e){this.data.delete(e.toString())}*_all(){for(let[e,t]of this.data.entries())yield{key:new De(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new De(e)}};var wG=new De(L7);var LG=mr("datastore:core:tiered");var fd=class extends L1{libp2p;constructor(e){super({...e,components:{libp2p:e.libp2p}}),this.libp2p=e.libp2p}async start(){await super.start(),await this.libp2p.start()}async stop(){await super.stop(),await this.libp2p.stop()}};var gm=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=J(),this.haveNext=J()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=J(),e}async throw(e){return this.ended=!0,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return await this._push(void 0),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=J(),await Ce(this.readNext.promise,t?.signal,t)}};function N7(){return new gm}var hd=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var ym=class extends Error{code;constructor(e,t){super(e),this.code=t}},wm=class extends ym{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function Ai(r,e){let t=N7();r.sink(t).catch(async s=>{await t.end(s)}),r.sink=async s=>{for await(let a of s)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new le;return{read:async(s,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((d,u)=>{c=()=>{u(new wm("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(s==null){let{done:u,value:f}=await Promise.race([n.next(),l]);return u===!0?new le:f}for(;o.byteLength<s;){let{value:u,done:f}=await Promise.race([n.next(),l]);if(f===!0)throw new hd("unexpected end of input");o.append(u)}let d=o.sublist(0,s);return o.consume(s),d}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(s,a)=>{a?.signal?.throwIfAborted(),s instanceof Uint8Array?await t.push(s,a):await t.push(s.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let s=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*s}()}return r}}}var pd=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},md=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},gd=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function Tn(r,e={}){let t=Ai(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=pe(e.maxDataLength));let n=e?.lengthDecoder??Ft,o=e?.lengthEncoder??Ke;return{read:async s=>{let a=-1,c=new le;for(;;){c.append(await t.read(1,s));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new pd("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new gd("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new md("message length too long");return t.read(a,s)},write:async(s,a)=>{await t.write(new le(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new le(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function bm(){let r=J(),e=!1;return{sink:async t=>{if(e)throw new Error("already piped");e=!0,r.resolve(t)},source:async function*(){yield*await r.promise}()}}function B7(){let r=bm(),e=bm();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var Os=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function yd(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function xm(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function Em(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function cr(r,...e){if(!Em(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function vm(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function O7(r,e){cr(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var ro=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),M7=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),X_=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!X_)throw new Error("Non little-endian hardware is not supported");function j_(r){if(typeof r!="string")throw new Error(`string expected, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function wd(r){if(typeof r=="string")r=j_(r);else if(Em(r))r=bd(r);else throw new Error(`Uint8Array expected, got ${typeof r}`);return r}function U7(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function F7(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}var Sm=(r,e)=>(Object.assign(e,r),e);function Am(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function bd(r){return Uint8Array.from(r)}function no(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var V7=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),Z_=V7("expand 16-byte k"),J_=V7("expand 32-byte k"),eT=ro(Z_),K7=ro(J_),EQ=K7.slice();function Y(r,e){return r<<e|r>>>32-e}function Im(r){return r.byteOffset%4===0}var xd=64,tT=16,H7=2**32-1,$7=new Uint32Array;function rT(r,e,t,n,o,i,s,a){let c=o.length,l=new Uint8Array(xd),d=ro(l),u=Im(o)&&Im(i),f=u?ro(o):$7,h=u?ro(i):$7;for(let p=0;p<c;s++){if(r(e,t,n,d,s,a),s>=H7)throw new Error("arx: counter overflow");let m=Math.min(xd,c-p);if(u&&m===xd){let g=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let y=0,b;y<tT;y++)b=g+y,h[b]=f[b]^d[y];p+=xd;continue}for(let g=0,y;g<m;g++)y=p+g,i[y]=o[y]^l[g];p+=m}}function _m(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=U7({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return yd(o),yd(s),xm(i),xm(t),(a,c,l,d,u=0)=>{cr(a),cr(c),cr(l);let f=l.length;if(d===void 0&&(d=new Uint8Array(f)),cr(d),yd(u),u<0||u>=H7)throw new Error("arx: counter overflow");if(d.length<f)throw new Error(`arx: output (${d.length}) is shorter than data (${f})`);let h=[],p=a.length,m,g;if(p===32)h.push(m=bd(a)),g=K7;else if(p===16&&t)m=new Uint8Array(32),m.set(a),m.set(a,16),g=eT,h.push(m);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);Im(c)||h.push(c=bd(c));let y=ro(m);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(g,y,ro(c.subarray(0,16)),y),c=c.subarray(16)}let b=16-o;if(b!==c.length)throw new Error(`arx: nonce must be ${b} or 16 bytes`);if(b!==12){let x=new Uint8Array(12);x.set(c,i?0:12-c.length),c=x,h.push(c)}let w=ro(c);return rT(r,g,y,w,l,d,u,s),no(...h),d}}var vt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,Tm=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=wd(e),cr(e,32);let t=vt(e,0),n=vt(e,2),o=vt(e,4),i=vt(e,6),s=vt(e,8),a=vt(e,10),c=vt(e,12),l=vt(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|o<<6)&7939,this.r[3]=(o>>>7|i<<9)&8191,this.r[4]=(i>>>4|s<<12)&255,this.r[5]=s>>>1&8190,this.r[6]=(s>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let d=0;d<8;d++)this.pad[d]=vt(e,16+2*d)}process(e,t,n=!1){let o=n?0:2048,{h:i,r:s}=this,a=s[0],c=s[1],l=s[2],d=s[3],u=s[4],f=s[5],h=s[6],p=s[7],m=s[8],g=s[9],y=vt(e,t+0),b=vt(e,t+2),w=vt(e,t+4),x=vt(e,t+6),T=vt(e,t+8),k=vt(e,t+10),v=vt(e,t+12),S=vt(e,t+14),_=i[0]+(y&8191),F=i[1]+((y>>>13|b<<3)&8191),N=i[2]+((b>>>10|w<<6)&8191),O=i[3]+((w>>>7|x<<9)&8191),B=i[4]+((x>>>4|T<<12)&8191),L=i[5]+(T>>>1&8191),D=i[6]+((T>>>14|k<<2)&8191),I=i[7]+((k>>>11|v<<5)&8191),A=i[8]+((v>>>8|S<<8)&8191),R=i[9]+(S>>>5|o),P=0,q=P+_*a+F*(5*g)+N*(5*m)+O*(5*p)+B*(5*h);P=q>>>13,q&=8191,q+=L*(5*f)+D*(5*u)+I*(5*d)+A*(5*l)+R*(5*c),P+=q>>>13,q&=8191;let z=P+_*c+F*a+N*(5*g)+O*(5*m)+B*(5*p);P=z>>>13,z&=8191,z+=L*(5*h)+D*(5*f)+I*(5*u)+A*(5*d)+R*(5*l),P+=z>>>13,z&=8191;let Z=P+_*l+F*c+N*a+O*(5*g)+B*(5*m);P=Z>>>13,Z&=8191,Z+=L*(5*p)+D*(5*h)+I*(5*f)+A*(5*u)+R*(5*d),P+=Z>>>13,Z&=8191;let ae=P+_*d+F*l+N*c+O*a+B*(5*g);P=ae>>>13,ae&=8191,ae+=L*(5*m)+D*(5*p)+I*(5*h)+A*(5*f)+R*(5*u),P+=ae>>>13,ae&=8191;let ce=P+_*u+F*d+N*l+O*c+B*a;P=ce>>>13,ce&=8191,ce+=L*(5*g)+D*(5*m)+I*(5*p)+A*(5*h)+R*(5*f),P+=ce>>>13,ce&=8191;let fe=P+_*f+F*u+N*d+O*l+B*c;P=fe>>>13,fe&=8191,fe+=L*a+D*(5*g)+I*(5*m)+A*(5*p)+R*(5*h),P+=fe>>>13,fe&=8191;let ve=P+_*h+F*f+N*u+O*d+B*l;P=ve>>>13,ve&=8191,ve+=L*c+D*a+I*(5*g)+A*(5*m)+R*(5*p),P+=ve>>>13,ve&=8191;let Ne=P+_*p+F*h+N*f+O*u+B*d;P=Ne>>>13,Ne&=8191,Ne+=L*l+D*c+I*a+A*(5*g)+R*(5*m),P+=Ne>>>13,Ne&=8191;let Be=P+_*m+F*p+N*h+O*f+B*u;P=Be>>>13,Be&=8191,Be+=L*d+D*l+I*c+A*a+R*(5*g),P+=Be>>>13,Be&=8191;let Ve=P+_*g+F*m+N*p+O*h+B*f;P=Ve>>>13,Ve&=8191,Ve+=L*u+D*d+I*l+A*c+R*a,P+=Ve>>>13,Ve&=8191,P=(P<<2)+P|0,P=P+q|0,q=P&8191,P=P>>>13,z+=P,i[0]=q,i[1]=z,i[2]=Z,i[3]=ae,i[4]=ce,i[5]=fe,i[6]=ve,i[7]=Ne,i[8]=Be,i[9]=Ve}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),o=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=o,o=e[a]>>>13,e[a]&=8191;e[0]+=o*5,o=e[0]>>>13,e[0]&=8191,e[1]+=o,o=e[1]>>>13,e[1]&=8191,e[2]+=o,n[0]=e[0]+5,o=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=e[a]+o,o=n[a]>>>13,n[a]&=8191;n[9]-=8192;let i=(o^1)-1;for(let a=0;a<10;a++)n[a]&=i;i=~i;for(let a=0;a<10;a++)e[a]=e[a]&i|n[a];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let s=e[0]+t[0];e[0]=s&65535;for(let a=1;a<8;a++)s=(e[a]+t[a]|0)+(s>>>16)|0,e[a]=s&65535;no(n)}update(e){vm(this);let{buffer:t,blockLen:n}=this;e=wd(e);let o=e.length;for(let i=0;i<o;){let s=Math.min(n-this.pos,o-i);if(s===n){for(;n<=o-i;i+=n)this.process(e,i);continue}t.set(e.subarray(i,i+s),this.pos),this.pos+=s,i+=s,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){no(this.h,this.r,this.buffer,this.pad)}digestInto(e){vm(this),O7(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:o}=this;if(o){for(t[o++]=1;o<16;o++)t[o]=0;this.process(t,0,!0)}this.finalize();let i=0;for(let s=0;s<8;s++)e[i++]=n[s]>>>0,e[i++]=n[s]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function nT(r){let e=(n,o)=>r(o).update(wd(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var q7=nT(r=>new Tm(r));function G7(r,e,t,n,o,i=20){let s=r[0],a=r[1],c=r[2],l=r[3],d=e[0],u=e[1],f=e[2],h=e[3],p=e[4],m=e[5],g=e[6],y=e[7],b=o,w=t[0],x=t[1],T=t[2],k=s,v=a,S=c,_=l,F=d,N=u,O=f,B=h,L=p,D=m,I=g,A=y,R=b,P=w,q=x,z=T;for(let ae=0;ae<i;ae+=2)k=k+F|0,R=Y(R^k,16),L=L+R|0,F=Y(F^L,12),k=k+F|0,R=Y(R^k,8),L=L+R|0,F=Y(F^L,7),v=v+N|0,P=Y(P^v,16),D=D+P|0,N=Y(N^D,12),v=v+N|0,P=Y(P^v,8),D=D+P|0,N=Y(N^D,7),S=S+O|0,q=Y(q^S,16),I=I+q|0,O=Y(O^I,12),S=S+O|0,q=Y(q^S,8),I=I+q|0,O=Y(O^I,7),_=_+B|0,z=Y(z^_,16),A=A+z|0,B=Y(B^A,12),_=_+B|0,z=Y(z^_,8),A=A+z|0,B=Y(B^A,7),k=k+N|0,z=Y(z^k,16),I=I+z|0,N=Y(N^I,12),k=k+N|0,z=Y(z^k,8),I=I+z|0,N=Y(N^I,7),v=v+O|0,R=Y(R^v,16),A=A+R|0,O=Y(O^A,12),v=v+O|0,R=Y(R^v,8),A=A+R|0,O=Y(O^A,7),S=S+B|0,P=Y(P^S,16),L=L+P|0,B=Y(B^L,12),S=S+B|0,P=Y(P^S,8),L=L+P|0,B=Y(B^L,7),_=_+F|0,q=Y(q^_,16),D=D+q|0,F=Y(F^D,12),_=_+F|0,q=Y(q^_,8),D=D+q|0,F=Y(F^D,7);let Z=0;n[Z++]=s+k|0,n[Z++]=a+v|0,n[Z++]=c+S|0,n[Z++]=l+_|0,n[Z++]=d+F|0,n[Z++]=u+N|0,n[Z++]=f+O|0,n[Z++]=h+B|0,n[Z++]=p+L|0,n[Z++]=m+D|0,n[Z++]=g+I|0,n[Z++]=y+A|0,n[Z++]=b+R|0,n[Z++]=w+P|0,n[Z++]=x+q|0,n[Z++]=T+z|0}function oT(r,e,t,n){let o=r[0],i=r[1],s=r[2],a=r[3],c=e[0],l=e[1],d=e[2],u=e[3],f=e[4],h=e[5],p=e[6],m=e[7],g=t[0],y=t[1],b=t[2],w=t[3];for(let T=0;T<20;T+=2)o=o+c|0,g=Y(g^o,16),f=f+g|0,c=Y(c^f,12),o=o+c|0,g=Y(g^o,8),f=f+g|0,c=Y(c^f,7),i=i+l|0,y=Y(y^i,16),h=h+y|0,l=Y(l^h,12),i=i+l|0,y=Y(y^i,8),h=h+y|0,l=Y(l^h,7),s=s+d|0,b=Y(b^s,16),p=p+b|0,d=Y(d^p,12),s=s+d|0,b=Y(b^s,8),p=p+b|0,d=Y(d^p,7),a=a+u|0,w=Y(w^a,16),m=m+w|0,u=Y(u^m,12),a=a+u|0,w=Y(w^a,8),m=m+w|0,u=Y(u^m,7),o=o+l|0,w=Y(w^o,16),p=p+w|0,l=Y(l^p,12),o=o+l|0,w=Y(w^o,8),p=p+w|0,l=Y(l^p,7),i=i+d|0,g=Y(g^i,16),m=m+g|0,d=Y(d^m,12),i=i+d|0,g=Y(g^i,8),m=m+g|0,d=Y(d^m,7),s=s+u|0,y=Y(y^s,16),f=f+y|0,u=Y(u^f,12),s=s+u|0,y=Y(y^s,8),f=f+y|0,u=Y(u^f,7),a=a+c|0,b=Y(b^a,16),h=h+b|0,c=Y(c^h,12),a=a+c|0,b=Y(b^a,8),h=h+b|0,c=Y(c^h,7);let x=0;n[x++]=o,n[x++]=i,n[x++]=s,n[x++]=a,n[x++]=g,n[x++]=y,n[x++]=b,n[x++]=w}var iT=_m(G7,{counterRight:!1,counterLength:4,allowShortKeys:!1}),sT=_m(G7,{counterRight:!1,counterLength:8,extendNonceFn:oT,allowShortKeys:!1});var aT=new Uint8Array(16),W7=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(aT.subarray(t))},cT=new Uint8Array(32);function z7(r,e,t,n,o){let i=r(e,t,cT),s=q7.create(i);o&&W7(s,o),W7(s,n);let a=new Uint8Array(16),c=M7(a);Am(c,0,BigInt(o?o.length:0),!0),Am(c,8,BigInt(n.length),!0),s.update(a);let l=s.digest();return no(i,a),l}var Q7=r=>(e,t,n)=>(cr(e,32),cr(t),{encrypt(i,s){let a=i.length,c=a+16;s?cr(s,c):s=new Uint8Array(c),r(e,t,i,s,1);let l=z7(r,e,t,s.subarray(0,-16),n);return s.set(l,a),no(l),s},decrypt(i,s){let a=i.length,c=a-16;if(a<16)throw new Error("encrypted data must be at least 16 bytes");s?cr(s,c):s=new Uint8Array(c);let l=i.subarray(0,-16),d=i.subarray(-16),u=z7(r,e,t,l,n);if(!F7(d,u))throw new Error("invalid tag");return r(e,t,l,s,1),no(u),s}}),km=Sm({blockSize:64,nonceLength:12,tagLength:16},Q7(iT)),PQ=Sm({blockSize:64,nonceLength:24,tagLength:16},Q7(sT));function X7(r,e,t){return ni(r),t===void 0&&(t=new Uint8Array(r.outputLen)),_o(r,Wr(t),Wr(e))}var Cm=new Uint8Array([0]),Y7=new Uint8Array;function j7(r,e,t,n=32){if(ni(r),po(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=Y7);let i=new Uint8Array(o*r.outputLen),s=_o.create(r,e),a=s._cloneInto(),c=new Uint8Array(s.outputLen);for(let l=0;l<o;l++)Cm[0]=l+1,a.update(l===0?Y7:c).update(t).update(Cm).digestInto(c),i.set(c,r.outputLen*l),s._cloneInto(a);return s.destroy(),a.destroy(),c.fill(0),Cm.fill(0),i.slice(0,n)}var Pm={hashSHA256(r){return Tr(r.subarray())},getHKDF(r,e){let t=X7(Tr,e,r),o=j7(Tr,t,void 0,96),i=o.subarray(0,32),s=o.subarray(32,64),a=o.subarray(64,96);return[i,s,a]},generateX25519KeyPair(){let r=Ca.utils.randomPrivateKey();return{publicKey:Ca.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Ca.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Ca.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return km(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return km(n,e,t).decrypt(r.subarray(),o)}};var Z7=Pm;function J7(r){return{generateKeypair:r.generateX25519KeyPair,dh:(e,t)=>r.generateX25519SharedKey(e.privateKey,t).subarray(0,32),encrypt:r.chaCha20Poly1305Encrypt,decrypt:r.chaCha20Poly1305Decrypt,hash:r.hashSHA256,hkdf:r.getHKDF}}var Ms=r=>{let e=Ge(2);return e[0]=r>>8,e[1]=r,e};Ms.bytes=2;var Rc=r=>{if(r.length<2)throw RangeError("Could not decode int16BE");if(r instanceof Uint8Array){let e=0;return e+=r[0]<<8,e+=r[1],e}return r.getUint16(0)};Rc.bytes=2;function e9(r){return{xxHandshakeSuccesses:r.registerCounter("libp2p_noise_xxhandshake_successes_total",{help:"Total count of noise xxHandshakes successes_"}),xxHandshakeErrors:r.registerCounter("libp2p_noise_xxhandshake_error_total",{help:"Total count of noise xxHandshakes errors"}),encryptedPackets:r.registerCounter("libp2p_noise_encrypted_packets_total",{help:"Total count of noise encrypted packets successfully"}),decryptedPackets:r.registerCounter("libp2p_noise_decrypted_packets_total",{help:"Total count of noise decrypted packets"}),decryptErrors:r.registerCounter("libp2p_noise_decrypt_errors_total",{help:"Total count of noise decrypt errors"})}}function Rm(r,e){!e.enabled||!Os||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${V(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${V(r.privateKey,"hex")}`)):e("Missing local static keys."))}function Lm(r,e){!e.enabled||!Os||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${V(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${V(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function t9(r,e){!e.enabled||!Os||e(r?`REMOTE_STATIC_PUBLIC_KEY ${V(r.subarray(),"hex")}`:"Missing remote static public key.")}function Dm(r,e){!e.enabled||!Os||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${V(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function Nm(r,e,t){!t.enabled||!Os||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&V(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&V(e.k,"hex")}`))}function on(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Ge(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var Us=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var lT=0,uT=4294967295,dT="Cipherstate has reached maximum n, a new handshake must be performed",Ed=class{n;bytes;view;constructor(e=lT){this.n=e,this.bytes=se(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,e,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>uT)throw new Error(dT)}};var Ii=se(0),Fs=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new Ed(n)}hasKey(){return!!this.k}encryptWithAd(e,t){if(!this.hasKey())return t;this.n.assertValue();let n=this.crypto.encrypt(t,this.n.getBytes(),e,this.k);return this.n.increment(),n}decryptWithAd(e,t,n){if(!this.hasKey())return t;this.n.assertValue();let o=this.crypto.decrypt(t,this.n.getBytes(),e,this.k,n);return this.n.increment(),o}},Bm=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=M(t,"utf-8");this.h=fT(e,n),this.ck=this.h,this.cs=new Fs(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Fs(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new le(this.h,e))}encryptAndHash(e){let t=this.cs.encryptWithAd(this.h,e);return this.mixHash(t),t}decryptAndHash(e){let t=this.cs.decryptWithAd(this.h,e);return this.mixHash(e),t}split(){let[e,t]=this.crypto.hkdf(this.ck,Ii);return[new Fs(this.crypto,e),new Fs(this.crypto,t)]}},Om=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:i,s,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new Bm(t,n),this.ss.mixHash(o),this.initiator=i,this.s=s,this.e=a,this.rs=c,this.re=l}writeE(){if(this.e)throw new Error("ephemeral keypair is already set");let e=this.crypto.generateKeypair();return this.ss.mixHash(e.publicKey),this.e=e,e.publicKey}writeS(){if(!this.s)throw new Error("static keypair is not set");return this.ss.encryptAndHash(this.s.publicKey)}writeEE(){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.re))}writeES(){if(this.initiator){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}else{if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}}writeSE(){if(this.initiator){if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}else{if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}}readE(e,t=0){if(this.re)throw new Error("remote ephemeral public key is already set");if(e.byteLength<t+32)throw new Error("message is not long enough");this.re=e.sublist(t,t+32),this.ss.mixHash(this.re)}readS(e,t=0){if(this.rs)throw new Error("remote static public key is already set");let n=32+(this.ss.cs.hasKey()?16:0);if(e.byteLength<t+n)throw new Error("message is not long enough");let o=e.sublist(t,t+n);return this.rs=this.ss.decryptAndHash(o),n}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}},Lc=class extends Om{writeMessageA(e){return new le(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new le(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new le(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Us(`handshake stage 0 validation fail: ${t.message}`)}}readMessageB(e){try{this.readE(e),this.readEE();let t=this.readS(e,32);return this.readES(),this.ss.decryptAndHash(e.sublist(32+t))}catch(t){throw new Us(`handshake stage 1 validation fail: ${t.message}`)}}readMessageC(e){try{let t=this.readS(e);return this.readSE(),this.ss.decryptAndHash(e.sublist(t))}catch(t){throw new Us(`handshake stage 2 validation fail: ${t.message}`)}}};function fT(r,e){if(e.length<=32){let t=se(32);return t.set(e),t}else return r.hash(e)}var vd;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let i of t.webtransportCerthashes)n.uint32(10),n.bytes(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={webtransportCerthashes:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let s=t.uint32();switch(s>>>3){case 1:{o.webtransportCerthashes.push(t.bytes());break}default:{t.skipType(s&7);break}}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(vd||(vd={}));var Dc;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.identityKey!=null&&t.identityKey.byteLength>0&&(n.uint32(10),n.bytes(t.identityKey)),t.identitySig!=null&&t.identitySig.byteLength>0&&(n.uint32(18),n.bytes(t.identitySig)),t.extensions!=null&&(n.uint32(34),vd.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={identityKey:se(0),identitySig:se(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let s=t.uint32();switch(s>>>3){case 1:{o.identityKey=t.bytes();break}case 2:{o.identitySig=t.bytes();break}case 4:{o.extensions=vd.codec().decode(t,t.uint32());break}default:{t.skipType(s&7);break}}}return o})),e),r.encode=t=>ne(t,r.codec()),r.decode=t=>re(t,r.codec())})(Dc||(Dc={}));async function Mm(r,e,t){let n=await r.sign(r9(e));return Dc.encode({identityKey:Lt(r.publicKey),identitySig:n,extensions:t})}async function Um(r,e,t){try{let n=Dc.decode(r),o=rt(n.identityKey);if(t?.equals(o)===!1)throw new Error(`Payload identity key ${o} does not match expected remote identity key ${t}`);if(!e)throw new Error("Remote static does not exist");let i=r9(e);if(!await o.verify(i,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new ll(n.message)}}function r9(r){let e=M("noise-libp2p-static-key:");return r instanceof Uint8Array?Pe([e,r],e.length+r.length):(r.prepend(e),r)}async function n9(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,d=await Mm(i,a.publicKey,l),u=new Lc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});Rm(u.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(u.writeMessageA(Ii),e),t.trace("Stage 0 - Initiator finished sending first message."),Lm(u.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let f=u.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),Dm(u.re,t),t9(u.rs,t),t.trace("Initiator going to check remote's signature...");let h=await Um(f,u.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(u.writeMessageC(d),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[p,m]=u.ss.split();return Nm(p,m,t),{payload:h,encrypt:g=>p.encryptWithAd(Ii,g),decrypt:(g,y)=>m.decryptWithAd(Ii,g,y)}}async function o9(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,d=await Mm(i,a.publicKey,l),u=new Lc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});Rm(u.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),u.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),Dm(u.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(u.writeMessageB(d),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),Lm(u.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let f=u.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let h=await Um(f,u.rs,c),[p,m]=u.ss.split();return Nm(p,m,t),{payload:h,encrypt:g=>m.encryptWithAd(Ii,g),decrypt:(g,y)=>p.decryptWithAd(Ii,g,y)}}var s9=16;function a9(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65519){let i=o+65519;i>n.length&&(i=n.length);let s;n instanceof Uint8Array?s=r.encrypt(n.subarray(o,i)):s=r.encrypt(n.sublist(o,i)),e?.encryptedPackets.increment(),yield new le(Ms(s.byteLength),s)}}}function c9(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65535){let i=o+65535;if(i>n.length&&(i=n.length),i-s9<o)throw new Error("Invalid chunk");let s=n.sublist(o,i),a=n.subarray(o,i-s9);try{let c=r.decrypt(s,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var Sd=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:i,prologueBytes:s}=t,{metrics:a}=e;this.components=e;let c=i??Z7;this.crypto=J7(c),this.extensions=o,this.metrics=a?e9(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??se(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Ie]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=Tn(e,{lengthEncoder:Ms,lengthDecoder:Rc,maxDataLength:65535}),o=await this.performHandshakeInitiator(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=rt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:En(s)}}async secureInbound(e,t){let n=Tn(e,{lengthEncoder:Ms,lengthDecoder:Rc,maxDataLength:65535}),o=await this.performHandshakeResponder(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=rt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:En(s)}}async performHandshakeInitiator(e,t,n,o){let i;try{i=await n9({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return i}async performHandshakeResponder(e,t,n,o){let i;try{i=await o9({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return i}async createSecureConnection(e,t){let[n,o]=B7(),i=e.unwrap();return await Je(n,a9(t,this.metrics),i,s=>Xt(s,{lengthDecoder:Rc}),c9(t,this.metrics),n),o}};function $s(r={}){return e=>new Sd(e,r)}function Ad(r){if(r!=null){if(typeof r[Symbol.iterator]=="function")return r[Symbol.iterator]();if(typeof r[Symbol.asyncIterator]=="function")return r[Symbol.asyncIterator]();if(typeof r.next=="function")return r}throw new Error("argument is not an iterator or iterable")}var sn=class extends Error{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e),this.name="InvalidFrameError"}},Vs=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},Ks=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},Id=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},_d=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},Td=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},kd=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},Hs=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var l9=new Set([sn.name,Vs.name,Ks.name,_d.name,Td.name,kd.name,Hs.name]),Bc=256*1024,u9=16*1024*1024;var d9={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Bc,maxStreamWindowSize:u9,maxMessageSize:64*1024};function f9(r){if(r.keepAliveInterval<=0)throw new C("keep-alive interval must be positive");if(r.maxInboundStreams<0)throw new C("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams<0)throw new C("max outbound streams must be larger or equal 0");if(r.initialStreamWindowSize<Bc)throw new C("InitialStreamWindowSize must be larger or equal 256 kB");if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new C("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.maxStreamWindowSize>2**32-1)throw new C("MaxStreamWindowSize must be less than equal MAX_UINT32");if(r.maxMessageSize<1024)throw new C("MaxMessageSize must be greater than a kilobyte")}var Ze;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Ze||(Ze={}));var ze;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(ze||(ze={}));var cX=Object.values(ze).filter(r=>typeof r!="string"),h9=0,Nr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Nr||(Nr={}));var Mo=12;var p9=2**24;function hT(r){if(r[0]!==h9)throw new sn("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*p9+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*p9+(r[9]<<16)+(r[10]<<8)+r[11]}}var Cd=class{source;buffer;frameInProgress;constructor(e){this.source=pT(e),this.buffer=new le,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:o}=t;n===Ze.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new Id("decoding frame already in progress");if(this.buffer.length<Mo)return;let e=hT(this.buffer.subarray(0,Mo));return this.buffer.consume(Mo),e}async readBytes(e){if(this.buffer.length<e){for await(let n of this.source)if(this.buffer.append(n),this.buffer.length>=e)break}let t=this.buffer.sublist(0,e);return this.buffer.consume(e),this.frameInProgress=!1,t}};function pT(r){if(r[Symbol.iterator]!==void 0){let e=r[Symbol.iterator]();return e.return=void 0,{[Symbol.iterator](){return e}}}else if(r[Symbol.asyncIterator]!==void 0){let e=r[Symbol.asyncIterator]();return e.return=void 0,{[Symbol.asyncIterator](){return e}}}else throw new Error("a source must be either an iterable or an async iterable")}function Fm(r){let e=new Uint8Array(Mo);return e[1]=r.type,e[2]=r.flag>>>8,e[3]=r.flag,e[4]=r.streamID>>>24,e[5]=r.streamID>>>16,e[6]=r.streamID>>>8,e[7]=r.streamID,e[8]=r.length>>>24,e[9]=r.length>>>16,e[10]=r.length>>>8,e[11]=r.length,e}function m9(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function Pd(r,e){let t=Ad(r).return?.();m9(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var mT=5e3;function $m(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var kn=class{id;direction;timeline;protocol;metadata;source;status;readStatus;writeStatus;log;sinkController;sinkEnd;closed;endErr;streamSource;onEnd;onCloseRead;onCloseWrite;onReset;onAbort;sendCloseWriteTimeout;sendingData;constructor(e){this.sinkController=new AbortController,this.sinkEnd=J(),this.closed=J(),this.log=e.log,this.status="open",this.readStatus="ready",this.writeStatus="ready",this.id=e.id,this.metadata=e.metadata??{},this.direction=e.direction,this.timeline={open:Date.now()},this.sendCloseWriteTimeout=e.sendCloseWriteTimeout??mT,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=kt({onEnd:t=>{t!=null?this.log.trace("source ended with error",t):this.log.trace("source ended"),this.onSourceEnd(t)}}),this.sink=this.sink.bind(this)}async sink(e){if(this.writeStatus!=="ready")throw new Yo(`writable end state is "${this.writeStatus}" not "ready"`);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);$m(o)&&await o}let n=()=>{Pd(e,this.log)};try{this.sinkController.signal.addEventListener("abort",n),this.log.trace("sink reading from source");for await(let o of e){o=o instanceof Uint8Array?new le(o):o;let i=this.sendData(o,t);$m(i)&&(this.sendingData=J(),await i,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.log.trace("closing gracefully"),this.status="closing",await Ce(Promise.all([this.closeWrite(e),this.closeRead(e),this.closed.promise]),e?.signal),this.status="closed",this.log.trace("closed gracefully")}async closeRead(e={}){if(this.readStatus==="closing"||this.readStatus==="closed")return;this.log.trace('closing readable end of stream with starting read status "%s"',this.readStatus);let t=this.readStatus;this.readStatus="closing",this.status!=="reset"&&this.status!=="aborted"&&this.timeline.closeRead==null&&(this.log.trace("send close read to remote"),await this.sendCloseRead(e)),t==="ready"&&(this.log.trace("ending internal source queue with %d queued bytes",this.streamSource.readableLength),this.streamSource.end()),this.log.trace("closed readable end of stream")}async closeWrite(e={}){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.log.trace('closing writable end of stream with starting write status "%s"',this.writeStatus),this.writeStatus==="ready"&&(this.log.trace("sink was never sunk, sink an empty array"),await Ce(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await Ce(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await Ce(this.sinkEnd.promise,e.signal)),this.writeStatus="closed",this.log.trace("closed writable end of stream"))}abort(e){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;this.log("abort with error",e),this.log("try to send reset to remote");let t=this.sendReset();$m(t)&&t.catch(n=>{this.log.error("error sending reset message",n)}),this.status="aborted",this.timeline.abort=Date.now(),this._closeSinkAndSource(e),this.onAbort?.(e)}reset(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;let e=new fl("stream reset");this.status="reset",this.timeline.reset=Date.now(),this._closeSinkAndSource(e),this.onReset?.()}_closeSinkAndSource(e){this._closeSink(e),this._closeSource(e)}_closeSink(e){this.writeStatus==="writing"&&(this.log.trace("end sink source"),this.sinkController.abort()),this.onSinkEnd(e)}_closeSource(e){this.readStatus!=="closing"&&this.readStatus!=="closed"&&(this.log.trace("ending source with %d bytes to be read by consumer",this.streamSource.readableLength),this.readStatus="closing",this.streamSource.end(e))}remoteCloseWrite(){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("received remote close write but local source is already closed");return}this.log.trace("remote close write"),this._closeSource()}remoteCloseRead(){if(this.writeStatus==="closing"||this.writeStatus==="closed"){this.log("received remote close read but local sink is already closed");return}this.log.trace("remote close read"),this._closeSink()}destroy(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset"){this.log("received destroy but we are already closed");return}this.log.trace("stream destroyed"),this._closeSinkAndSource()}sourcePush(e){this.streamSource.push(e)}sourceReadableLength(){return this.streamSource.readableLength}};var Br;(function(r){r[r.Init=0]="Init",r[r.SYNSent=1]="SYNSent",r[r.SYNReceived=2]="SYNReceived",r[r.Established=3]="Established",r[r.Finished=4]="Finished"})(Br||(Br={}));var Rd=class extends kn{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Br.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=Bc,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=bi(this.source,()=>{this.sendWindowUpdate()})}async sendNewStream(){}async sendData(e,t={}){for(e=e.sublist();e.byteLength!==0;){if(this.sendWindowCapacity===0&&(this.log?.trace("wait for send window capacity, status %s",this.status),await this.waitForSendWindowCapacity(t),this.status==="closed"||this.status==="aborted"||this.status==="reset")){this.log?.trace("%s while waiting for send window capacity",this.status);return}let n=Math.min(this.sendWindowCapacity,this.config.maxMessageSize-Mo,e.length),o=this.getSendFlags();this.sendFrame({type:Ze.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:Ze.WindowUpdate,flag:ze.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|ze.FIN;this.sendFrame({type:Ze.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,o=()=>{this.status==="open"||this.status==="closing"?n(new ht("Stream aborted")):t()};e.signal?.addEventListener("abort",o);try{await new Promise((i,s)=>{this.sendWindowCapacityUpdate=()=>{i()},n=s,t=i})}finally{e.signal?.removeEventListener("abort",o)}}handleWindowUpdate(e){this.log?.trace("stream received window update id=%s",this._id),this.processFlags(e.flag);let t=this.sendWindowCapacity;this.sendWindowCapacity+=e.length,t===0&&e.length>0&&this.sendWindowCapacityUpdate?.()}async handleData(e,t){if(this.log?.trace("stream received data id=%s",this._id),this.processFlags(e.flag),this.recvWindowCapacity<e.length)throw new Hs("Receive window exceeded");let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&ze.ACK)===ze.ACK&&this.state===Br.SYNSent&&(this.state=Br.Established),(e&ze.FIN)===ze.FIN&&this.remoteCloseWrite(),(e&ze.RST)===ze.RST&&this.reset()}getSendFlags(){switch(this.state){case Br.Init:return this.state=Br.SYNSent,ze.SYN;case Br.SYNReceived:return this.state=Br.Established,ze.ACK;default:return 0}}sendWindowUpdate(){let e=this.getSendFlags(),t=Date.now(),n=this.getRTT();if(e===0&&n>-1&&t-this.epochStart<n*4&&(this.recvWindow=Math.min(this.recvWindow*2,this.config.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:Ze.WindowUpdate,flag:e,streamID:this._id,length:o})}};var g9="/yamux/1.0.0",gT=500,Ld=class{protocol=g9;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Ie]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new Vm(this._components,{...this._init,...e})}},Vm=class{protocol=g9;source;sink;config;log;logger;closeController;nextStreamID;_streams;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;onIncomingStream;onStreamEnd;constructor(e,t){this.client=t.direction==="outbound",this.config={...d9,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),f9(this.config),this.closeController=new AbortController,$(1/0,this.closeController.signal),this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=kt({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=Ad(n);if(a.return!=null){let c=a.return();yT(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},i,s;try{let a=new Cd(n);try{this.closeController.signal.addEventListener("abort",o);for await(let c of a.emitFrames())await this.handleFrame(c.header,c.readData)}finally{this.closeController.signal.removeEventListener("abort",o)}i=Nr.NormalTermination}catch(a){l9.has(a.name)?(this.log?.error("protocol error in sink",a),i=Nr.ProtocolError):(this.log?.error("internal error in sink",a),i=Nr.InternalError),s=a}this.log?.trace("muxer sink ended"),s!=null?this.abort(s,i):await this.close({reason:i})},this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log?.trace("muxer created"),this.config.enableKeepAlive&&this.keepAliveLoop().catch(n=>this.log?.error("keepalive error: %s",n)),this.ping().catch(n=>this.log?.error("ping error: %s",n))}get streams(){return Array.from(this._streams.values())}newStream(e){if(this.remoteGoAway!==void 0)throw new fn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new fn("Muxer closed locally");let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new lo("max outbound streams exceeded");this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,Br.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new fn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new fn("Muxer closed locally");if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,i)=>{let s=()=>{i(new fn("Muxer closed locally"))};this.closeController.signal.addEventListener("abort",s,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",s),o()}}),resolve:e};let t=Date.now();this.sendPing(this.activePing.id);try{await this.activePing.promise}finally{delete this.activePing}let n=Date.now();this.rtt=n-t}else await this.activePing.promise;return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.closeController.signal.aborted)return;let t=e?.reason??Nr.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(gT);$(1/0,n),e={...e,signal:n}}try{await Promise.all([...this._streams.values()].map(async n=>n.close(e))),this.sendGoAway(t),this._closeMuxer()}catch(n){this.abort(n)}}abort(e,t){if(!this.closeController.signal.aborted){t=t??Nr.InternalError,this.log?.error("muxer abort reason=%s error=%s",t,e);for(let n of this._streams.values())n.abort(e);this.sendGoAway(t),this._closeMuxer()}}isClosed(){return this.closeController.signal.aborted}_closeMuxer(){this.closeController.abort(),this.source.end()}_newStream(e,t,n,o){if(this._streams.get(e)!=null)throw new C("Stream already exists with that id");let i=new Rd({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(i)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return i}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:o,length:i}=e;if(this.log?.trace("received frame %o",e),n===0)switch(o){case Ze.Ping:{this.handlePing(e);return}case Ze.GoAway:{this.handleGoAway(i);return}default:throw new sn("Invalid frame type")}else switch(e.type){case Ze.Data:case Ze.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new sn("Invalid frame type")}}handlePing(e){if(e.flag===ze.SYN)this.log?.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,ze.ACK);else if(e.flag===ze.ACK)this.log?.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new sn("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new Vs("ping not requested");if(this.activePing.id!==e)throw new Ks("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Nr[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:o,type:i}=e;(o&ze.SYN)===ze.SYN&&this.incomingStream(n);let s=this._streams.get(n);if(s===void 0){if(i===Ze.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.trace("frame for missing stream id=%s",n);return}switch(i){case Ze.WindowUpdate:{s.handleWindowUpdate(e);return}case Ze.Data:{if(t===void 0)throw new Error("unreachable");await s.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new C("Both endpoints are clients");if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Ze.WindowUpdate,flag:ze.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Ze.WindowUpdate,flag:ze.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,Br.SYNReceived,"inbound");this.numInboundStreams++,this._streams.set(e,t),this.onIncomingStream?.(t)}sendFrame(e,t){if(this.log?.trace("sending frame %o",e),e.type===Ze.Data){if(t===void 0)throw new sn("Invalid frame");this.source.push(new le(Fm(e),t))}else this.source.push(Fm(e))}sendPing(e,t=ze.SYN){t===ze.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:Ze.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Nr.NormalTermination){this.log?.("sending GoAway reason=%s",Nr[e]),this.localGoAway=e,this.sendFrame({type:Ze.GoAway,flag:0,streamID:0,length:e})}};function yT(r){return r!=null&&typeof r.then=="function"}function y9(r={}){return e=>new Ld(e,r)}var Dd=globalThis.CustomEvent??Event;async function*vr(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered==null?!1:e.ordered,o=new EventTarget,i=[],s=J(),a=J(),c=!1,l,d=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(i.length===t&&(s=J(),await s.promise),d)break;let m={done:!1};i.push(m),p().then(g=>{m.done=!0,m.ok=!0,m.value=g,o.dispatchEvent(new Dd("task-complete"))},g=>{m.done=!0,m.err=g,o.dispatchEvent(new Dd("task-complete"))})}c=!0,o.dispatchEvent(new Dd("task-complete"))}catch(p){l=p,o.dispatchEvent(new Dd("task-complete"))}});function u(){return n?i[0]?.done:!!i.find(p=>p.done)}function*f(){for(;i.length>0&&i[0].done;){let p=i[0];if(i.shift(),p.ok)yield p.value;else throw d=!0,s.resolve(),p.err;s.resolve()}}function*h(){for(;u();)for(let p=0;p<i.length;p++)if(i[p].done){let m=i[p];if(i.splice(p,1),p--,m.ok)yield m.value;else throw d=!0,s.resolve(),m.err;s.resolve()}}for(;;){if(u()||(a=J(),await a.promise),l!=null)throw l;if(n?yield*f():yield*h(),c&&i.length===0)break}}var w9="libp2p",b9="autonat",x9="1.0.0";var xe;(function(r){let e;(function(l){l.DIAL="DIAL",l.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(l){l[l.DIAL=0]="DIAL",l[l.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),function(l){l.codec=()=>He(t)}(e=r.MessageType||(r.MessageType={}));let n;(function(l){l.OK="OK",l.E_DIAL_ERROR="E_DIAL_ERROR",l.E_DIAL_REFUSED="E_DIAL_REFUSED",l.E_BAD_REQUEST="E_BAD_REQUEST",l.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(l){l[l.OK=0]="OK",l[l.E_DIAL_ERROR=100]="E_DIAL_ERROR",l[l.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",l[l.E_BAD_REQUEST=200]="E_BAD_REQUEST",l[l.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(o||(o={})),function(l){l.codec=()=>He(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let d;l.codec=()=>(d==null&&(d=oe((u,f,h={})=>{if(h.lengthDelimited!==!1&&f.fork(),u.id!=null&&(f.uint32(10),f.bytes(u.id)),u.addrs!=null)for(let p of u.addrs)f.uint32(18),f.bytes(p);h.lengthDelimited!==!1&&f.ldelim()},(u,f,h={})=>{let p={addrs:[]},m=f==null?u.len:u.pos+f;for(;u.pos<m;){let g=u.uint32();switch(g>>>3){case 1:{p.id=u.bytes();break}case 2:{if(h.limits?.addrs!=null&&p.addrs.length===h.limits.addrs)throw new Me('Decode error - map field "addrs" had too many elements');p.addrs.push(u.bytes());break}default:{u.skipType(g&7);break}}}return p})),d),l.encode=u=>ne(u,l.codec()),l.decode=(u,f)=>re(u,l.codec(),f)})(i=r.PeerInfo||(r.PeerInfo={}));let s;(function(l){let d;l.codec=()=>(d==null&&(d=oe((u,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),u.peer!=null&&(f.uint32(10),r.PeerInfo.codec().encode(u.peer,f)),h.lengthDelimited!==!1&&f.ldelim()},(u,f,h={})=>{let p={},m=f==null?u.len:u.pos+f;for(;u.pos<m;){let g=u.uint32();switch(g>>>3){case 1:{p.peer=r.PeerInfo.codec().decode(u,u.uint32(),{limits:h.limits?.peer});break}default:{u.skipType(g&7);break}}}return p})),d),l.encode=u=>ne(u,l.codec()),l.decode=(u,f)=>re(u,l.codec(),f)})(s=r.Dial||(r.Dial={}));let a;(function(l){let d;l.codec=()=>(d==null&&(d=oe((u,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),u.status!=null&&(f.uint32(8),r.ResponseStatus.codec().encode(u.status,f)),u.statusText!=null&&(f.uint32(18),f.string(u.statusText)),u.addr!=null&&(f.uint32(26),f.bytes(u.addr)),h.lengthDelimited!==!1&&f.ldelim()},(u,f,h={})=>{let p={},m=f==null?u.len:u.pos+f;for(;u.pos<m;){let g=u.uint32();switch(g>>>3){case 1:{p.status=r.ResponseStatus.codec().decode(u);break}case 2:{p.statusText=u.string();break}case 3:{p.addr=u.bytes();break}default:{u.skipType(g&7);break}}}return p})),d),l.encode=u=>ne(u,l.codec()),l.decode=(u,f)=>re(u,l.codec(),f)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=oe((l,d,u={})=>{u.lengthDelimited!==!1&&d.fork(),l.type!=null&&(d.uint32(8),r.MessageType.codec().encode(l.type,d)),l.dial!=null&&(d.uint32(18),r.Dial.codec().encode(l.dial,d)),l.dialResponse!=null&&(d.uint32(26),r.DialResponse.codec().encode(l.dialResponse,d)),u.lengthDelimited!==!1&&d.ldelim()},(l,d,u={})=>{let f={},h=d==null?l.len:l.pos+d;for(;l.pos<h;){let p=l.uint32();switch(p>>>3){case 1:{f.type=r.MessageType.codec().decode(l);break}case 2:{f.dial=r.Dial.codec().decode(l,l.uint32(),{limits:u.limits?.dial});break}case 3:{f.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:u.limits?.dialResponse});break}default:{l.skipType(p&7);break}}}return f})),c),r.encode=l=>ne(l,r.codec()),r.decode=(l,d)=>re(l,r.codec(),d)})(xe||(xe={}));var Km=4,Nd=class{components;startupDelay;refreshInterval;protocol;timeout;maxInboundStreams;maxOutboundStreams;verifyAddressTimeout;started;log;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:autonat"),this.started=!1,this.protocol=`/${t.protocolPrefix??w9}/${b9}/${x9}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??1,this.maxOutboundStreams=t.maxOutboundStreams??1,this.startupDelay=t.startupDelay??5e3,this.refreshInterval=t.refreshInterval??6e4,this._verifyExternalAddresses=this._verifyExternalAddresses.bind(this)}[Symbol.toStringTag]="@libp2p/autonat";isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.startupDelay),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),clearTimeout(this.verifyAddressTimeout),this.started=!1}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout),n=()=>{e.stream.abort(new ht)};t.addEventListener("abort",n,{once:!0}),$(1/0,t);try{let o=this;await Je(e.stream,i=>Xt(i),async function*(i){let s=await kc(i);if(s==null){o.log("no message received"),yield xe.encode({type:xe.MessageType.DIAL_RESPONSE,dialResponse:{status:xe.ResponseStatus.E_BAD_REQUEST,statusText:"No message was sent"}});return}let a;try{a=xe.decode(s)}catch(c){o.log.error("could not decode message",c),yield xe.encode({type:xe.MessageType.DIAL_RESPONSE,dialResponse:{status:xe.ResponseStatus.E_BAD_REQUEST,statusText:"Could not decode message"}});return}yield xe.encode(await o.handleAutonatMessage(a,e.connection,{signal:t}))},i=>Yt(i),e.stream)}catch(o){this.log.error("error handling incoming autonat stream",o)}finally{t.removeEventListener("abort",n)}}_verifyExternalAddresses(){this.verifyExternalAddresses().catch(e=>{this.log.error("error verifying external address",e)})}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(u=>u.toOptions().host),i=e.dial;if(i==null)return this.log.error("dial was missing from message"),{type:xe.MessageType.DIAL_RESPONSE,dialResponse:{status:xe.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let s,a=i.peer;if(a?.id==null)return this.log.error("PeerId missing from message"),{type:xe.MessageType.DIAL_RESPONSE,dialResponse:{status:xe.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let u=ke(a.id);s=mt(u)}catch(u){return this.log.error("invalid PeerId",u),{type:xe.MessageType.DIAL_RESPONSE,dialResponse:{status:xe.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}}}if(this.log("incoming request from %p",s),!t.remotePeer.equals(s))return this.log("target peer %p did not equal sending peer %p",s,t.remotePeer),{type:xe.MessageType.DIAL_RESPONSE,dialResponse:{status:xe.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(u=>Q(u)).filter(u=>{let f=u.toOptions().host===t.remoteAddr.toOptions().host;return this.log.trace("request to dial %a was sent from %a is same host %s",u,t.remoteAddr,f),f}).filter(u=>{let f=u.toOptions().host,h=!(Bt(f)??!1);return this.log.trace("host %s was public %s",f,h),h}).filter(u=>{let f=u.toOptions().host,h=!o.includes(f);return this.log.trace("host %s was not our host %s",f,h),h}).filter(u=>{let f=!!this.components.transportManager.dialTransportForMultiaddr(u);return this.log.trace("transport for %a is supported %s",u,f),f}).map(u=>(u.getPeerId()==null&&(u=u.encapsulate(`/p2p/${s.toString()}`)),u));if(c.length===0)return this.log("no valid multiaddrs for %p in message",s),{type:xe.MessageType.DIAL_RESPONSE,dialResponse:{status:xe.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(u=>u.toString()).join(", "),s);let l="",d=c[0];for await(let u of c){let f;d=u;try{if(f=await this.components.connectionManager.openConnection(u,n),!f.remoteAddr.equals(u))throw this.log.error("tried to dial %a but dialed %a",u,f.remoteAddr),new Error("Unexpected remote address");return this.log("Success %p",s),{type:xe.MessageType.DIAL_RESPONSE,dialResponse:{status:xe.ResponseStatus.OK,addr:f.remoteAddr.decapsulateCode(ee("p2p").code).bytes}}}catch(h){this.log("could not dial %p",s,h),l=h.message}finally{f!=null&&await f.close()}}return{type:xe.MessageType.DIAL_RESPONSE,dialResponse:{status:xe.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:d.bytes}}}async verifyExternalAddresses(){if(clearTimeout(this.verifyAddressTimeout),!this.isStarted())return;let e=this.components.addressManager,t=e.getObservedAddrs().filter(i=>{let s=i.toOptions();return!(Bt(s.host)??!1)});if(t.length===0){this.log("no public addresses found, not requesting verification"),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval);return}let n=AbortSignal.timeout(this.timeout);$(1/0,n);let o=this;try{this.log("verify multiaddrs %s",t.map(l=>l.toString()).join(", "));let i=xe.encode({type:xe.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:t.map(l=>l.bytes)}}}),s={},a=[],c=async l=>{let d=()=>{};try{this.log("asking %p to verify multiaddr",l.id);let u=await o.components.connectionManager.openConnection(l.id,{signal:n}),f=await u.newStream(this.protocol,{signal:n});d=()=>{f.abort(new ht)},n.addEventListener("abort",d,{once:!0});let h=await Je([i],m=>Yt(m),f,m=>Xt(m),async m=>kc(m));if(h==null){this.log("no response received from %p",u.remotePeer);return}let p=xe.decode(h);if(p.type!==xe.MessageType.DIAL_RESPONSE||p.dialResponse==null){this.log("invalid autonat response from %p",u.remotePeer);return}if(p.dialResponse.status===xe.ResponseStatus.OK){let m=u.remoteAddr.toOptions(),g;if(m.family===4)g=m.host.split(".")[0];else if(m.family===6)g=m.host.split(":")[0];else{this.log('remote address "%s" was not IP4 or IP6?',m.host);return}if(a.includes(g)){this.log("already have response from network segment %d - %s",g,m.host);return}a.push(g)}return p.dialResponse}catch(u){this.log.error("error asking remote to verify multiaddr",u)}finally{n.removeEventListener("abort",d)}};for await(let l of vr(jt(this.components.randomWalk.walk({signal:n}),d=>async()=>c(d)),{concurrency:Km}))try{if(l==null)continue;let d=l.addr==null?t[0]:Q(l.addr);if(this.log("autonat response for %a is %s",d,l.status),l.status===xe.ResponseStatus.E_BAD_REQUEST||l.status===xe.ResponseStatus.E_DIAL_REFUSED||l.addr==null&&t.length>1)continue;if(!t.some(f=>f.equals(d))){this.log("peer reported %a as %s but it was not in our observed address list",d,l.status);continue}let u=d.toString();if(s[u]==null&&(s[u]={success:0,failure:0}),l.status===xe.ResponseStatus.OK?s[u].success++:l.status===xe.ResponseStatus.E_DIAL_ERROR&&s[u].failure++,s[u].success===Km){this.log("%a is externally dialable",d),e.confirmObservedAddr(d);return}if(s[u].failure===Km){this.log("%a is not externally dialable",d),e.removeObservedAddr(d);return}}catch(d){this.log.error("could not verify external address",d)}}finally{this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval)}}};function E9(r={}){return e=>new Nd(e,r)}var ST=W("dns4"),AT=W("dns6"),IT=W("dnsaddr"),_i=nt(W("dns"),IT,ST,AT),Md=nt(W("ip4"),W("ip6")),qs=nt(ie(Md,W("tcp")),ie(_i,W("tcp"))),Ud=ie(Md,W("udp")),_T=ie(Ud,W("utp")),TT=ie(Ud,W("quic")),kT=ie(Ud,W("quic-v1")),Hm=nt(ie(qs,W("ws")),ie(_i,W("ws"))),Bd=nt(ie(Hm,W("p2p")),Hm),qm=nt(ie(qs,W("wss")),ie(_i,W("wss")),ie(qs,W("tls"),W("ws")),ie(_i,W("tls"),W("ws"))),Od=nt(ie(qm,W("p2p")),qm),Wm=nt(ie(qs,W("http")),ie(Md,W("http")),ie(_i,W("http"))),zm=nt(ie(qs,W("https")),ie(Md,W("https")),ie(_i,W("https"))),v9=ie(Ud,W("webrtc-direct"),W("certhash")),I9=nt(ie(v9,W("p2p")),v9),S9=ie(kT,W("webtransport"),W("certhash"),W("certhash")),_9=nt(ie(S9,W("p2p")),S9),T9=nt(ie(Bd,W("p2p-webrtc-star"),W("p2p")),ie(Od,W("p2p-webrtc-star"),W("p2p")),ie(Bd,W("p2p-webrtc-star")),ie(Od,W("p2p-webrtc-star"))),mj=nt(ie(Bd,W("p2p-websocket-star"),W("p2p")),ie(Od,W("p2p-websocket-star"),W("p2p")),ie(Bd,W("p2p-websocket-star")),ie(Od,W("p2p-websocket-star"))),k9=nt(ie(Wm,W("p2p-webrtc-direct"),W("p2p")),ie(zm,W("p2p-webrtc-direct"),W("p2p")),ie(Wm,W("p2p-webrtc-direct")),ie(zm,W("p2p-webrtc-direct"))),Ti=nt(Hm,qm,Wm,zm,T9,k9,qs,_T,TT,_i,I9,_9),gj=nt(ie(Ti,W("p2p-stardust"),W("p2p")),ie(Ti,W("p2p-stardust"))),Uo=nt(ie(Ti,W("p2p")),T9,k9,I9,_9,W("p2p")),A9=nt(ie(Uo,W("p2p-circuit"),Uo),ie(Uo,W("p2p-circuit")),ie(W("p2p-circuit"),Uo),ie(Ti,W("p2p-circuit")),ie(W("p2p-circuit"),Ti),W("p2p-circuit")),C9=()=>nt(ie(A9,C9),A9),oo=C9(),P9=nt(ie(oo,Uo,oo),ie(Uo,oo),ie(oo,Uo),oo,Uo);var yj=nt(ie(oo,W("webrtc"),W("p2p")),ie(oo,W("webrtc")),ie(Ti,W("webrtc"),W("p2p")),ie(Ti,W("webrtc")),W("webrtc"));function R9(r){function e(t){let n;try{n=Q(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function ie(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(o=>(n=typeof o=="function"?o().partialMatch(t):o.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:R9(e),partialMatch:e}}function nt(...r){function e(n){let o=null;return r.some(i=>{let s=typeof i=="function"?i().partialMatch(n):i.partialMatch(n);return s!=null?(o=s,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:R9(e),partialMatch:e}}function W(r){let e=r;function t(o){let i;try{i=Q(o)}catch{return!1}let s=i.protoNames();return s.length===1&&s[0]===e}function n(o){return o.length===0?null:o[0]===e?o.slice(1):null}return{toString:function(){return e},matches:t,partialMatch:n}}var CT="bootstrap",PT=50,RT=1e3,Gm=class extends ge{static tag="bootstrap";log;timer;list;timeout;components;_init;constructor(e,t={list:[]}){if(t.list==null||t.list.length===0)throw new Error("Bootstrap requires a list of peer addresses");super(),this.components=e,this.log=e.logger.forComponent("libp2p:bootstrap"),this.timeout=t.timeout??RT,this.list=[];for(let n of t.list){if(!P9.matches(n)){this.log.error("Invalid multiaddr");continue}let o=Q(n),i=o.getPeerId();if(i==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let s={id:Re(i),multiaddrs:[o]};this.list.push(s)}this._init=t}[Qo]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Ie]=["@libp2p/peer-discovery"];isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error(e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??CT]:{value:this._init.tagValue??PT,ttl:this._init.tagTTL}},multiaddrs:e.multiaddrs}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e}),this.components.connectionManager.openConnection(e.id).catch(t=>{this.log.error("could not dial bootstrap peer %p",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function L9(r){return e=>new Gm(e,r)}var Oc;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&t.payload.byteLength>0&&(n.uint32(26),n.bytes(t.payload)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:se(0),payloadType:se(0),payload:se(0),signature:se(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=t.bytes();break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Oc||(Oc={}));var Fd=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var Sr=class r{static createFromProtobuf=async e=>{let t=Oc.decode(e),n=rt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,i=e.marshal(),s=D9(n,o,i),a=await t.sign(s.subarray());return new r({publicKey:t.publicKey,payloadType:o,payload:i,signature:a})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new Fd("Envelope signature is not valid for the given domain");return n};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:o,signature:i}=e;this.publicKey=t,this.payloadType=n,this.payload=o,this.signature=i}marshal(){return this.marshaled==null&&(this.marshaled=Oc.encode({publicKey:Lt(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return te(this.marshal(),e.marshal())}async validate(e){let t=D9(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},D9=(r,e,t)=>{let n=M(r),o=Ke(n.byteLength),i=Ke(e.length),s=Ke(t.length);return new le(o,n,i,e,s,t)};function N9(r,e){let t=(n,o)=>n.toString().localeCompare(o.toString());return r.length!==e.length?!1:(e.sort(t),r.sort(t).every((n,o)=>e[o].equals(n)))}var B9="libp2p-peer-record",O9=Uint8Array.from([3,1]);var Mc;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=oe((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.multiaddr!=null&&i.multiaddr.byteLength>0&&(s.uint32(10),s.bytes(i.multiaddr)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={multiaddr:se(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let d=i.uint32();switch(d>>>3){case 1:{c.multiaddr=i.bytes();break}default:{i.skipType(d&7);break}}}return c})),o),n.encode=i=>ne(i,n.codec()),n.decode=(i,s)=>re(i,n.codec(),s)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=oe((n,o,i={})=>{if(i.lengthDelimited!==!1&&o.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(o.uint32(10),o.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(o.uint32(16),o.uint64(n.seq)),n.addresses!=null)for(let s of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(s,o);i.lengthDelimited!==!1&&o.ldelim()},(n,o,i={})=>{let s={peerId:se(0),seq:0n,addresses:[]},a=o==null?n.len:n.pos+o;for(;n.pos<a;){let c=n.uint32();switch(c>>>3){case 1:{s.peerId=n.bytes();break}case 2:{s.seq=n.uint64();break}case 3:{if(i.limits?.addresses!=null&&s.addresses.length===i.limits.addresses)throw new Me('Decode error - map field "addresses" had too many elements');s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32(),{limits:i.limits?.addresses$}));break}default:{n.skipType(c&7);break}}}return s})),t),r.encode=n=>ne(n,r.codec()),r.decode=(n,o)=>re(n,r.codec(),o)})(Mc||(Mc={}));var zt=class r{static createFromProtobuf=e=>{let t=Mc.decode(e),n=mt(ke(t.peerId)),o=(t.addresses??[]).map(s=>Q(s.multiaddr)),i=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:i})};static DOMAIN=B9;static CODEC=O9;peerId;multiaddrs;seqNumber;domain=r.DOMAIN;codec=r.CODEC;marshaled;constructor(e){let{peerId:t,multiaddrs:n,seqNumber:o}=e;this.peerId=t,this.multiaddrs=n??[],this.seqNumber=o??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=Mc.encode({peerId:this.peerId.toMultihash().bytes,seq:BigInt(this.seqNumber),addresses:this.multiaddrs.map(e=>({multiaddr:e.bytes}))})),this.marshaled}equals(e){return!(!(e instanceof r)||!this.peerId.equals(e.peerId)||this.seqNumber!==e.seqNumber||!N9(this.multiaddrs,e.multiaddrs))}};function ot(r,e){let t=Tn(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var Qm=1e3,M9=60*Qm,U9=290;var Zj=2*60*M9,F9=1,$d=2e3,$9=100;var Uc=`${so}-circuit-relay`,Jj=`${so}-circuit-relay-source`,eZ=2*M9,tZ=BigInt(1<<17),ki="/libp2p/circuit/relay/0.2.0/hop",Ym="/libp2p/circuit/relay/0.2.0/stop",rZ=30*Qm,nZ=30*Qm,Xm=300,V9=4096,K9=.001;var Fo;(function(r){let e;(function(o){o.RESERVE="RESERVE",o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.RESERVE=0]="RESERVE",o[o.CONNECT=1]="CONNECT",o[o.STATUS=2]="STATUS"})(t||(t={})),function(o){o.codec=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=oe((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),Ws.codec().encode(o.peer,i)),o.reservation!=null&&(i.uint32(26),Vd.codec().encode(o.reservation,i)),o.limit!=null&&(i.uint32(34),zs.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(40),St.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=Ws.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.reservation=Vd.codec().decode(o,o.uint32(),{limits:s.limits?.reservation});break}case 4:{a.limit=zs.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 5:{a.status=St.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,i)=>re(o,r.codec(),i)})(Fo||(Fo={}));var Cn;(function(r){let e;(function(o){o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.CONNECT=0]="CONNECT",o[o.STATUS=1]="STATUS"})(t||(t={})),function(o){o.codec=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=oe((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),Ws.codec().encode(o.peer,i)),o.limit!=null&&(i.uint32(26),zs.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(32),St.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=Ws.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.limit=zs.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 4:{a.status=St.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,i)=>re(o,r.codec(),i)})(Cn||(Cn={}));var Ws;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:se(0),addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new Me('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Ws||(Ws={}));var Vd;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);t.voucher!=null&&(n.uint32(26),Hd.codec().encode(t.voucher,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={expire:0n,addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.expire=t.uint64();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new Me('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}case 3:{i.voucher=Hd.codec().decode(t,t.uint32(),{limits:o.limits?.voucher});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Vd||(Vd={}));var zs;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.duration=t.uint32();break}case 2:{i.data=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(zs||(zs={}));var St;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(St||(St={}));var jm;(function(r){r[r.UNUSED=0]="UNUSED",r[r.OK=100]="OK",r[r.RESERVATION_REFUSED=200]="RESERVATION_REFUSED",r[r.RESOURCE_LIMIT_EXCEEDED=201]="RESOURCE_LIMIT_EXCEEDED",r[r.PERMISSION_DENIED=202]="PERMISSION_DENIED",r[r.CONNECTION_FAILED=203]="CONNECTION_FAILED",r[r.NO_RESERVATION=204]="NO_RESERVATION",r[r.MALFORMED_MESSAGE=400]="MALFORMED_MESSAGE",r[r.UNEXPECTED_MESSAGE=401]="UNEXPECTED_MESSAGE"})(jm||(jm={}));(function(r){r.codec=()=>He(jm)})(St||(St={}));var Kd;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={relay:se(0),peer:se(0),expiration:0n},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.relay=t.bytes();break}case 2:{i.peer=t.bytes();break}case 3:{i.expiration=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Kd||(Kd={}));var Hd;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&(n.uint32(26),Kd.codec().encode(t.payload,n)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:se(0),payloadType:se(0),signature:se(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=Kd.codec().decode(t,t.uint32(),{limits:o.limits?.payload});break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Hd||(Hd={}));var Fc=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},qd=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},Wd=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function Zm(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var $c=class{expires;bytes;constructor(e){e?.duration!=null&&e?.duration!==0&&(this.expires=Date.now()+e.duration*1e3),this.bytes=e?.data,this.bytes===0n&&(this.bytes=void 0),this.onData=this.onData.bind(this)}onData(e){this.bytes!=null&&(this.bytes-=BigInt(e.byteLength),this.bytes<0n&&(this.bytes=0n))}getLimits(){if(this.expires==null&&this.bytes==null)return;let e={};if(this.bytes!=null){let t=this;Object.defineProperty(e,"bytes",{get(){return t.bytes}})}if(this.expires!=null){let t=this;Object.defineProperty(e,"seconds",{get(){return Math.round(((t.expires??0)-Date.now())/1e3)}})}return e}},zd=$e(be(Yg.matchers[0],me("p2p-circuit"))),Gd=$e(me("p2p-circuit"));function Jm(r){let{stream:e,remoteAddr:t,logger:n,onDataRead:o,onDataWrite:i}=r,s=n.forComponent("libp2p:stream:converter"),a=!1,c=!1,l=e.close.bind(e);e.close=async p=>{await l(p),h(!0)};let d=e.abort.bind(e);e.abort=p=>{d(p),h(!0)};let u=e.sink.bind(e);e.sink=async p=>{try{await u(Je(p,m=>bi(m,g=>i?.(g))))}catch(m){m.type!=="aborted"&&s.error("%s error in sink",t,m)}finally{c=!0,h()}};let f={log:s,sink:e.sink,source:async function*(){try{for await(let p of e.source)o?.(p),yield p}finally{a=!0,h()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function h(p){p===!0&&(a=!0,c=!0),a&&c&&f.timeline.close==null&&(f.timeline.close=Date.now())}return f}var Qd=class extends ge{peerStore;registrar;connectionManager;randomWalk;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.running=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.connectionManager=e.connectionManager,this.randomWalk=e.randomWalk,this.filter=t.filter,this.discoveryController=new AbortController,$(1/0,this.discoveryController.signal)}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(ki,{filter:this.filter,onConnect:e=>{this.log.trace("discovered relay %p queue (length: %d, active %d)",e,this.queue?.size,this.queue?.running),this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.discoveryController?.abort(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,$(1/0,this.discoveryController.signal),Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[n=>n.protocols.includes(ki)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let i=H9(n),s=H9(o);return i>s?-1:s>i?1:0}]});for(let n of e)this.log.trace("found relay peer %p in peer store",n.id),this.safeDispatchEvent("relay:discover",{detail:n.id});this.log("found %d relay peers in peer store",e.length);let t=this.queue=new Ut({concurrency:5});this.log("start random walk");for await(let n of this.randomWalk.walk({signal:this.discoveryController.signal})){if(this.log.trace("found random peer %p",n.id),t.has(n.id)){this.log.trace("random peer %p was already in queue",n.id);continue}if(this.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(o=>o.toString()));continue}t.queued>10&&(this.log.trace("wait for space in queue for %p",n.id),await t.onSizeLessThan(10,{signal:this.discoveryController.signal})),this.log("adding random peer %p to dial queue (length: %d, active %d)",n.id,t.size,t.running),t.add(async()=>{let o=he([this.discoveryController.signal,AbortSignal.timeout(5e3)]);$(1/0,o);try{await this.connectionManager.openConnection(n.id,{signal:o})}finally{o.clear()}},{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p",n.id,o)})}this.log("stop random walk"),await t.onIdle()}).catch(e=>{this.discoveryController.signal.aborted||this.log.error("failed when finding relays on the network",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort()}};function H9(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(V(e)).getTime()}var e3=class extends ge{connectionManager;reservationStore;discovery;listeningAddrs;log;listenTimeout;reservationId;relay;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.reservationStore=e.relayStore,this.listeningAddrs=[],this.listenTimeout=t.listenTimeout??$d,this.reservationStore.addEventListener("relay:removed",this._onRemoveRelayPeer),this.reservationStore.addEventListener("relay:created-reservation",this._onAddRelayPeer)}_onRemoveRelayPeer=e=>{this.log("relay removed %p our relay %p",e.detail.relay,this.relay,this.relay?.equals(e.detail.relay)),this.relay?.equals(e.detail.relay)===!0&&(this.log("relay peer removed %p",e.detail.relay),this.listeningAddrs=[],this.safeDispatchEvent("listening"))};_onAddRelayPeer=e=>{let{relay:t,details:n}=e.detail;n.type!=="configured"&&n.id===this.reservationId&&(this.log("relay peer added %p",t),this.relay=t,this.listeningAddrs=n.reservation.addrs.map(o=>Q(o).encapsulate("/p2p-circuit")),this.safeDispatchEvent("listening"))};async listen(e){if(this.log("listen on %a",e),Gd.exactMatch(e))this.reservationId=this.reservationStore.reserveRelay();else if(zd.exactMatch(e)){let t=AbortSignal.timeout(this.listenTimeout);$(1/0,t);let n=e.decapsulate("/p2p-circuit"),o=await this.connectionManager.openConnection(n,{signal:t});if(!this.reservationStore.hasReservation(o.remotePeer)){this.log("making reservation on peer %p",o.remotePeer);let i=await this.reservationStore.addRelay(o.remotePeer,"configured");this.log("made reservation on peer %p",o.remotePeer),this.relay=i.relay,this.listeningAddrs=i.details.reservation.addrs.map(s=>Q(s).encapsulate("/p2p-circuit")),this.safeDispatchEvent("listening")}}else throw new Xo(`Could not listen on p2p-circuit address "${e}"`)}getAddrs(){return[...this.listeningAddrs.values()].flat()}async close(){this.reservationStore.cancelReservations(),this.listeningAddrs=[],this.reservationStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),this.safeDispatchEvent("close")}};function q9(r){return new e3(r)}var W9="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var z9=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r));for(;r--;)e+=W9[t[r]&63];return e};var LT=60*1e3*10,DT=60*1e3*5,NT=30*1e3,Yd=class extends ge{peerId;connectionManager;peerStore;events;reserveQueue;reservations;pendingReservations;maxReservationQueueLength;reservationCompletionTimeout;started;log;relayFilter;constructor(e,t){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:reservation-store"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new gt,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??$9,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??$d,this.started=!1,this.relayFilter=Sn(100),this.reserveQueue=new Ut({concurrency:t?.reservationConcurrency??F9,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{[...this.reservations.values()].find(i=>i.connection===n.detail.id)!=null&&this.#t(n.detail.remotePeer).catch(i=>{this.log("could not remove relay %p - %e",n.detail,i)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(Uc)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[Uc]:void 0}})})),this.log("redialing %d old relays",e.length),await Promise.all(e.map(async t=>this.addRelay(t.id,"discovered"))),this.#r()}).catch(e=>{this.log.error(e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=z9();return this.pendingReservations.push(e),this.#r(),e}async addRelay(e,t){if(this.peerId.equals(e))throw this.log.trace("not trying to use self as relay"),new Xo("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new Wd("The reservation queue is full");let n=this.reserveQueue.find(e);if(n!=null)return this.log.trace("potential relay peer %p is already in the reservation queue",e),n.join();if(this.relayFilter.has(e.toMultihash().bytes))throw new Xo("The relay was previously invalid");return this.log.trace("try to reserve relay slot with %p",e),this.reserveQueue.add(async()=>{let o=Date.now();try{let i=this.reservations.get(e);if(i!=null){let p=this.connectionManager.getConnections(e),m=!1;if(p.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),p.map(g=>g.id).includes(i.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),m=!0),m&&Zm(i.reservation.expire)>LT)return this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e),{relay:e,details:i};await this.#t(e)}if(t==="discovered"&&this.pendingReservations.length===0)throw new Fc("Not making reservation on discovered relay because we do not need any more relays");let s=AbortSignal.timeout(this.reservationCompletionTimeout);$(1/0,s);let a=await this.connectionManager.openConnection(e,{signal:s});if(ir.matches(a.remoteAddr))throw new qd("not creating reservation over relayed connection");let c=await this.#e(a,{signal:s}),l=Zm(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let d=Math.min(Math.max(l-DT,NT),Math.pow(2,31)-1),u=setTimeout(()=>{this.log("refresh reservation to relay %p",e),this.addRelay(e,t).catch(async p=>{this.log.error("could not refresh reservation to relay %p - %e",e,p),await this.#t(e)}).catch(p=>{this.log.error("could not remove expired reservation to relay %p - %e",e,p)})},d),f;if(t==="discovered"){let p=this.pendingReservations.pop();if(p==null)throw new Fc("Made reservation on relay but did not need any more discovered relays");f={timeout:u,reservation:c,type:t,connection:a.id,id:p}}else f={timeout:u,reservation:c,type:t,connection:a.id};this.reservations.set(e,f),await this.peerStore.merge(e,{tags:{[Uc]:{value:1,ttl:l}}}),this.#r();let h={relay:e,details:f};return this.safeDispatchEvent("relay:created-reservation",{detail:h}),h}catch(i){throw t==="discovered"&&i.name==="HadEnoughRelaysError"||this.log.error("could not reserve slot on %p after %dms - %e",e,Date.now()-o,i),(i.name==="DialError"||i.name==="UnsupportedProtocolError")&&this.relayFilter.add(e.toMultihash().bytes),this.#t(e).catch(s=>{this.log.error("could not remove reservation on %p after reserving slot failed - %e",e,s)}),i}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}reservationCount(e){return e==null?this.reservations.size:[...this.reservations.values()].reduce((t,n)=>(n.type===e&&t++,t),0)}cancelReservations(){[...this.reservations.values()].forEach(e=>{clearTimeout(e.timeout)}),this.reservations.clear()}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(ki,t),i=ot(n).pb(Fo);this.log.trace("send RESERVE to %p",e.remotePeer),await i.write({type:Fo.Type.RESERVE},t);let s;try{this.log.trace("read response from %p",e.remotePeer),s=await i.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(this.log.trace("read response from %p",s),s.status===St.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let d=Q(l);d.getPeerId()==null&&(d=d.encapsulate(`/p2p/${e.remotePeer}`)),d=Q(d.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(d.toString())}return s.reservation.addrs=[...c].map(l=>Q(l).bytes),s.reservation}let a=`reservation failed with status ${s.status??"undefined"}`;throw this.log.error(a),new Error(a)}async#t(e){let t=this.reservations.get(e);t!=null&&(this.log("removing relay reservation with %p from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),t.type==="discovered"&&this.pendingReservations.push(t.id),await this.peerStore.merge(e,{tags:{[Uc]:void 0}}),this.safeDispatchEvent("relay:removed",{detail:{relay:e,details:t}}),this.#r())}#r(){if(this.pendingReservations.length===0){this.log.trace("have discovered enough relays"),this.reserveQueue.clear(),this.safeDispatchEvent("relay:found-enough-relays");return}this.relayFilter=Sn(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var BT=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(Q)}catch{return!1}return!0},t3={maxInboundStopStreams:Xm,maxOutboundStopStreams:Xm,stopTimeout:3e4},Xd=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;stopTimeout;started;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??t3.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??t3.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??t3.stopTimeout,this.discovery=new Qd(e,{filter:t.discoveryFilter??L2(V9,K9)}),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(o=>{o.name!=="HadEnoughRelaysError"&&o.name!=="RelayQueueFullError"&&this.log.error("could not add discovered relay %p",n.detail,o)})}),this.reservationStore=new Yd(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.startDiscovery()}),this.reservationStore.addEventListener("relay:found-enough-relays",()=>{this.discovery?.stopDiscovery()}),this.started=!1}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[Ie]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[Vr](){return this.discovery!=null?["@libp2p/identify"]:[]}[dn]=!0;isStarted(){return this.started}async start(){await this.registrar.handle(Ym,e=>{this.onStop(e).catch(t=>{this.log.error("error while handling STOP protocol",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await wt(this.discovery,this.reservationStore),this.started=!0}async stop(){await Tt(this.discovery,this.reservationStore),await this.registrar.unhandle(Ym),this.started=!1}async dial(e,t){if(e.protoCodes().filter(h=>h===U9).length!==1){let h="Invalid circuit relay address";throw this.log.error(h,e),new Dn(h)}let n=e.toString().split("/p2p-circuit"),o=Q(n[0]),i=Q(n[n.length-1]),s=o.getPeerId(),a=i.getPeerId();if(s==null||a==null){let h=`ircuit relay dial to ${e.toString()} failed as address did not have both relay and destination PeerIDs`;throw this.log.error(`c${h}`),new Dn(`C${h}`)}let c=Re(s),l=Re(a),u=this.connectionManager.getConnections(c)[0];u==null?(await this.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new H("circuit-relay:open-connection")),u=await this.connectionManager.openConnection(c,t)):t.onProgress?.(new H("circuit-relay:reuse-connection"));let f;try{t.onProgress?.(new H("circuit-relay:open-hop-stream")),f=await u.newStream(ki,t);let h=ot(f),p=h.pb(Fo);t.onProgress?.(new H("circuit-relay:write-connect-message")),await p.write({type:Fo.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[Q(i).bytes]}},t),t.onProgress?.(new H("circuit-relay:read-connect-response"));let m=await p.read(t);if(m.status!==St.OK)throw new de(`failed to connect via relay with status ${m?.status?.toString()??"undefined"}`);let g=new $c(m.limit),y=Jm({stream:h.unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger,onDataRead:g.onData,onDataWrite:g.onData});return this.log("new outbound relayed connection %a",y.remoteAddr),await this.upgrader.upgradeOutbound(y,{...t,limits:g.getLimits()})}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,h),f?.abort(h),h}}createListener(e){return q9({connectionManager:this.connectionManager,relayStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>zd.exactMatch(t)||Gd.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>ir.exactMatch(t))}async onStop({connection:e,stream:t}){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(u){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",u)}let n=AbortSignal.timeout(this.stopTimeout),o=ot(t).pb(Cn),i=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,i.type),i?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await o.write({type:Cn.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(i.type!==Cn.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:Cn.Type.STATUS,status:St.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!BT(i)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:Cn.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let s=mt(ke(i.peer.id));if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,s)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await o.write({type:Cn.Type.STATUS,status:St.PERMISSION_DENIED},{signal:n}),await t.close();return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:Cn.Type.STATUS,status:St.OK},{signal:n});let a=new $c(i.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.addressManager.getAddresses()[0],d=Jm({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,logger:this.logger,onDataRead:a.onData,onDataWrite:a.onData});this.log("new inbound relayed connection %a",d.remoteAddr),await this.upgrader.upgradeInbound(d,{limits:a.getLimits()}),this.log("%s connection %a upgraded","inbound",d.remoteAddr)}};function r3(r={}){return e=>new Xd(e,r)}var G9=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},OT=new WeakMap;function MT({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(G9());let i,s,a,c=r??clearTimeout,l=()=>{c(i),a(G9())},d=()=>{o&&o.removeEventListener("abort",l)},u=new Promise((f,h)=>{s=()=>{d(),f(n)},a=h,i=(e??setTimeout)(s,t)});return o&&o.addEventListener("abort",l,{once:!0}),OT.set(u,()=>{c(i),i=null,s()}),u}}var UT=MT(),jd=UT;var an;(function(r){let e;(function(o){o.UNUSED="UNUSED",o.CONNECT="CONNECT",o.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.UNUSED=0]="UNUSED",o[o.CONNECT=100]="CONNECT",o[o.SYNC=300]="SYNC"})(t||(t={})),function(o){o.codec=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=oe((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.observedAddresses!=null)for(let a of o.observedAddresses)i.uint32(18),i.bytes(a);s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={observedAddresses:[]},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{if(s.limits?.observedAddresses!=null&&a.observedAddresses.length===s.limits.observedAddresses)throw new Me('Decode error - map field "observedAddresses" had too many elements');a.observedAddresses.push(o.bytes());break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,i)=>re(o,r.codec(),i)})(an||(an={}));function n3(r,e){return ir.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:bc.matches(r)?!0:qg.matches(r)?Bt(r.toOptions().host)===!1:!1}var Q9=1024*4,Y9=100,Zd={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},Jd=class{started;timeout;retries;maxInboundStreams;maxOutboundStreams;peerStore;registrar;connectionManager;addressManager;transportManager;topologyId;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:dcutr"),this.started=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.timeout=t.timeout??Zd.timeout,this.retries=t.retries??Zd.retries,this.maxInboundStreams=t.maxInboundStreams??Zd.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Zd.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[Vr]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Vc,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{ir.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Vc,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{this.log.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Vc),this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async upgradeInbound(e){if(await this.attemptUnilateralConnectionUpgrade(e))return;let t;for(let n=0;n<this.retries;n++){let o={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([Vc],{signal:o.signal,runOnLimitedConnection:!0});let i=ot(t,{maxDataLength:Q9}).pb(an);this.log("B sending connect to %p",e.remotePeer);let s=Date.now();await i.write({type:an.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(u=>u.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await i.read(o);if(a.type!==an.Type.CONNECT)throw this.log("A sent wrong message type"),new de("DCUtR message type was incorrect");let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new de("DCUtR connect message had no multiaddrs");let l=Date.now()-s;this.log("A sending sync, rtt %dms",l),await i.write({type:an.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await jd(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:Y9});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,d.remoteAddr),await e.close(o);break}catch(i){if(this.log.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,i),t?.abort(i),n===this.retries)throw i}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let i=o.multiaddr;return i.getPeerId()==null?i.encapsulate(`/p2p/${e.remotePeer}`):i}).filter(o=>n3(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let i=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(ir.exactMatch(i.remoteAddr))throw new Error("Could not open a new, non-limited, connection");return this.log("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,i.remoteAddr),await e.close({signal:o}),!0}catch(i){this.log.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,i)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)};try{let o=ot(e,{maxDataLength:Q9}).pb(an);this.log("A receiving connect");let i=await o.read(n);if(i.type!==an.Type.CONNECT)throw this.log("B sent wrong message type"),new de("DCUtR message type was incorrect");if(i.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new de("DCUtR connect message had no multiaddrs");let s=this.getDialableMultiaddrs(i.observedAddresses);if(s.length===0)throw this.log("B had no dialable multiaddrs"),new de("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:an.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==an.Type.SYNC)throw new de("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:Y9,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n)}catch(o){this.log.error("incoming DCUtR from %p failed",t.remotePeer,o),e.abort(o)}finally{await e.close(n)}}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=Q(n);if(!n3(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Vc="/libp2p/dcutr";function X9(r={}){return e=>new Jd(e,r)}var j9="0.1.0",Z9="id",J9="id/push",ey="1.0.0",ty="1.0.0";var $o;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let i of t.listenAddrs)n.uint32(18),n.bytes(i);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let i of t.protocols)n.uint32(26),n.string(i);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 5:{i.protocolVersion=t.string();break}case 6:{i.agentVersion=t.string();break}case 1:{i.publicKey=t.bytes();break}case 2:{if(o.limits?.listenAddrs!=null&&i.listenAddrs.length===o.limits.listenAddrs)throw new Me('Decode error - map field "listenAddrs" had too many elements');i.listenAddrs.push(t.bytes());break}case 4:{i.observedAddr=t.bytes();break}case 3:{if(o.limits?.protocols!=null&&i.protocols.length===o.limits.protocols)throw new Me('Decode error - map field "protocols" had too many elements');i.protocols.push(t.string());break}case 8:{i.signedPeerRecord=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})($o||($o={}));var oy=fr(ny(),1),o3=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,ef=(0,oy.default)(),tf=o3&&!ef,iy=ef&&!o3,sy=ef&&o3,ay=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!ef,rf=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,LJ=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+"_"+"ENV"]==="test",cy=typeof navigator<"u"&&navigator.product==="ReactNative";var lr={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function ly(r){if(r!=null&&r.length>0)try{return Q(r)}catch{}}function KT(r,e){return e!=null||(e=`${r.name}/${r.version}`,ay||iy?e+=` UserAgent=${globalThis.process.version}`:(tf||rf||sy||cy)&&(e+=` UserAgent=${globalThis.navigator.userAgent}`)),e}async function nf(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new de("message was null or undefined");let i={};if(o.listenAddrs.length>0&&(i.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:Q(c)}))),o.protocols.length>0&&(i.protocols=o.protocols),o.publicKey!=null){let c=rt(o.publicKey);if(!En(c).equals(n.remotePeer))throw new de("public key did not match remote PeerId");i.publicKey=c}let s;if(o.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await Sr.openAndCertify(c,zt.DOMAIN),d=zt.createFromProtobuf(l.payload),u=vn(l.publicKey.toCID());if(!d.peerId.equals(u))throw new de("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(d.peerId))throw new de("signing key does not match remote PeerId");let f;try{f=await r.get(d.peerId)}catch(h){if(h.name!=="NotFoundError")throw h}if(f!=null&&(i.metadata=f.metadata,f.peerRecordEnvelope!=null)){let h=await Sr.createFromProtobuf(f.peerRecordEnvelope),p=zt.createFromProtobuf(h.payload);p.seqNumber>=d.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",p.seqNumber,d.seqNumber),d=p,c=f.peerRecordEnvelope)}i.peerRecordEnvelope=c,i.addresses=d.multiaddrs.map(h=>({isCertified:!0,multiaddr:h})),s={seq:d.seqNumber,addresses:d.multiaddrs}}else t("%p did not send a signed peer record",n.remotePeer);if(t.trace("patching %p with",n.remotePeer,i),await r.patch(n.remotePeer,i),o.agentVersion!=null||o.protocolVersion!=null){let c={};o.agentVersion!=null&&(c.AgentVersion=M(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=M(o.protocolVersion)),t.trace("merging %p metadata",n.remotePeer,c),await r.merge(n.remotePeer,{metadata:c})}let a={peerId:n.remotePeer,protocolVersion:o.protocolVersion,agentVersion:o.agentVersion,publicKey:o.publicKey,listenAddrs:o.listenAddrs.map(c=>Q(c)),observedAddr:o.observedAddr==null?void 0:Q(o.observedAddr),protocols:o.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var Gs=class{host;protocol;started;timeout;peerId;privateKey;peerStore;registrar;addressManager;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;events;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.peerId=e.peerId,this.privateKey=e.privateKey,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.events=e.events,this.log=t.log,this.timeout=t.timeout??lr.timeout,this.maxInboundStreams=t.maxInboundStreams??lr.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??lr.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??lr.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??lr.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??lr.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??lr.protocolPrefix}/${j9}`,agentVersion:KT(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:M(this.host.agentVersion),ProtocolVersion:M(this.host.protocolVersion)}}),await this.registrar.handle(this.protocol,e=>{this.handleProtocol(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.protocol),this.started=!1}};var of=class extends Gs{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??lr.protocolPrefix}/${J9}/${ty}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??lr.concurrency,(t.runOnSelfUpdate??lr.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})})}[Ie]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(d=>d.decapsulateCode(ee("p2p").code)),t=new zt({peerId:this.peerId,multiaddrs:e}),n=await Sr.seal(t,this.privateKey),o=this.registrar.getProtocols(),i=await this.peerStore.get(this.peerId),s=V(i.metadata.get("AgentVersion")??M(this.host.agentVersion)),a=V(i.metadata.get("ProtocolVersion")??M(this.host.protocolVersion)),c=this;async function*l(){for(let d of c.connectionManager.getConnections())(await c.peerStore.get(d.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let f,h=AbortSignal.timeout(c.timeout);$(1/0,h);try{f=await d.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await ot(f,{maxDataLength:c.maxMessageSize}).pb($o).write({listenAddrs:e.map(m=>m.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:s,protocolVersion:a},{signal:h}),await f.close({signal:h})}catch(p){c.log.error("could not push identify update to peer",p),f?.abort(p)}})}await Ct(vr(l(),{concurrency:this.concurrency}))}async handleProtocol(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},s=await ot(n,{maxDataLength:this.maxMessageSize}).pb($o).read(o);await n.close(o),await nf(this.peerStore,this.events,this.log,t,s)}catch(o){this.log.error("received invalid message",o),n.abort(o);return}this.log.trace("handled push from %p",t.remotePeer)}};var sf=class extends Gs{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??lr.protocolPrefix}/${Z9}/${ey}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??lr.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(i=>{i.name!==Ln.name&&this.log.error("error during identify trigged by connection:open",i)})})}[Ie]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);$(1/0,o),t={...t,signal:o}}try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let i=await ot(n,{maxDataLength:this.maxMessageSize}).pb($o).read(t);return await n.close(t),i}catch(o){throw n?.abort(o),o}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:i,observedAddr:s}=n;if(o==null)throw new de("public key was missing from identify message");let a=rt(o),c=vn(a.toCID());if(!e.remotePeer.equals(c))throw new de("identified peer does not match the expected peer");if(this.peerId.equals(c))throw new de("identified peer is our own peer id?");let l=ly(s);return this.log("identify completed for peer %p and protocols %o",c,i),l!=null&&(this.log("our observed address was %a",l),Bt(l?.nodeAddress().address)===!0?this.log("our observed address was private"):this.addressManager.getObservedAddrs().length<(this.maxObservedAddresses??1/0)&&(this.log("storing our observed address"),this.addressManager.addObservedAddr(l))),nf(this.peerStore,this.events,this.log,e,n)}async handleProtocol(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);$(1/0,o);try{let i=await this.peerStore.get(this.peerId),s=this.addressManager.getAddresses().map(d=>d.decapsulateCode(ee("p2p").code)),a=i.peerRecordEnvelope;if(s.length>0&&a==null){let d=new zt({peerId:this.peerId,multiaddrs:s});a=(await Sr.seal(d,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;Hg.matches(t.remoteAddr)||(c=void 0),await ot(n).pb($o).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:Lt(this.privateKey.publicKey),listenAddrs:s.map(d=>d.bytes),signedPeerRecord:a,observedAddr:c,protocols:i.protocols},{signal:o}),await n.close({signal:o})}catch(i){this.log.error("could not respond to identify request",i),n.abort(i)}}};function uy(r={}){return e=>new sf(e,r)}function dy(r={}){return e=>new of(e,r)}var Qs=1e3,i3=60*Qs,af=60*i3,fy=36*af,hy="/ipfs/kad/1.0.0",py=24*af;var my=2*af,gy=10,yy=16384,wy=af,yee=10*Qs;var cf=20,Ys=3,by=5*i3,xy=Qs,Ey=5*Qs,vy=5*i3,Sy=30*Qs,Ay=180*Qs,s3=`${so}-kad-dht`;var Kc;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&t.key.byteLength>0&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&t.value.byteLength>0&&(n.uint32(18),n.bytes(t.value)),t.timeReceived!=null&&t.timeReceived!==""&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={key:se(0),value:se(0),timeReceived:""},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Kc||(Kc={}));function Iy(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),o=String(r.getUTCHours()).padStart(2,"0"),i=String(r.getUTCMinutes()).padStart(2,"0"),s=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${i}:${s}.${c}Z`}function _y(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),o=parseInt(t[2],10)-1,i=parseInt(t[3],10),s=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,o,i,s,a,c,l))}var At=class r{key;value;timeReceived;constructor(e,t,n){if(!(e instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(t instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=e,this.value=t,this.timeReceived=n}serialize(){return Kc.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:Iy(this.timeReceived)}}static deserialize(e){let t=Kc.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=_y(e.timeReceived);if(e.key==null)throw new Error("key missing from deserialized object");if(e.value==null)throw new Error("value missing from deserialized object");return new r(e.key,e.value,t)}};var Vo=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},lf=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},uf=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},df=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var Ty;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&(n.uint32(18),n.bytes(t.value)),t.author!=null&&(n.uint32(26),n.bytes(t.author)),t.signature!=null&&(n.uint32(34),n.bytes(t.signature)),t.timeReceived!=null&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 3:{i.author=t.bytes();break}case 4:{i.signature=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Ty||(Ty={}));var Ee;(function(r){r.PUT_VALUE="PUT_VALUE",r.GET_VALUE="GET_VALUE",r.ADD_PROVIDER="ADD_PROVIDER",r.GET_PROVIDERS="GET_PROVIDERS",r.FIND_NODE="FIND_NODE",r.PING="PING"})(Ee||(Ee={}));var ff;(function(r){r[r.PUT_VALUE=0]="PUT_VALUE",r[r.GET_VALUE=1]="GET_VALUE",r[r.ADD_PROVIDER=2]="ADD_PROVIDER",r[r.GET_PROVIDERS=3]="GET_PROVIDERS",r[r.FIND_NODE=4]="FIND_NODE",r[r.PING=5]="PING"})(ff||(ff={}));(function(r){r.codec=()=>He(ff)})(Ee||(Ee={}));var js;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(js||(js={}));var a3;(function(r){r[r.NOT_CONNECTED=0]="NOT_CONNECTED",r[r.CONNECTED=1]="CONNECTED",r[r.CAN_CONNECT=2]="CAN_CONNECT",r[r.CANNOT_CONNECT=3]="CANNOT_CONNECT"})(a3||(a3={}));(function(r){r.codec=()=>He(a3)})(js||(js={}));var Xs;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let i of t.multiaddrs)n.uint32(18),n.bytes(i);t.connection!=null&&(n.uint32(24),js.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:se(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.multiaddrs!=null&&i.multiaddrs.length===o.limits.multiaddrs)throw new Me('Decode error - map field "multiaddrs" had too many elements');i.multiaddrs.push(t.bytes());break}case 3:{i.connection=js.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(Xs||(Xs={}));var io;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&ff[t.type]!==0&&(n.uint32(8),Ee.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let i of t.closer)n.uint32(66),Xs.codec().encode(i,n);if(t.providers!=null)for(let i of t.providers)n.uint32(74),Xs.codec().encode(i,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={type:Ee.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.type=Ee.codec().decode(t);break}case 10:{i.clusterLevel=t.int32();break}case 2:{i.key=t.bytes();break}case 3:{i.record=t.bytes();break}case 8:{if(o.limits?.closer!=null&&i.closer.length===o.limits.closer)throw new Me('Decode error - map field "closer" had too many elements');i.closer.push(Xs.codec().decode(t,t.uint32(),{limits:o.limits?.closer$}));break}case 9:{if(o.limits?.providers!=null&&i.providers.length===o.limits.providers)throw new Me('Decode error - map field "providers" had too many elements');i.providers.push(Xs.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(io||(io={}));function c3(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new CustomEvent("kad-dht:query:send-query",{detail:t})),t}function Hc(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer??[],providers:r.providers??[]};return e.onProgress?.(new CustomEvent("kad-dht:query:peer-response",{detail:t})),t}function hf(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function Ar(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function l3(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function qc(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function u3(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function ky(r,e,t){if(t.length===0)throw new C("No records given");let o=V(e).split("/");if(o.length<3)throw new C("Record key does not have a selector function");let i=r[o[1].toString()];if(i==null)throw new df(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function qT(r,e){return 0}var Cy={pk:qT};async function Zs(r,e){let t=e.key,o=V(t).split("/");if(o.length<3)return;let i=r[o[1].toString()];if(i==null)throw new C(`No validator available for key type "${o[1]}"`);await i(t,e.value)}var WT=async(r,e)=>{if(!(r instanceof Uint8Array))throw new C('"key" must be a Uint8Array');if(r.byteLength<5)throw new C("Invalid public key record");if(V(r.subarray(0,4))!=="/pk/")throw new C("key was not prefixed with /pk/");let n=rt(e),o=r.slice(4);if(!te(o,n.toMultihash().bytes))throw new C("public key does not match passed in key")},Py={pk:WT};var zT=M("/pk/");function Ry(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(t===53||t===54||t===55)return n!=="localhost";if(t!==4&&t!==6||n==null)return!1;let o=Bt(n);return o==null?!0:!o})}}async function Ko(r){return(await ut.digest(r)).digest}async function ur(r){return Ko(r.toMultihash().bytes)}function Ho(r,e){return new De(`${r}/${V(e,"base32")}`,!1)}function Ly(r){return Pe([zT,r.toMultihash().bytes])}function Dy(r){return V(r.subarray(0,4))==="/pk/"}function Ny(r){let e=ke(r.subarray(4));return mt(e)}function d3(r,e){let t=new Date;return new At(r,e,t).serialize()}var GT=290,QT=54,YT=55,XT=56,jT=4,ZT=41;function By(r){let e=r.stringTuples();for(let t of e)if(t[0]===GT)return!1;if(e[0][0]===QT||e[0][0]===YT||e[0][0]===XT)return!0;if(e[0][0]===jT||e[0][0]===ZT){let t=Bt(`${e[0][1]}`);return t==null||!t}return!1}function pf(r){let e=r.toString().split("/"),t=e.pop(),n=e.pop();if(t==null||n==null)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:X.createV1(Jo,ke(M(n,"base32"))),peerId:Re(t)}}function mf(r,e,t){let n=typeof e=="string"?e:V(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new De(o.join("/"))}function gf(r){return new Date(Ft(r))}function Ci(r,e,t){return async function*(...n){let o=e.queryTime?.timer(t),i=e.errorTime?.timer(t),s=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}function yf(r,e,t){return async function(...n){let o=e?.queryTime?.timer(t),i=e?.errorTime?.timer(t),s=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}var wf=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:o,peerRouting:i,queryManager:s,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.datastorePrefix=`/${t.logPrefix.replaceAll(":","/")}/record`,this.validators=n,this.selectors=o,this.peerRouting=i,this.queryManager=s,this.network=a}async getLocal(e){this.log("getLocal %b",e);let t=Ho(this.datastorePrefix,e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=At.deserialize(n);return await Zs(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let i=d3(e,n);for(let{value:s,from:a}of t){if(te(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let d=Ho(this.datastorePrefix,e);this.log(`Storing corrected record for key ${d.toString()}`),await this.components.datastore.put(d,i.subarray())}catch(d){this.log.error("Failed error correcting self",d)}continue}let c=!1,l={type:Ee.PUT_VALUE,key:e,record:i};for await(let d of this.network.sendRequest(a,l,o))d.name==="PEER_RESPONSE"&&d.record!=null&&te(d.record.value,At.deserialize(i).value)&&(c=!0),yield d;c||(yield Ar({from:a,error:new Vo("Value not put correctly")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=d3(e,t),i=Ho(this.datastorePrefix,e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray()),yield*Je(this.peerRouting.getClosestPeers(e,{signal:n.signal}),s=>jt(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:Ee.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let d of this.network.sendRequest(a.peer.id,l,n))c.push(d),d.name==="PEER_RESPONSE"&&(d.record!=null&&te(d.record.value,At.deserialize(o).value)||c.push(Ar({from:a.peer.id,error:new Vo("Value not put correctly")},n)));return c}),s=>vr(s,{ordered:!1,concurrency:Ys}),async function*(s){for await(let a of s)yield*a})}async*get(e,t={}){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t))a.name==="VALUE"&&n.push(a),yield a;if(n.length===0)return;let o=n.map(a=>a.value),i=0;try{i=ky(this.selectors,e,o)}catch(a){if(a.name!=="InvalidParametersError")throw a}let s=o[i];if(this.log("GetValue %b %b",e,s),s==null)throw new Oe("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,t),yield n[i]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let i=await this.getLocal(e);yield qc({value:i.value,from:this.components.peerId},t)}catch(i){this.log("error getting local value for %b",e,i)}let n=this,o=async function*({peer:i,signal:s}){for await(let a of n.peerRouting.getValueOrPeers(i,e,{signal:s}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield qc({from:i,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function Oy(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function Wc(r){if(r.id==null)throw new Error("Invalid peer in message");let e=ke(r.id);return{id:mt(e),multiaddrs:(r.multiaddrs??[]).map(t=>Q(t))}}var bf=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:i,routingTable:s,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=i,this.routingTable=s,this.providers=a}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId);let i={type:Ee.ADD_PROVIDER,key:o,providers:[Oy({id:this.components.peerId,multiaddrs:t})]},s=0,a=c=>async()=>{if(c.name!=="FINAL_PEER")return[c];let l=[];this.log("putProvider %s to %p",e,c.peer.id);try{this.log("sending provider record for %s to %p",e,c.peer.id);for await(let d of this.network.sendMessage(c.peer.id,i,n))d.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,c.peer.id),s++),l.push(d)}catch(d){this.log.error("error sending provide record to peer %p",c.peer.id,d),l.push(Ar({from:c.peer.id,error:d},n))}return l};yield*Je(this.peerRouting.getClosestPeers(o,n),c=>jt(c,l=>a(l)),c=>vr(c,{ordered:!1,concurrency:Ys}),async function*(c){for await(let l of c)yield*l}),this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,i=e.multihash.bytes,s=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e);if(a.length>0){let d=[];for(let u of a.slice(0,n))try{let f=await this.components.peerStore.get(u);d.push({id:u,multiaddrs:f.addresses.map(({multiaddr:h})=>h)})}catch(f){if(f.name!=="NotFoundError")throw f;this.log("no peer store entry for %p",u)}if(yield Hc({from:this.components.peerId,messageType:Ee.GET_PROVIDERS,providers:d},t),yield l3({from:this.components.peerId,providers:d},t),o+=d.length,o>=n)return}let c=async function*({peer:d,signal:u}){let f={type:Ee.GET_PROVIDERS,key:i};yield*s.network.sendRequest(d,f,{...t,signal:u})},l=new nr(a);for await(let d of this.queryManager.run(i,c,t))if(yield d,d.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",d.providers.length,e,d.closer.length);let u=[];for(let f of d.providers)l.has(f.id)||(l.add(f.id),u.push(f));if(u.length>0&&(yield l3({from:d.from,providers:u},t),o+=u.length,o>=n))return}}};var Js=class{movingAverage;variance;deviation;forecast;timespan;previousTime;constructor(e){this.timespan=e,this.movingAverage=0,this.variance=0,this.deviation=0,this.forecast=0}alpha(e,t){return 1-Math.exp(-(e-t)/this.timespan)}push(e,t=Date.now()){if(this.previousTime!=null){let n=this.alpha(t,this.previousTime),o=e-this.movingAverage,i=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*i),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var ek=1.2,tk=2,rk=2e3,cn=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new Js(e.interval??5e3),this.failure=new Js(e.interval??5e3),this.next=new Js(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??tk,this.timeoutMultiplier=e.timeoutMultiplier??ek,this.minTimeout=e.minTimeout??rk,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.max(Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier)),this.minTimeout),n=AbortSignal.timeout(t),o=he([e.signal,n]);return $(1/0,o,n),o.start=Date.now(),o.timeout=t,o}cleanUp(e){let t=Date.now()-e.start;e.aborted?(this.failure.push(t),this.next.push(t*this.failureMultiplier),this.metric?.update({failureMovingAverage:this.failure.movingAverage,failureDeviation:this.failure.deviation,failureForecast:this.failure.forecast,failureVariance:this.failure.variance,failure:t})):(this.success.push(t),this.next.push(t),this.metric?.update({successMovingAverage:this.success.movingAverage,successDeviation:this.success.deviation,successForecast:this.success.forecast,successVariance:this.success.variance,success:t}))}};var xf=class extends ge{log;protocol;running;components;timeout;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=t.protocol,this.timeout=new cn({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_network_message_send_times_milliseconds`}),this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_errors_total`)}}async start(){this.running||(this.running=!0)}async stop(){this.running=!1}isStarted(){return this.running}async*sendRequest(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new C("Message type was missing");this.log("sending %s to %p",t.type,e),yield u3({peer:e},n),yield c3({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);let c=await this._writeReadMessage(i,t,n);i.close(n).catch(l=>{this.log.error("error closing stream to %p",e,l),i?.abort(l)}),yield Hc({from:e,messageType:c.type,closer:c.closer.map(Wc),providers:c.providers.map(Wc),record:c.record==null?void 0:At.deserialize(c.record)},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield Ar({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async*sendMessage(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new C("Message type was missing");this.log("sending %s to %p",t.type,e),yield u3({peer:e},n),yield c3({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),await this._writeMessage(i,t,n),i.close(n).catch(c=>{this.log.error("error closing stream to %p",e,c),i?.abort(c)}),yield Hc({from:e,messageType:o},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),yield Ar({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await ot(e).write(t,io,n)}async _writeReadMessage(e,t,n){let o=ot(e);await o.write(t,io,n);let i=await o.read(io,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:Wc(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:Wc(s)})}),i}};function ea(r,e){if(r.byteLength!==e.byteLength)throw new Error("Inputs should have the same length");for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}var qo=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return this.peerDistances.map(e=>e.peer)}async add(e){let t=await ur(e.id);this.addWitKadId(e,t)}addWitKadId(e,t){if(this.peerDistances.find(o=>o.peer.id.equals(e.id))!=null)return;let n={peer:e,distance:on(this.originDhtKey,t)};this.peerDistances.push(n),this.peerDistances.sort((o,i)=>ea(o.distance,i.distance)),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await ur(e),n=on(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return ea(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var Ef=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.peerStore=e.peerStore,this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:peer-routing`)}async findPeerLocal(e){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(o){if(o.name!=="NotFoundError")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.name!=="NotFoundError")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n={}){let o={type:Ee.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=Ly(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let i=rt(o.record.value),s=En(i);if(!s.equals(e))throw new Rn("public key does not match id");if(s.publicKey==null)throw new Rn("public key missing");yield qc({from:e,value:o.record.value},t)}throw new Vo(`Node not responding with its public key: ${e.toString()}`)}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e);if(o!=null){this.log("found local"),yield hf({from:this.peerId,peer:o},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,i=async function*({peer:s,signal:a}){let c={type:Ee.FIND_NODE,key:e.toMultihash().bytes};for await(let l of o.network.sendRequest(s,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let d=l.closer.find(u=>u.id.equals(e));d!=null&&(yield hf({from:l.from,peer:d},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}n||(yield Ar({from:this.peerId,error:new Oe("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Ko(e),o=this.routingTable.closestPeers(n),i=this,s=new qo(n,this.routingTable.kBucketSize);await Promise.all(o.map(async c=>{await s.add({id:c,multiaddrs:[]})}));let a=async function*({peer:c,signal:l}){i.log("closerPeersSingle %s from %p",V(e,"base32"),c);let d={type:Ee.FIND_NODE,key:e};yield*i.network.sendRequest(c,d,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await s.add(l)})),yield c;this.log("found %d peers close to %b",s.length,e);for(let c of s.peers)yield hf({from:this.peerId,peer:c},t)}async*getValueOrPeers(e,t,n={}){for await(let o of this._getValueSingle(e,t,n)){if(o.name==="PEER_RESPONSE"&&o.record!=null)try{await this._verifyRecordOnline(o.record)}catch{let s="invalid record received, discarded";this.log(s),yield Ar({from:o.from,error:new Vo(s)},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new uf("invalid record received");await Zs(this.validators,new At(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=await Ko(e),o=this.routingTable.closestPeers(n),i=[];for(let s of o)if(!s.equals(t))try{let a=await this.peerStore.get(s);i.push({id:s,multiaddrs:a.addresses.map(({multiaddr:c})=>c)})}catch(a){if(a.name!=="NotFoundError")throw a}return i.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",i.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p with %d peers in the routing table",e,t,this.routingTable.size),i}};var vf=class{log;datastore;datastorePrefix;lock;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`/${t.datastorePrefix}/provider`,this.datastore=e.datastore,this.lock=t.lock}async addProvider(e,t){let n=await this.lock.readLock();try{this.log("%p provides %s",t,e),await this.writeProviderEntry(e,t)}finally{n()}}async removeProvider(e,t){let n=await this.lock.writeLock();try{let o=mf(this.datastorePrefix,e,t);this.log("%p no longer provides %s",t,e),await this.datastore.delete(o)}finally{n()}}async getProviders(e){let t=await this.lock.readLock();try{return this.log("get providers for %s",e),[...(await this.loadProviders(e)).keys()]}finally{t()}}async writeProviderEntry(e,t,n=new Date){let o=mf(this.datastorePrefix,e,t),i=Ke(n.getTime());await this.datastore.put(o,i)}async loadProviders(e){let t=new gt;for await(let n of this.datastore.query({prefix:mf(this.datastorePrefix,e).toString()})){let{peerId:o}=pf(n.key);t.set(o,gf(n.value))}return t}};async function*My(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:i,alpha:s,pathIndex:a,numPaths:c,queryFuncTimeout:l,log:d,peersSeen:u,connectionManager:f}=r,h=new Mt({concurrency:s,sort:(g,y)=>ea(g.options.distance,y.options.distance)}),p=await Ko(e);function m(g,y){if(g==null)return;u.add(g);let b=on(y,p);h.add(async()=>{let w=[o];l!=null&&w.push(AbortSignal.timeout(l));let x=he(w);$(1/0,x);try{for await(let T of i({key:e,peer:g,signal:x,pathIndex:a,numPaths:c})){if(x.aborted)return;if(T.name==="PEER_RESPONSE")for(let k of T.closer){if(u.has(k.id)){d.trace("already seen %p in query",k.id);continue}if(n.equals(k.id)){d("not querying ourselves");continue}if(!await f.isDialable(k.multiaddrs)){d("not querying undialable peer");continue}let v=await ur(k.id),S=on(v,p);if(ea(S,b)!==-1){d.trace("skipping %p as they are not closer to %b than %p",k.id,e,g);continue}d.trace("querying closer peer %p",k.id),m(k.id,v)}h.safeDispatchEvent("completed",{detail:T})}}catch(T){if(!o.aborted)return Ar({from:g,error:T},r)}finally{x.clear()}},{distance:b}).catch(w=>{d.error(w)})}m(t,await ur(t));try{for await(let g of h.toGenerator({signal:o}))g!=null&&(yield g)}catch(g){throw o.aborted?new lf("Query aborted"):g}}var Sf=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??cf,this.alpha=t.alpha??Ys,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.shutDownController=new AbortController,$(1/0,this.shutDownController.signal),this.running=!1}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutDownController=new AbortController,$(1/0,this.shutDownController.signal))}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");if(n.signal==null){let c=AbortSignal.timeout(Ay);$(1/0,c),n={...n,signal:c}}let o=new AbortController,i=he([this.shutDownController.signal,o.signal,n.signal]);$(1/0,i,o.signal);let s=this.logger.forComponent(`${this.logPrefix}:query:`+V(e,"base58btc")),a=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial query-self query before continuing"),await Ce(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await Ko(e),l=this.routingTable.closestPeers(c),d=l.slice(0,Math.min(this.disjointPaths,l.length));if(l.length===0){s.error("Running query with no peers");return}let u=new nr,f=d.map((h,p)=>My({key:e,startingPeer:h,ourPeerId:this.peerId,signal:i,query:t,pathIndex:p,numPaths:d.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:s,peersSeen:u,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let h of $t(...f)){if(h.name==="QUERY_ERROR"&&s.error("query error",h.error),h.name==="PEER_RESPONSE")for(let p of[...h.closer,...h.providers])await this.connectionManager.isDialable(p.multiaddrs)&&await this.routingTable.add(p.id);yield h}a=!0}catch(c){if(!(!this.running&&c.name==="QueryAbortedError"))throw c}finally{a||(s("query exited early"),o.abort()),i.clear(),s("query:done")}}};function nk(r){return r[Symbol.asyncIterator]!=null}function ok(r){if(nk(r))return(async()=>{let e=0;for await(let t of r)e++;return e})();{let e=0;for(let t of r)e++;return e}}var Af=ok;var ik=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function sk(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=ik(r),u=(...h)=>{let p=t.multiArgs?h:h[0];t.filter&&!t.filter(p)||(c.push(p),t.count===c.length&&(n(),i(c)))},f=h=>{n(),s(h)};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=jr(o,{milliseconds:t.timeout});return i.cancel=n,i}return o}function zc(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=sk(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}var If=class{log;peerId;peerRouting;routingTable;count;interval;initialInterval;queryTimeout;running;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:query-self`),this.running=!1,this.peerRouting=t.peerRouting,this.routingTable=t.routingTable,this.count=t.count??cf,this.interval=t.interval??by,this.initialInterval=t.initialInterval??xy,this.queryTimeout=t.queryTimeout??Ey,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=yf(this.querySelf.bind(this),t.operationMetrics,"SELF_QUERY")}isStarted(){return this.running}start(){this.running||(this.running=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.initialInterval))}stop(){this.running=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.running){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=J(),this.running){this.controller=new AbortController;let e=[this.controller.signal];if(this.initialQuerySelfHasRun==null){let n=AbortSignal.timeout(this.queryTimeout);$(1/0,n),e.push(n)}let t=he(e);$(1/0,t,this.controller.signal);try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await zc(this.routingTable,"peer:add",{signal:t,filter:i=>!this.peerId.equals(i.detail)}),this.log("routing table has peers, continuing with query")),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await Je(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>uo(i,this.count),async i=>Af(i));this.log("self-query found %d peers in %dms",o,Date.now()-n)}catch(n){this.log.error("self-query error",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.running&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};var _f=class extends ge{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;lock;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new Mt({concurrency:t.concurrency??gy,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new cn({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_timeout_milliseconds`}),this.datastore=e.datastore,this.addressManager=e.addressManager,this.datastorePrefix=`/${t.datastorePrefix}/provider`,this.reprovideThreshold=t.threshold??my,this.maxQueueSize=t.maxQueueSize??yy,this.validity=t.validity??py,this.interval=t.interval??wy,this.contentRouting=t.contentRouting,this.lock=t.lock,this.running=!1,this.reprovide=yf(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,$(1/0,this.shutdownController.signal),this.timeout=setTimeout(()=>{this.cleanUp().catch(e=>{this.log.error("error running reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async cleanUp(){let e=await this.lock.writeLock();try{this.safeDispatchEvent("reprovide:start");for await(let t of this.datastore.query({prefix:this.datastorePrefix}))try{let{cid:n,peerId:o}=pf(t.key),i=gf(t.value).getTime(),s=i+this.validity,a=Date.now(),c=a>s;this.log.trace("comparing: %d < %d = %s %s",i,a-this.validity,c,c?"(expired)":""),c&&await this.datastore.delete(t.key),this.peerId.equals(o)&&a-s<this.reprovideThreshold&&this.queueReprovide(n).catch(l=>{this.log.error("could not reprovide %c - %e",n,l)})}catch(n){this.log.error("error processing datastore key %s - %e",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{e(),this.safeDispatchEvent("reprovide:end"),this.running&&(this.timeout=setTimeout(()=>{this.cleanUp().catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}async queueReprovide(e){if(!this.running)return;this.log.trace("waiting for queue capacity before adding %c to re-provide queue",e),await this.reprovideQueue.onSizeLessThan(this.maxQueueSize);let t=this.reprovideQueue.queue.find(n=>n.options.cid.equals(e));if(t!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),t.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async n=>{if(n.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let o=this.reprovideTimeout.getTimeoutSignal(n);try{await this.reprovide(n.cid,n)}finally{this.reprovideTimeout.cleanUp(o)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(n=>{this.log.error("could not re-provide key %c - %e",e,n)})}async reprovide(e,t){await Ct(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var ak=20,ck=5e3,lk="kad-close",uk=50,Tf=class{routingTable;components;closestPeers;newPeers;refreshInterval;peerSetSize;timeout;closeTagName;closeTagValue;log;running;constructor(e,t){this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.routingTable=t.routingTable,this.refreshInterval=t.refreshInterval??ck,this.peerSetSize=t.peerSetSize??ak,this.closeTagName=t.closeTagName??lk,this.closeTagValue=t.closeTagValue??uk,this.closestPeers=new nr,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await ur(this.components.peerId);this.newPeers=new qo(e,this.peerSetSize),this.routingTable.addEventListener("peer:ping",this.onPeerPing),this.timeout=setInterval(()=>{this.updatePeerTags().catch(t=>{this.log.error("error updating peer tags - %e",t)})},this.refreshInterval)}stop(){this.running=!1,this.routingTable.removeEventListener("peer:ping",this.onPeerPing),clearTimeout(this.timeout)}onPeerPing(e){this.newPeers?.add({id:e.detail,multiaddrs:[]}).catch(t=>{this.log.error("error adding peer to distance list - %e",t)})}async updatePeerTags(){let e=new nr(this.newPeers?.peers.map(o=>o.id)),t=e.difference(this.closestPeers),n=this.closestPeers.difference(e);this.closestPeers=e,await Promise.all([...[...t].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:{value:this.closeTagValue},[s3]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[s3]:void 0}})})])}};function Gc(r){return Array.isArray(r?.peers)}var kf=class{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e){this.prefixLength=e.prefixLength??Uy,this.kBucketSize=e.kBucketSize??f3,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfOldContactsToPing??Fy,this.lastPingThreshold=e.lastPingThreshold??$y,this.ping=e.ping,this.verify=e.verify,this.onAdd=e.onAdd,this.onRemove=e.onRemove,this.addingPeerMap=new gt,this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e){this.localPeer={peerId:e,kadId:await ur(e),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await ur(e),lastPing:0},o=this.addingPeerMap.get(e);if(o!=null)return o;try{let i=this._add(n,t);this.addingPeerMap.set(e,i),await i}finally{this.addingPeerMap.delete(e)}}async _add(e,t){let n=this._determineBucket(e.kadId);if(this._indexOf(n,e.kadId)>-1)return;if(n.peers.length===this.splitThreshold&&n.depth<this.prefixLength){await this._split(n),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!fk(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let o=n.peers.filter(s=>!(s.peerId.equals(this.localPeer?.peerId)||s.lastPing>Date.now()-this.lastPingThreshold)).sort((s,a)=>s.lastPing<a.lastPing?-1:s.lastPing>a.lastPing?1:0).slice(0,this.numberOfNodesToPing),i=!1;for await(let s of this.ping(o,t))i=!0,await this.remove(s.kadId);i&&await this._add(e,t)}*closest(e,t=this.kBucketSize){let n=new qo(e,t);for(let o of this.toIterable())n.addWitKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*jt(n.peers,o=>o.id)}count(){function e(t){if(Gc(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}async remove(e){let t=this._determineBucket(e),n=this._indexOf(t,e);if(n>-1){let o=t.peers.splice(n,1)[0];await this.onRemove?.(o,t)}}*toIterable(){function*e(t){if(Gc(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+V(on(e,t),"base16"))}_determineBucket(e){let t=V(e,"base2");function n(o,i=0){return Gc(o)?o:t[i]==="0"?n(o.left,i+1):n(o.right,i+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>te(n.kadId,t))}async _split(e){let t={prefix:"0",depth:e.depth+1,peers:[]},n={prefix:"1",depth:e.depth+1,peers:[]};for(let o of e.peers)V(o.kadId,"base2")[e.depth]==="0"?(t.peers.push(o),await this.onMove?.(o,e,t)):(n.peers.push(o),await this.onMove?.(o,e,n));dk(e,t,n)}};function dk(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function fk(r,e){return r.lastPing<Date.now()-e}var f3=20,Uy=8;var hk=20,pk=100,Fy=3;var mk=20,gk=100,Vy="kad-peer",yk=1,$y=6e5,wk=!0,bk=1e3,Cf=class extends ge{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??f3,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??Vy,this.peerTagValue=t.peerTagValue??yk,this.pingOldContacts=this.pingOldContacts.bind(this),this.verifyNewContact=this.verifyNewContact.bind(this),this.peerAdded=this.peerAdded.bind(this),this.peerRemoved=this.peerRemoved.bind(this),this.populateFromDatastoreOnStart=t.populateFromDatastoreOnStart??wk,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??bk,this.pingOldContactQueue=new Ut({concurrency:t.pingOldContactConcurrency??mk,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??gk}),this.pingOldContactTimeout=new cn({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new Ut({concurrency:t.pingNewContactConcurrency??hk,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??pk}),this.pingNewContactTimeout=new cn({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new kf({kBucketSize:t.kBucketSize,prefixLength:t.prefixLength,splitThreshold:t.splitThreshold,numberOfOldContactsToPing:t.numberOfOldContactsToPing,lastPingThreshold:t.lastPingThreshold,ping:this.pingOldContacts,verify:this.verifyNewContact,onAdd:this.peerAdded,onRemove:this.peerRemoved}),this.closestPeerTagger=new Tf(this.components,{logPrefix:t.logPrefix,routingTable:this,peerSetSize:t.closestPeerSetSize,refreshInterval:t.closestPeerSetRefreshInterval,closeTagName:t.closeTagName,closeTagValue:t.closeTagValue}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMinOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_min_occupancy`),routingTableKadBucketMaxOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_depth`),kadBucketEvents:this.components.metrics.registerCounterGroup(`${t.metricsPrefix}_kad_bucket_events_total`)})}isStarted(){return this.running}async start(){this.running||(this.running=!0,await wt(this.closestPeerTagger),await this.kb.addSelfPeer(this.components.peerId))}async afterStart(){Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let e=0;for(let t of await this.components.peerStore.all({filters:[n=>n.protocols.includes(this.protocol)&&n.tags.has(Vy)],limit:this.populateFromDatastoreLimit})){if(!this.running)return;try{await this.add(t.id),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(t.id,{tags:{[this.peerTagName]:void 0}})}}this.log("added %d peer store peers to the routing table",e)}).catch(e=>{this.log.error("error adding peer store peers to the routing table %e",e)})}async stop(){this.running=!1,await Tt(this.closestPeerTagger),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort()}async peerAdded(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),this.safeDispatchEvent("peer:remove",{detail:e.peerId})}async*pingOldContacts(e,t){if(!this.running)return;let n=[];for(let o of e){if(this.kb.get(o.kadId)==null){this.log("asked to ping contact %p that was not in routing table",o.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let i=this.pingOldContactQueue.find(o.peerId);if(i!=null)return this.log("asked to ping contact %p was already being pinged",o.peerId),await i.join(t)?void 0:o;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=he([c,a?.signal]);$(1/0,c,l);try{return await this.pingContact(o,a)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(c),l.clear()}},{peerId:o.peerId,signal:t?.signal}))return o})}for await(let o of vr(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=he([n,t?.signal]);$(1/0,n,o);try{let i=this.pingNewContactQueue.find(e.peerId);return i!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await i.join({signal:o})):await this.pingNewContactQueue.add(async s=>(this.metrics?.kadBucketEvents.increment({ping_new_contact:!0}),this.log("pinging new peer %p before adding to routing table",e.peerId),this.pingContact(e,s)),{peerId:e.peerId,signal:o})}catch{return this.log.trace("tried to add peer %p but they were not online",e.peerId),this.metrics?.kadBucketEvents.increment({ping_new_contact_error:!0}),!1}finally{this.pingNewContactTimeout.cleanUp(n),o.clear()}}async pingContact(e,t){let n;try{this.log("pinging contact %p",e.peerId);for await(let o of this.network.sendRequest(e.peerId,{type:Ee.PING},t))if(o.type===Pf.PEER_RESPONSE)return o.messageType===Ee.PING?(this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0):!1;return!1}catch(o){return this.log("error pinging old contact %p - %e",e.peerId,o),n?.abort(o),!1}}get size(){return this.kb==null?0:this.kb.count()}async find(e){let t=await ur(e);return this.kb.get(t)?.peerId}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");await this.kb.add(e,t)}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await ur(e);await this.kb.remove(t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,o=20,i=0;function s(a){if(Gc(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<o&&(o=a.peers.length),a.peers.length>i&&(i=a.peers.length);return}s(a.left),s(a.right)}s(this.kb.root),this.metrics.routingTableSize.update(e),this.metrics.routingTableKadBucketTotal.update(t),this.metrics.routingTableKadBucketAverageOccupancy.update(Math.round(e/t)),this.metrics.routingTableKadBucketMinOccupancy.update(o),this.metrics.routingTableKadBucketMaxOccupancy.update(i),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var Ky=[77591,22417,43971,28421,740,29829,71467,228973,196661,78537,27689,36431,44415,14362,19456,106025,96308,2882,49509,21149,87173,131409,75844,23676,121838,30291,17492,2953,7564,110620,129477,127283,53113,72417,165166,109690,21200,102125,24049,71504,90342,25307,72039,26812,26715,32264,133800,71161,88956,171987,51779,24425,16671,30251,186294,247761,14202,2121,8465,35024,4876,85917,169730,3638,256836,96184,943,18678,6583,52907,35807,112254,214097,18796,11595,9243,23554,887,268203,382004,24590,111335,11625,16619,29039,102425,69006,97976,92362,32552,63717,41433,128974,137630,59943,10019,13986,35430,33665,108037,43799,43280,38195,29078,58629,18265,14425,46832,235538,40830,77881,110717,58937,3463,325358,51300,47623,117252,19007,10170,20540,91237,294813,4951,79841,56232,36270,128547,69209,66275,100156,32063,73531,34439,80937,28892,44466,88595,216307,32583,49620,16605,82127,45807,21630,78726,20235,40163,111007,96926,5567,72083,21665,58844,39419,179767,48328,42662,51550,5251,37811,49608,81056,50854,55513,20922,18891,197409,164656,32593,71449,220474,58919,85682,67854,13758,35066,3565,61905,214793,119572,141419,21504,10302,27354,67003,46131,32668,15165,64871,34450,17821,2757,11452,34189,5160,12257,85523,560,53385,65887,119549,135620,312353,115979,122356,10867,193231,124537,54783,90675,120791,4715,142253,50943,17271,43358,25331,4917,120566,34580,12878,33786,160528,32523,4869,301307,104817,81491,23276,8832,97911,31265,52065,7998,49622,9715,43998,34091,84587,20664,69041,29419,53205,10838,58288,116145,6185,5154,141795,35924,21307,144738,43730,12085,8279,10002,119,133779,199668,72938,31768,39176,67875,38453,9700,44144,4121,116048,41733,12868,82669,92308,128,34262,11332,7712,90764,36141,13553,71312,77470,117314,96549,49135,23602,54468,28605,6327,62308,17171,67531,21319,14105,894,107722,46157,8503,51069,100472,45138,15246,14577,35609,191464,1757,13364,161349,32067,91705,81144,52339,5408,91066,21983,14157,100545,4372,26630,129112,1423,29676,213626,4397,88436,99190,6877,49958,26122,114348,60661,29818,293118,50042,179738,16400,163423,89627,31040,43973,36638,45952,5153,1894,109322,1898,134021,12402,112077,68309,190269,69866,31938,107383,11522,105232,11248,14868,39852,71707,186525,16530,38162,106212,11700,5130,16608,26998,59586,108399,230033,43683,48135,82179,2073,5015,196684,189293,16378,23452,8301,35640,11632,214551,29240,57644,33137,91949,55157,52384,117313,5090,17717,89668,49363,82238,241035,66216,29066,184088,97206,62820,26595,4241,135635,173672,8202,459,71355,146294,29587,3008,135385,141203,14803,6634,45094,69362,50925,546,51884,62011,83296,234584,44515,56050,89476,87751,19373,12691,149923,19794,13833,35846,87557,58339,2884,19145,25647,12224,11024,77338,64608,122297,53025,7205,36189,36294,170779,21750,7739,173883,75192,35664,224240,113121,30181,26267,27036,117827,92015,106516,55628,203549,67949,60462,60844,35911,20457,1820,920,19773,8738,73173,181993,38521,98254,76257,46008,92796,5384,26868,151566,22124,2411,15919,186872,180021,28099,152961,78811,80237,62352,102653,74259,184890,16792,123702,224945,29940,19512,75283,14059,112691,92811,233329,20411,138569,53341,109802,50600,134528,66747,5529,166531,31578,64732,67189,1596,126357,967,167999,206598,109752,119431,207825,78791,91938,10301,27311,24233,252343,28831,32812,66002,112267,90895,8786,8095,16824,22866,21813,60507,174833,19549,130985,117051,52110,6938,81923,123864,38061,919,18680,53534,46739,112893,161529,85429,26761,11900,81121,91968,15390,217947,56524,1713,6654,37089,85630,138866,61850,16491,75577,16884,98296,73523,6140,44645,6062,36366,29844,57946,37932,42472,5266,20834,19309,33753,127182,134259,35810,41805,45878,312001,14881,47757,49251,120050,44252,3708,25856,107864,120347,1228,36550,41682,34496,47025,8393,173365,246526,12894,161607,35670,90785,126572,2095,124731,157033,58694,554,12786,9642,4817,16136,47864,174698,66992,4639,69284,10625,40710,27763,51738,30404,264105,137904,109882,52487,42824,57514,2740,10479,146799,107390,16586,88038,174951,9410,16185,44158,5568,40658,46108,12763,97385,26175,108859,664,230732,67470,46663,14395,50750,141320,93140,15361,47997,55784,6791,307840,118569,107326,18056,58281,260415,54691,8790,73332,45633,7511,45674,143373,14031,11799,94491,35646,96544,14560,26049,32983,25791,83814,42094,231370,63955,139212,2359,169908,3108,183486,105867,28197,32941,124968,26402,88267,149768,23053,3078,19091,52924,25383,19209,111548,97361,3959,24880,235061,9099,24921,161254,151405,20508,7159,34381,20133,11434,74036,19974,34769,36585,1076,22454,17354,38727,235160,111547,96454,117448,156940,91330,37299,7310,26915,117060,51369,22620,61861,322264,106850,111694,15091,2624,40345,300446,177064,1707,27389,54792,327783,132669,183543,59003,17744,20603,151134,106923,53084,71803,279424,319816,11579,21946,16728,38274,72711,5085,83391,88646,40159,25027,34680,10752,12988,54126,30365,18338,100445,230674,44874,84974,143877,123253,139372,28082,91477,144002,13096,219729,46016,50029,42377,14601,6660,58244,58978,23918,88206,113611,64452,17541,41032,10942,12021,49189,10978,40175,37156,10947,71709,106894,112538,57007,137486,150608,152719,40615,7746,279716,13101,19524,28708,40578,72320,1096,182051,94527,51275,22833,45164,81917,77519,48508,5421,140302,37845,149830,5587,27579,5357,428725,248187,6326,206760,39814,32585,89923,44341,288753,284443,96368,31201,94189,119504,20359,52073,103216,179,27934,32801,96035,34111,34309,101326,18198,20704,210266,37643,27880,141873,106e3,19414,56614,167714,66483,107885,86602,4379,20796,75467,4987,5017,118857,26003,34308,114428,29198,6686,29697,73632,3739,69795,16798,41504,7207,30722,21436,36735,28067,28545,3239,11221,36031,41889,100010,19247,317673,29495,174554,6424,129725,53845,94986,7955,59676,2604,191497,19735,102214,62954,23844,11872,179525,261436,34492,428,78404,142035,16747,17246,27578,37021,33672,57944,26056,135760,2369,61674,122066,31327,19374,157065,40553,130982,69619,71290,38855,72100,92903,95940,51422,165999,65713,57873,50726,7288,20272,2081,42326,22624,81120,57914,79352,19447,1684,72302,11774,302559,161481,96396,13692,414988,3721,79066,56627,46883,21150,11747,12184,5856,113458,176117,84416,52079,27933,3354,59765,141359,2212,216309,2555,23458,196722,142463,45701,44548,28798,19418,215,29916,9396,10574,114226,84475,13520,18694,34056,4524,90302,62930,13539,19407,77209,7728,38088,9535,2263,23875,183945,17750,26274,67172,10585,28042,22199,7478,51331,66030,26774,192929,31434,25850,50197,52926,178158,4679,181256,70184,229600,9959,105594,72158,73974,2726,35085,78087,23284,35568,51713,155676,5401,27254,11966,17569,223253,71993,103357,111477,55722,30504,26034,46774,35392,36285,214814,41143,163465,1051,16094,81044,6636,76489,179102,20712,39178,35683,125177,54219,30617,52994,25324,50123,2543,87529,58995,10688,125199,12388,60158,125481,131646,7642,133350,65874,3438,97277,101450,10075,56344,116821,50778,60547,98016,106135,13859,14255,16300,77373,173521,8285,45932,37426,4054,114295,55947,7703,39114,52,51119,128135,19714,60715,9554,50492,88180,2823,118271,52993,122625,97919,23859,37895,25040,33614,32102,20431,3577,9275,15686,43031,157741,110358,1884,40291,125391,13736,5008,64881,87336,77381,70711,43032,49155,118587,70494,4318,10168,30126,12580,10524,280104,104001,145413,2862,84140,6603,106005,13566,12780,11251,42830,571,179910,82443,13146,469,42714,32591,265217,424024,92553,54721,134100,6007,15242,114681,59030,16718,85465,200214,85982,55174,165013,23493,56964,82529,109150,32706,27568,82442,5350,14976,13165,44890,60021,21343,33978,17264,4655,22328,27819,75730,16567,55483,14510,17926,45827,150609,3704,7385,272531,161543,76904,122163,52405,2039,19165,41623,14423,228354,3369,176360,85491,7122,35789,303724,4465,13628,2233,55311,118771,20713,10006,221519,45115,71021,35650,29775,7337,10864,20665,21142,1746,15080,1624,32449,10905,105743,229797,7701,3940,22997,178467,57208,389057,39683,59403,63344,63125,54847,69691,18336,56448,3362,37202,18282,29648,138224,35867,10495,5911,28814,26653,31514,176702,26550,45621,11734,4525,40543,73944,121080,27858,155561,14887,44670,30742,8796,107455,113472,56369,75581,183777,240095,133699,153299,8768,160464,26058,49078,103971,21875,71486,44888,17156,9678,89541,123019,102337,3972,83930,21245,87852,109660,287918,183019,686,10100,39177,283941,11274,24736,26793,26214,25995,77011,141580,4070,23742,46285,46632,30700,26669,19056,35951,115575,174034,56097,35463,87425,24575,44245,38701,82317,85922,281616,100333,147697,61503,7730,84330,8530,59917,61597,17173,9092,32658,90288,193136,39023,20381,56654,31132,7779,1919,1375,117128,30819,11169,40938,23935,115201,101155,151034,4835,11231,74550,89388,59951,91704,107312,167882,115062,12732,72738,88703,464019,158267,57995,60496,737,14371,123867,4174,243339,159946,7568,16025,134556,110916,38103,191,80226,88794,29688,27230,10454,76308,57647,77409,113483,66864,14745,19808,12023,46583,84805,16015,17102,2231,20611,3547,95740,250131,34559,108894,8498,15853,159169,148920,20942,2813,93160,45188,210613,45531,52587,149062,39782,28194,57849,60965,84954,89766,84453,100927,16501,27658,165311,103841,54192,207341,19558,20084,319622,5672,205467,98462,61849,36279,13609,147177,24726,165015,209489,59591,31157,6551,117580,75060,141146,277310,21072,22023,106474,63041,137443,122965,68371,5383,42146,98961,113467,30863,23794,4843,99630,30392,82679,13699,241612,33601,93146,24319,18643,32155,95669,40440,15333,34089,67799,142144,58245,38633,114531,117400,77861,188726,5507,2568,8853,10987,107222,2663,2421,11530,13345,30075,41785,118661,104786,17459,12490,16281,71936,193555,17431,5944,71758,26485,77317,20803,367167,158,7362,93430,11735,172445,46002,11532,54482,930,62911,2235,23004,179236,4764,101859,208113,22477,55163,95579,14098,67320,162556,90709,156949,3826,57492,4025,34092,87442,104565,6718,186015,28214,14209,10039,107186,233912,58877,81637,55265,39828,6194,145813,50831,105849,4974,88319,122296,10272,197216,95714,51540,72418,23324,91555,8743,140452,250249,51666,34124,7229,38592,129641,78169,174242,22464,149964,51450,14034,10026,95376,26190,120062,14401,8700,265,31386,143573,7203,229889,61567,4227,140981,2466,72052,10787,10062,30958,6099,38471,30103,23202,208101,70847,467,58934,32271,32984,36637,24107,30771,17109,73353,13650,2098,157040,67366,66904,106018,265380,107238,18535,44025,32681,144983,62505,91295,56120,3082,77508,10322,63023,36700,81885,224127,16721,45023,239261,111272,13852,7866,149243,204199,32309,22084,42029,38316,126644,104973,14406,43454,67322,61310,15789,40285,24026,181047,6301,70927,23319,115823,27248,66693,115875,278566,63007,146844,56841,59007,87368,180001,22370,42114,80605,12022,10374,308,25079,14689,12618,63368,7936,264973,212291,136713,95999,105801,18965,32075,48700,52230,35119,96912,32992,8586,16606,101333,101812,14969,39930,759,193090,27387,42914,12937,5058,62646,64528,38624,25743,37502,3716,4435,30352,178687,26461,132611,42002,138442,35833,59582,16345,8048,60319,49349,309,47800,49739,90482,26405,34470,63786,32479,85028,39866,47846,11649,23934,29466,2816,42864,31828,7410,74885,49632,47629,111801,90749,19536,18767,105764,59606,21223,10746,76298,22220,39408,7190,79654,64856,11602,82156,272765,17079,70089,245473,51813,184407,384678,1576,122249,5064,27481,6188,25790,74361,27541,318284,45430,31488,620,93579,45723,192118,22670,51913,4162,70244,35966,26397,16199,50899,209613,121702,287507,2993,36101,132229,67345,33062,76295,118628,78705,52316,34375,107083,107454,44863,127561,33964,3073,154010,190914,55967,39074,6272,31047,5550,41123,26154,98638,47110,19998,148091,50229,31329,59900,195442,19106,61347,73497,70015,682,45850,25776,38022,148951,6288,37411,232526,109277,27286,32342,9262,5220,16651,23175,46740,129438,78614,121925,66914,88710,127952,5563,21500,34521,10739,14863,191006,62956,17359,16749,67027,56284,69134,43301,35039,58883,54466,60823,404451,75743,59856,86979,7923,34273,83785,32142,7693,268986,197428,282681,17049,22346,22990,92245,107180,3357,37104,96724,49153,7683,31197,43267,82231,164276,23696,20848,188364,22309,24821,158707,1018,22514,70922,27792,45589,59709,10765,736,35218,63479,51987,24275,63588,55361,92929,81964,4658,20122,12330,44058,13065,311456,72224,8337,211229,38979,22590,138478,52757,32595,133600,8838,31549,94412,43391,90056,1585,94802,127271,6223,31889,137038,132910,2165,57616,230152,6080,10748,36737,74579,134062,50525,180532,119270,34556,76155,82394,52595,29258,31435,87820,67996,26943,183878,38007,2410,13526,180297,69856,3503,187396,167700,7838,16701,9199,56267,3661,37407,65994,23767,5708,62508,221700,67088,86978,46776,84434,32088,5612,9149,88244,21685,95151,46750,189612,2979,506311,2594,3628,40074,105039,78243,28523,6651,38058,71999,30992,12764,68261,108991,6165,26450,61961,13400,22426,7490,60890,109623,2070,12958,50355,67979,257096,7213,42578,52121,35716,65461,7516,124758,39268,302,64712,14977,1467,219452,2840,34229,11121,21602,19270,63574,8024,1532,17331,79839,78885,52029,180767,57957,6069,91265,61380,55767,8927,32881,287603,22149,35029,68876,6428,199567,46926,13412,104132,21434,366616,45060,110046,81924,128910,45886,52821,130416,29416,77342,21762,67329,121432,79924,11724,38625,81006,102033,28338,13326,3250,82056,82526,38212,21112,12382,111495,3263,7414,86274,93490,40844,30224,45212,24019,48411,71367,24941,76729,57776,3769,38114,202019,197745,31953,237533,33270,201580,255648,100798,44741,32241,98468,106931,10085,15090,170358,33154,66787,18819,69760,25061,234005,82660,6295,131975,16874,9076,4094,25005,17740,40908,19533,220019,44330,99792,50040,19619,13950,55228,24423,31253,95308,103177,184795,28590,82285,5059,3210,75525,49894,70007,56178,10580,36051,139681,21617,98736,3555,106306,164189,37352,63915,47824,24883,145530,61904,28444,11483,19837,145446,30420,112972,85939,11835,191233,2262,20705,58630,1753,148334,1197,144714,6887,11223,107667,60879,77914,4151,57417,81594,96681,169430,1784,20444,95138,254041,27038,596,7117,72808,13759,3353,126776,21074,55322,27081,36942,39547,139830,179275,4453,713,8722,71399,19204,25785,22794,23923,104114,11291,25458,102309,88396,75288,230440,206396,104551,58447,130857,37247,94734,31548,176529,226077,65159,20104,10096,66881,94191,237909,27109,37404,1520,27421,25220,113003,23423,24884,50585,6286,231877,150800,11789,3226,90004,60642,5053,202400,61442,132531,175329,57138,30116,103847,9973,75367,16452,32360,59119,21246,10191,164804,23305,61051,37348,154530,13214,5468,50403,66754,130976,50559,80515,14436,155492,84017,5472,43107,41240,2890,90431,70188,382,76234,48040,50211,281038,237007,32115,142178,1536,22761,96429,1811,31243,1679,49143,55209,17402,235054,61494,7462,77030,34925,87609,78002,9499,9027,73289,201078,101379,63544,27666,5469,10642,30029,49816,132979,95620,58086,351930,116300,2110,2043,30845,6154,11279,16727,4122,2277,27281,4971,3650,39060,61970,65951,39674,75686,38151,11370,130809,177895,32665,63725,122267,7857,39618,118483,44792,157755,178624,136994,24260,41308,22471,12404,21707,12486,30473,52781,50246,20247,39065,909,56825,103158,128603,31542,1089,41935,32744,12428,37963,84420,33134,72921,208449,42622,168151,127335,147107,46699,38216,12591,94342,85814,31423,24944,2605,87542,67473,192551,4496,56321,91819,17630,6300,256183,114569,202090,33209,35289,34897,24967,40520,43470,5344,10199,34810,14283,10381,10017,62923,49924,23233,64539,13051,35686,19698,11570,135555,120868,44924,87065,52318,52335,47586,140906,245885,109834,78668,9065,46990,25258,72022,61243,40838,4545,146387,10537,11557,17470,36930,68104,46711,24264,79401,81043,18225,120488,24746,84338,81652,28266,13776,21878,46973,1047,230465,73357,95777,24973,210160,62210,58404,110633,169651,6937,41870,9909,26822,191062,76553,27519,96256,239070,2478,205678,67955,58532,20601,50120,19148,78501,195724,110740,8249,109665,27446,30568,57631,31425,49752,32820,65504,50079,3663,102256,219898,23849,211315,14645,4359,91767,9528,12449,49366,7941,49763,107848,8930,27086,50686,9744,10447,81935,39513,46514,1670,29229,6172,22312,137280,97759,9806,14445,22976,56458,73391,34983,93760,174219,52573,33149,59747,2429,136277,75123,165263,91040,7446,57632,48633,97140,246081,84766,151684,79918,93268,120346,54059,54875,77858,32996,103590,45276,11968,19600,25849,17159,132907,42828,16817,4913,99462,103303,27395,5737,74184,20749,21160,14377,77062,131403,158735,10999,27799,77785,9320,34366,51593,61070,33746,47048,29268,36675,30262,53297,9832,82e3,20188,122292,39917,7331,18160,68301,185935,134830,15031,4935,10004,165845,185534,46923,30109,44134,122631,18874,22903,112790,26561,18549,348902,82871,140345,255565,135390,63556,103747,145055,179600,145662,296111,61661,211987,23952,52342,126343,48450,32919,44277,82185,9591,62139,205363,376969,394874,108461,18040,120885,14798,39863,16571,16794,58271,81025,55206,14640,118656,6361,44092,85970,6262,153863,108244,180200,72264,79947,38044,10050,5735,61221,80712,5471,115689,11391,11661,184257,20010,60116,30320,19327,134598,45455,27542,18004,125092,452272,1549,91523,46567,180063,156026,2608,11174,58848,37788,65907,80194,30490,5786,40775,119519,106241,11323,156297,8425,61495,2617,29675,2425,59886,112582,49142,59618,4863,50597,86710,50650,168632,27693,85641,83643,18993,25768,84284,28090,93592,36627,312804,43381,9887,9402,100931,97165,3311,173330,66805,28935,4963,184460,3201,78102,19126,21607,37496,24938,22615,16153,32862,134792,153318,61120,6067,2812,12826,12792,23825,37559,64662,202250,102694,155488,85881,149193,46233,65383,15521,106982,11358,176786,25752,39717,34208,24510,32464,77742,39371,72028,138229,60688,71386,102834,132477,2208,11548,63670,271279,28351,30338,38620,32491,99845,143885,152266,13252,2825,178663,108097,1775,78201,14897,113573,163346,62292,171129,22183,96598,38733,64971,166776,117445,9968,146393,44677,74867,20908,97328,12761,25656,26785,9148,112344,26115,99176,110121,22437,49547,6180,79320,5835,31392,43328,33377,75870,119860,69497,80273,7325,155219,43167,111173,28347,20222,3763,71752,55041,47252,14618,28088,15012,97805,194698,54636,2036,41349,6173,96604,61530,51859,43782,13361,24334,22668,24792,7070,23441,16789,3209,36211,208475,26242,32880,122181,182407,21444,31060,88459,29929,77907,12716,10934,97005,20599,31690,8403,58445,30303,22700,10336,86731,103115,337709,72556,46788,112566,47684,67089,53548,36874,56487,41387,125985,26893,40071,106683,73712,18787,40105,72992,67246,137276,50802,36790,70328,138827,22466,39263,183295,29858,50975,9322,57397,10654,24364,30383,55799,41600,23584,127295,296610,129078,143558,244131,86397,36049,1085,80677,3820,108139,5476,34767,24683,7758,13060,7239,131671,250593,59556,103392,29810,4188,252323,39404,116877,7651,43600,40338,13554,157253,39196,25978,144387,61211,234,50104,6129,10449,93777,9240,356378,274148,4439,72970,3724,147770,78680,62570,115877,40027,40547,36817,224392,64609,34795,165027,67440,2477,37206,23431,50754,164797,46018,94995,170982,27051,7957,22767,3674,27900,56419,18930,60701,41302,2692,84749,339721,61996,111094,80221,50129,1045,8153,62945,19202,8250,37208,37418,32560,79477,41106,88569,33963,36693,5892,30570,1581,66471,49647,11922,160717,29442,5643,114865,82962,95982,132098,22633,22838,94726,54556,28566,205039,162340,33216,16849,35847,221339,94851,26533,71469,1805,3804,12935,45483,71020,36310,65381,192960,34240,35165,59773,1248,46954,155332,96864,4246,388800,16129,57133,74592,44807,442014,38203,42574,80818,91592,26377,36424,65760,977,77387,22628,147610,28018,30561,98454,6969,119628,63648,18170,36854,26601,64018,22027,37279,51395,152934,21153,9430,58760,194742,5330,55115,34158,28917,174111,13171,122326,1526,43896,66094,25325,4234,148354,11450,275,18999,112191,44365,22723,68409,8733,57746,96565,75007,14196,108844,29475,88599,177563,100792,106156,86323,93726,14248,135341,194131,40126,47099,14779,8272,39597,95983,171398,65882,28052,10393,47213,40689,22120,72212,106829,34964,109146,753,648,21660,30047,17527,181025,5619,145357,4085,216883,9359,186951,24779,53931,24545,36197,223296,62628,168101,4243,107313,30321,26642,13049,51059,31027,107912,807,73550,26551,84369,122422,165872,49754,74213,234264,33151,52014,33100,87183,22365,52500,40013,23302,5652,72723,21404,26107,48434,587,94049,168493,96418,32871,70860,31709,25128,443,71597,166253,15670,70994,26341,133675,28280,75491,54756,47955,56028,26182,11952,113272,472197,64640,110753,17919,337,50642,22576,142,87371,53391,93210,126694,15285,19642,85667,14148,1506,42092,52962,33243,11970,20734,135843,57044,58880,13002,219134,22876,64754,232519,4257,43120,321573,24799,64526,124728,52579,81472,70831,276848,17403,74359,23021,182101,74597,23744,148267,12055,7976,5349,11772,67540,167347,65318,18720,127832,108238,22828,90233,9987,259080,118185,73209,79270,13775,90100,137742,90799,70569,15699,19961,9087,67475,57872,39731,8810,134897,131868,146849,19898,3334,2281,167061,91073,60356,467742,74712,188,53179,137679,92769,29241,9537,132595,80119,1041,88962,5976,40171,44911,102859,139059,104558,98987,47761,19272,71472,113864,175377,73338,10857,23402,23758,1591,139864,5644,4076,118760,16427,134198,18853,20291,100849,37423,22038,36677,19071,195521,57445,11069,31869,55718,66882,148490,44,41296,75242,49704,166810,9906,20943,122258,49112,105667,15969,10344,6408,187694,21399,72742,58970,14867,14376,81889,41856,23225,15042,56993,16074,131389,74276,72407,53875,383108,53597,37363,68993,44854,122548,430927,198279,38430,80409,12245,2981,628,2818,17760,37437,238229,7968,46892,2200,3730,34190,65983,37959,112291,87850,70827,6522,20750,73913,111621,41652,19587,2780,58668,25916,85259,18200,168962,95781,42445,102050,7776,57662,103313,47742,96358,41964,66174,100396,29069,204735,19679,27978,7479,40264,22534,61183,36081,107436,58223,14680,23002,101311,24716,124108,12908,5646,31750,40380,14215,232799,102772,14122,96775,61398,50917,12096,149880,67833,598749,124194,155871,49216,790,14677,65319,56917,7440,145744,95701,12206,49405,129269,76199,45732,9767,11058,9047,210885,11051,7392,26307,2130,8132,147526,20802,232698,115660,50060,59789,57344,107623,80343,112676,23291,9866,160971,34032,118291,15719,59730,164911,28975,2659,58046,78480,21854,66209,53863,109085,116045,29021,46481,107552,22130,18764,70254,31272,11300,52460,43933,84738,20721,53869,190840,79673,105300,7561,321817,66924,13940,33281,101046,183181,32176,71878,5678,62924,79535,56646,40303,19559,27703,93042,73368,42187,3670,37376,46440,7023,36816,109628,20680,5940,276440,275233,170848,112093,136996,14984,20226,111441,77693,112960,48577,39370,55707,50314,123404,26570,54281,61372,123391,4857,35928,246740,132507,106646,44241,7196,92258,9825,37688,51197,303141,5590,15476,132986,10955,85782,34486,26696,7991,28813,18858,39546,11703,11365,38185,5716,93555,11925,40121,60002,6985,10976,171384,3887,43394,13337,56346,6381,252336,39573,75042,53711,1028,31781,44295,95925,131713,7214,68125,43571,70954,213234,1628,8760,13391,65485,17320,56038,1710,25248,60803,57399,19839,3870,326,281556,50945,72400,21460,316244,75619,56246,98775,481,13513,55765,50427,7388,123519,32929,57908,27124,61316,101097,57467,30228,48792,10788,20402,37318,50526,155730,34456,158065,145305,17832,43733,64052,4506,35072,205355,177028,184004,187081,68616,35938,83703,10367,36892,93186,260137,51934,89970,4985,23445,26755,21558,7948,78741,23376,124405,85594,68596,57536,49351,12619,56593,132668,99924,109728,71844,71935,196018,65464,17617,14987,89701,143773,33997,8687,22701,33258,2914,4436,72108,85610,9671,49067,2327,82988,1361,1672,44033,35777,30269,24057,10605,82236,616,15793,13919,47249,112086,116698,9484,80207,90574,33304,68624,93127,56101,42210,160929,4827,38995,38095,4701,125119,5027,33680,9236,231236,14135,87837,23318,70261,78893,30151,81482,14332,1084,74256,27532,46644,79185,3148,62615,6981,55672,31668,36825,1849,14536,37446,14738,23779,43058,162749,72199,1168,21346,5592,85932,85302,9668,18351,57135,150360,2080,228015,77953,34670,119302,151751,31009,106725,84265,45214,59289,74178,113071,263206,111009,4021,44449,188119,192629,123592,392506,292847,114487,12831,205858,9852,20780,79648,75767,357014,97721,18166,21005,67950,33226,204009,16536,2987,11335,66717,144910,47950,17262,55060,15063,2934,51038,26775,178497,66008,3427,49433,128592,20036,157553,63861,3089,23015,51210,28696,35933,49942,71135,231518,99620,17248,21835,176536,20676,16944,38700,165831,233253,295625,36723,13023,52745,10907,19423,67972,125868,95473,82875,1183,108455,52685,33417,64095,21433,52438,33191,127809,44505,211823,7810,2752,95548,162031,7185,91196,47563,61721,33359,17897,23682,42806,178101,22874,49707,199897,75419,82456,8618,11171,79712,116847,18783,44190,46564,5346,59046,95032,7893,14916,3214,26800,24172,121453,34362,10250,17408,18888,4840,68696,22831,13162,36005,32512,14800,62357,41723,45046,27247,37486,5372,2564,34261,298500,66509,133920,89138,31305,117697,19097,108304,81386,84106,23802,46411,63304,946,51417,41777,41041,19501,115864,60743,294354,37955,94165,18116,1156,17937,20645,57114,90804,58042,48643,92288,9861,2557,88546,61333,101008,12853,5148,87856,4152,144503,73841,18718,9789,147565,10846,42085,12789,30223,8993,56352,67203,2448,28215,6052,23540,126319,75933,36689,80235,23231,23561,21383,38800,77548,102798,21234,31468,158608,46188,63960,191679,8051,67014,11185,170078,42186,28827,34777,41930,212079,12421,34750,24111,110344,73918,45171,70826,141949,40063,23979,24254,37309,26724,27179,24718,83648,54938,14591,17425,29525,102675,48975,48654,12316,8929,60640,41709,50168,63264,89812,50716,48632,38755,138583,160123,55579,71829,24230,233277,46322,39650,166388,34718,24108,98252,7031,106695,62498,18258,35062,217827,78731,34824,33354,19520,60852,2432,60224,8587,2836,62955,702,20227,42285,40560,95592,62486,11094,53035,143291,18842,46177,77994,1770,9657,107422,172915,32655,128716,25886,25164,156740,119928,165875,85817,11007,89110,33956,12652,65156,180266,8494,36889,19958,20955,96,1264,118288,135769,44754,86671,5632,19026,168220,289120,33569,93821,66144,70635,7687,5642,2714,55445,56636,71545,184182,93133,7332,37389,12643,52315,22729,11014,158742,17050,152889,50178,34601,41945,52136,9948,26914,63548,95721,115951,40759,8960,158258,38938,49232,48325,42234,81523,253019,66128,40978,20048,238048,38760,62928,122560,118532,43687,137472,163689,26680,9878,17448,51035,16211,60834,36749,29178,14241,59868,150086,2305,26477,42422,34342,165341,83279,33894,14257,29928,12743,13957,125571,89134,66712,10952,16507,147839,30146,7249,16565,45399,39874,114565,215780,31990,230881,171477,102,196546,44538,10880,84948,281705,86651,10617,31395,2342,453658,43569,60561,132901,21845,17727,58556,258242,22262,58728,4008,77997,11806,37431,30599,81375,109137,185787,114085,217292,97453,169085,30593,60212,11544,102056,65580,2384,91655,4855,95725,7295,157994,16228,20669,53276,141590,105246,17334,25440,76067,17967,39321,38911,11362,28559,63807,21627,26468,85816,40120,1025,15234,58319,69516,66512,124548,75845,78873,22137,46681,51242,85683,32909,76747,35555,43396,101465,1765,73094,1077,2962,39028,66777,57831,42048,15828,13962,36041,63657,52412,5242,58846,2141,5506,219012,134451,3936,182230,17558,17153,152237,22621,49377,170216,35257,68233,65374,6510,11126,212151,7184,2480,22517,3437,33073,30156,16557,3768,55067,86829,91e3,12350,148650,66017,79424,70885,49066,28250,21369,51213,34533,11510,3258,18176,18465,84413,6315,36411,163765,4346,356,107618,598,13727,285026,162695,8749,14583,7132,63521,184253,32378,25991,5604,30961,53675,4874,84693,5086,34811,26978,56564,7904,33519,51221,113942,69253,6664,125563,22055,220680,102008,742,51930,19494,176108,44424,35123,13025,75685,11759,74335,22250,181453,131147,16984,132115,154311,11991,76452,52609,85351,196,30969,9198,74919,2529,56838,71779,29187,116304,3504,62330,41190,86153,28393,254926,104228,105189,13264,84359,3574,12415,8534,57147,10175,188174,59504,60932,66318,16407,107921,17638,99103,49278,28403,39786,145865,8462,3558,43406,142271,29139,21989,36552,93955,72365,7176,13556,106185,37957,321774,17782,129017,51154,27938,24952,1935,39366,2791,33489,41582,56078,24558,9311,5449,218786,27808,190429,68013,36020,86003,29735,3404,87348,119357,115714,2324,86796,81973,40992,43376,93621,28784,16808,36367,2517,2909,191926,24978,55303,53308,205724,60068,3098,21375,64784,23949,26579,63121,12319,80145,39967,97861,6757,70143,67642,37082,34698,69140,122883,46151,62187,80934,429,19437,135071,137885,222647,13331,154065,327,61778,74257,40116,37493,14855,85079,237641,42342,102164,199965,71204,4662,29368,5042,113914,122214,8955,13149,102503,43173,5659,163787,69003,307084,63392,171080,21390,81918,86666,36622,24126,28887,5736,28054,207170,163428,79891,346467,95363,38980,111806,80828,9200,19288,294896,114468,87405,111715,141705,7015,72754,68463,48738,243147,33397,101210,37051,98801,82847,20397,4940,185559,18716,54718,83491,11725,40803,1128,12128,23060,5174,7745,67007,46701,1571,27807,180186,256996,18975,16837,7877,212758,250379,15440,87954,57755,24719,124057,83461,258,50864,8874,29038,71289,31627,15429,9005,4061,113851,107716,82819,13651,79656,117851,17539,111446,12938,39724,190787,4352,15402,21070,62708,8539,23777,73853,13552,38810,86117,16285,56400,1718,75342,142863,29033,378,110113,180321,32586,23606,26393,160984,207987,23783,8406,16904,24596,47274,11693,46539,60524,78595,48423,31718,20170,9009,146268,15183,191060,172765,1349,138436,37365,10970,40509,225817,20021,70394,152138,21541,66559,66544,89352,2725,17258,91345,7313,3815,115868,8660,40362,4071,103524,39388,118275,21950,6549,38226,32754,209574,29201,43495,18028,20296,40597,18370,47520,202450,24134,2219,8195,69545,38041,136934,46374,19041,159811,84865,58620,846,98749,13569,30714,97246,32186,4479,27355,92973,35214,151491,75963,37631,1561,27200,238083,23182,60756,12291,25766,39355,102333,87362,65741,59906,19538,201575,48772,102938,24438,292580,39964,66366,9004,61379,50548,37622,38732,28379,68180,76622,17488,69849,5963,7219,48143,43413,55358,540,58691,29506,19245,52193,48621,5518,13048,118625,44755,191081,42061,89197,2259,60665,66994,71210,51232,3585,142096,55024,7892,8345,58653,463307,65658,64319,137941,136323,53499,12746,43492,6978,95163,29925,60175,5128,7352,41463,184756,121146,20473,18426,4598,5309,54580,14277,121151,10691,56711,43880,63409,76682,11830,172218,264898,32632,66536,81062,31649,25788,92774,60222,11100,63159,9432,224657,25240,53613,152,138620,163829,2397,85345,12501,37507,64932,38575,43522,65789,80198,78796,35226,3851,108891,73311,3060,28391,93671,39663,46142,30982,66041,37281,68157,26553,71872,81142,211527,39747,118119,22695,2859,11066,20232,168911,7933,197005,17066,111071,44434,133994,120798,12766,227798,45756,132852,29917,36076,55352,65281,129800,41958,18944,84678,18580,168093,132621,39997,54092,27740,32354,3770,114118,103242,43918,15899,18574,145944,3190,123469,219903,24169,100571,62403,16776,92779,14535,17168,16475,14304,37231,1712,28218,242754,61688,28980,1318,51359,222657,99200,67989,31772,23932,35351,201251,49041,27306,19128,40135,3986,77333,19649,120683,151927,21081,7076,78375,77501,101599,8011,89585,96715,58179,5378,102138,106793,26051,217276,4197,16297,27014,46721,13322,22806,5278,29629,70632,9647,71519,58818,40603,128530,8903,36770,56900,31483,26935,43845,34265,34920,87658,6114,84767,64250,47318,50720,19264,162514,33357,13117,6705,46696,75032,71054,87004,42035,69138,11903,99854,102328,19611,34525,69312,6431,49842,101600,133178,108751,41829,89939,225664,48916,99556,9195,130387,5960,36857,116724,53518,94002,39077,53996,6945,22261,64291,8314,152785,57588,16522,9091,5048,87671,35441,39509,1945,12423,158923,178413,37549,14095,1475,73188,62878,4819,24012,68534,42606,4010,120809,57497,59564,101758,103718,32701,80116,12345,95834,46918,21468,53213,15665,31200,3867,5140,96013,250744,21016,10069,13968,35449,180829,27683,39704,59956,22893,3115,26293,32785,75934,62445,141162,62720,2018,83638,19949,114012,95006,3330,99829,130935,309272,9565,55874,121727,37017,23586,319858,40970,27602,8625,112329,61060,100088,118525,25922,16232,1907,60671,51583,44553,80993,5262,94679,8676,940,20736,11823,3020,16476,12340,152600,97416,3703,25744,66826,16245,16876,46446,84798,74227,176020,45192,61955,75496,23946,23626,40372,26036,6149,11822,30582,16541,41914,82385,232823,40921,80773,14930,3631,7517,39619,4348,36180,126106,138939,62611,1477,113512,47321,25052,14546,118881,29060,23589,128322,36795,18401,137921,104699,267929,36194,172791,18113,4766,188215,30083,332586,94089,5805,77909,22194,68234,154976,43220,40660,70001,184893,138095,11128,103010,22663,5108,212615,8485,5565,49222,54614,26530,42639,16319,55062,152662,105595,21114,22216,10294,68158,10436,86950,7206,62115,3977,3657,59874,456,118617,18156,106663,112229,80992,17442,8217,55551,5133,34344,251927,51153,39364,201321,7816,66803,23057,156724,145664,14276,95705,979,2796,6875,13429,212525,50602,26276,28284,3424,19465,52397,46963,31420,51399,206476,92317,48851,637,100820,83349,10317,60227,21972,6908,282439,32857,224767,95629,83882,42106,87338,69757,29840,68709,37665,45244,114577,49188,175943,54009,186746,106158,70168,3358,234002,50555,9221,129338,9562,20118,32923,78479,118280,65752,4977,10474,102174,60947,129006,10570,83451,8598,8078,159367,123785,80438,16742,5905,5281,181513,42402,6977,163136,93179,42191,14968,50421,112401,105440,33456,57347,121611,4221,94954,36517,24046,27796,6255,33394,72990,135408,116627,1233,57874,25654,95419,68156,401399,313338,55208,45573,93124,119251,47200,38196,11909,130667,45391,73904,64964,167846,4137,115606,52036,62214,7969,160925,7187,1132,134835,40309,73195,64494,80472,444841,61111,26500,45323,40743,53625,52797,22659,15631,29739,36706,28841,39147,102836,26794,10536,14845,87305,45874,12241,127587,83833,57183,79722,30844,41304,84655,20825,92500,3722,25655,27811,10157,81634,31362,34088,92487,70123,22190,185100,72658,139035,192523,88241,2078,230490,44528,85638,100198,22088,29982,291233,241062,13865,4445,137791,37835,107218,31726,19718,38234,72528,23046,19177,66695,5109,17251,28077,5617,21554,47839,72425,133825,1486,73065,181275,141508,21768,62971,63082,2512,34200,9904,120309,6392,91243,68416,268253,41199,116757,138551,185526,41246,28986,4093,19057,17295,4148,245766,122360,35356,112075,20301,75441,10998,7977,19769,62922,937,63547,100196,26427,157820,20983,236696,22935,8140,90315,156004,47204,140973,7726,45097,52725,22636,23436,257282,105247,522,88389,216031,202204,46812,211666,19693,68828,81691,45925,11256,30292,372,5236,167826,88328,232776,151611,5360,82104,18841,80393,25465,18285,20320,72377,31730,33160,45803,38715,27705,37379,24163,18360,103586,4015,32305,269494,91252,20080,36567,54650,7797,57073,12650,31164,42209,6375,261663,105528,81661,106002,2800,5375,17247,43151,4442,15727,194619,100855,144898,62320,78465,39929,16454,1967,28311,61363,17219,9395,8745,121445,76939,80385,162380,22009,54191,44248,16299,122830,48151,74429,78291,64755,14238,44966,2511,17712,67954,93583,829,105899,49935,84750,11591,33185,85447,42717,27409,208542,28965,62052,52525,5597,25694,65594,16343,63224,276188,12475,9331,127507,38522,57287,24128,133161,79723,105548,133695,48917,27558,43278,46520,13778,141954,110785,83366,17715,46317,105763,66298,147013,41086,94180,16478,220447,44611,730,19722,78975,117889,125643,26254,16574,18480,65006,15806,38549,246418,46052,36056,8440,34984,30170,3163,59800,4458,115442,4283,41970,33507,104078,1653,22,121158,276486,3655,6338,24048,133421,23641,2161,24422,36006,8086,10675,181474,12307,29514,59143,14729,52509,87128,122470,19446,80852,33314,24573,119864,14237,9652,57779,6612,51851,15284,98871,90581,124466,156831,21190,22015,71380,161906,87247,69201,18392,17908,108470,72962,40719,14338,17911,95260,43339,20610,78916,20710,72451,11315,31448,17263,58853,178878,48111,116002,45497,80506,82605,85880,36300,121755,25215,36118,301929,88728,405223,276136,553,34704,212438,49970,78329,922,20711,25036,257130,38295,145369,18128,15385,30829,55656,48345,8012,3561,28004,122041,192900,58338,112508,41085,29976,87040,47117,23905,4336,92061,138880,97407,42083,172121,6256,25192,172671,5,93568,1420,12677,31605,56743,40620,6015,78415,231077,31298,80026,13902,19048,24924,170586,32955,176119,87859,36731,6773,27711,24658,26475,115216,133207,93250,95820,88522,8317,5714,124047,55219,86860,19677,23961,22928,162209,8904,225992,359835,56084,96201,29392,96558,86071,93643,55114,13347,8183,95129,82012,2017,123336,34219,115554,157159,47747,101684,41008,18735,193781,104151,226906,7552,179874,124113,31159,21162,44010,14771,51268,166128,31382,73124,77438,92830,205709,12113,1292,38937,13114,1334,2118,15597,69581,14449,21934,76618,48728,67038,14967,51495,24243,87736,147249,26720,11119,46063,43749,5843,44147,152629,133428,65703,14269,45604,57982,28672,55616,45957,8438,95433,37698,220862,132034,39456,61870,4161,26501,73560,56418,9845,4654,20916,10456,88920,119358,9015,65931,96507,48029,38534,21676,109081,43078,34943,25089,6131,28766,23665,5477,10255,16695,67,45778,42443,42770,29534,23733,100513,62617,42630,48746,14191,43753,50295,26007,8792,57243,43119,54725,164253,58250,112304,131796,25165,4651,3188,24831,47748,3705,19540,13211,102095,5593,18699,23666,32005,117571,33541,60584,74573,86311,99443,25172,27222,168938,7143,11853,53560,18834,19960,86522,28217,53266,117700,72989,34323,18721,66450,34346,74056,47217,202002,46269,9429,68582,75458,37823,82843,96652,32549,145144,27958,19820,158086,31955,201406,135379,31207,192545,12950,51704,9094,248263,76147,64028,110009,79407,89345,99284,223492,47966,26848,15359,201137,2861,110507,71231,72297,31851,118777,71039,151051,240855,16333,50766,14727,7939,4149,80908,418780,88378,59276,1327,7284,38576,79814,65820,42199,84860,49574,62596,12396,70598,40117,8648,7994,16836,7630,14047,359699,106878,525,29037,28064,13380,11675,50669,74216,103539,180314,27449,56299,172344,19274,7301,246099,32043,19422,36506,129317,6806,30140,4614,46639,66926,932,86600,6322,27847,233103,10541,39025,34887,3517,12972,26220,2031,66561,115015,48658,47596,12714,33845,3893,16165,35237,89983,14769,11962,147224,47018,29977,27979,5552,82338,86023,131368,1218,24853,237840,132193,15455,40873,3668,65351,53388,15229,59889,272245,47934,11858,34347,18038,90853,86981,300602,19343,114181,29362,84921,6095,106059,79472,38015,1206,48741,6208,8e4,21916,17423,6002,108083,24479,34931,56661,9511,26995,100694,163853,35997,81254,58321,18919,171890,86877,91341,74503,70477,53412,7027,59281,39892,131302,5864,15947,61301,67466,162369,47956,27874,35624,282324,21270,111847,102548,41482,30955,116737,28264,8592,55458,22301,75090,29821,30697,51709,3041,19208,8038,24634,30467,87509,126428,19389,18814,152686,20701,83474,45832,80891,105808,11378,153223,120770,98186,150633,49838,9141,12755,30962,5260,74490,21256,31678,65062,33326,289838,187831,20595,89768,2805,58535,10844,70085,12090,2451,138068,98544,24461,4511,6754,41684,28203,3383,65355,82833,30161,83924,234361,128424,28921,222594,33975,125491,34069,11508,67464,144226,41850,98703,34371,7901,21254,38398,65651,23549,53883,213340,123269,12028,71764,177701,28758,2623,68395,11549,15232,68603,9660,63116,36079,57093,31198,20475,48467,89984,35619,186847,107469,31389,43631,73867,41949,68841,114250,1605,30564,63403,17588,27680,99533,12641,70325,50428,73426,78379,11855,91651,72081,91720,60198,15743,12065,83398,140046,6761,46598,45900,5068,886,62448,148968,37347,19405,9680,15819,43496,63370,75667,163700,37639,3633,22774,34341,183131,134335,37200,23915,7054,14194,12970,26438,13350,285521,25594,8219,104410,91039,168804,138480,149734,15907,33818,61132,60082,4622,110187,56736,13551,73571,3945,73463,65498,17758,263266,17593,2710,27585,54469,38200,45367,63754,28881,3473,12791,98287,31895,65787,4463,94536,24951,36332,59901,28803,52130,86403,7668,181822,74831,18977,9850,177206,145485,109798,7292,31421,26280,77211,58511,12507,127004,11113,147,8729,56208,43066,79926,129937,31345,83947,39915,46146,98763,42566,1337,13192,18323,105163,80570,117753,16555,72883,11077,159438,40764,70933,83329,26066,12276,72059,21655,173836,126713,69454,153482,91585,70644,102558,110483,6764,127864,190133,3961,101798,20945,71138,82402,90884,69669,44753,923,16939,59700,164258,25969,27082,31399,43846,6306,246093,51342,6153,151581,202801,182731,56475,162188,89426,141356,14355,121815,27536,28023,65257,77523,106668,127314,24947,12790,38796,169698,23555,10725,44573,183083,42088,62716,43265,105958,32050,44067,50118,1668,3874,6243,318411,16599,1691,94999,52378,28671,216728,123258,2059,34969,69225,5913,136280,171443,141515,91662,22175,135282,80020,92270,1663,4808,4482,3495,34691,5226,109830,108512,17342,107488,11606,123190,100247,29666,146527,113014,15794,30894,13224,39585,243192,22351,9903,7836,47699,11078,25468,122291,48821,26780,122679,75521,81450,630,4895,92900,55074,74293,17441,3563,111657,103102,51613,12318,52370,36191,68245,34269,40445,41354,122901,168604,182500,62012,42557,11259,24428,115113,86345,12362,3909,78430,86852,134602,20459,47853,93879,22577,7659,3688,38555,13349,17381,56715,91639,12493,10895,92438,3142,37057,28928,2004,36427,32268,34222,209974,10432,67436,41989,173518,107930,27079,62729,30908,55558,5828,45031,14902,53546,8204,144263,60255,14520,88212,86582,109589,69356,8064,47449,8505,66558,16886,4844,52817,111260,215129,12941,91118,650,20770,6273,73089,40618,62790,2873,35002,14023,97208,19386,102646,36993,143736,135457,35385,113601,17893,32627,84439,100619,56016,6581,57264,172160,45452,111710,203627,70131,24100,322787,1996,35665,70078,22358,90922,83658,4097,63200,58499,14542,99153,52159,6615,12414,63415,31986,16823,1579,65405,137809,8841,16898,48082,259,33014,42375,12260,179850,73667,91389,98882,29532,17311,326251,41092,5928,20742,44964,48019,43505,9317,49265,6643,192712,48424,163487,19861,20113,70848,31928,105333,23685,78563,14638,54755,7158,24142,44018,20774,125255,20331,24280,10163,1285,2336,39851,4299,117269,46714,63816,87779,159624,11731,9971,990,137317,108831,50994,74554,162680,23640,131597,146962,170620,34829,91205,21184,1913,63616,18427,93136,156592,17519,67565,115882,138220,78622,88535,18115,2711,33554,109492,54298,971,24914,25863,36363,45715,27099,194995,14299,178181,111488,72395,322385,157719,130787,11897,81843,83999,11369,49280,118604,40922,61332,110343,53407,75639,40582,300440,54722,25637,13694,48248,48278,194521,56203,52779,48783,72627,10953,376,16733,280238,26351,230789,15132,25168,137270,3588,63704,73376,94031,74284,19443,159557,9697,39901,13351,119050,15406,146455,3460,29556,75195,37673,102524,92329,47289,98413,15311,100684,56345,7116,95480,11590,7200,167,23610,58426,17730,136656,27944,53151,2701,8824,103124,3017,90744,113588,53216,79736,65940,26931,498,29568,80540,143543,21292,1740,59268,16561,180816,42323,50174,40890,52866,10703,57169,4700,17191,4424,93511,49698,166650,26972,48631,165169,82879,69326,202970,4007,2376,231325,139592,22119,62851,37504,68816,58345,67398,186643,43331,277416,53749,15746,23102,17432,4793,151138,48822,54265,48203,198688,14305,54287,2291,18018,113378,123260,7180,97549,87027,120085,2920,76080,8190,102005,5641,64580,14955,59802,54028,58884,19367,81779,412567,85957,97053,103637,78871,29364,27637,141728,4767,30686,112738,130146,42745,12730,105040,14844,232,210944,36581,152317,135543,29744,3129,55647,58149,46319,27265,17499,28005,59948,7170,34138,5702,293047,110892,408,91760,218674,18469,46095,81403,14389,4610,35672,73060,11006,74848,104820,118143,190357,20043,105358,141735,5115,27093,45924,123073,52599,29433,9616,238350,78610,24851,58858,26769,31969,24613,18294,4982,32735,39639,143563,112073,202205,12567,4873,88601,44897,81503,101648,81362,34662,85277,17574,48173,21435,221188,40215,39576,80786,26544,64668,81841,10731,37733,247986,149188,127703,495,18382,54388,72446,43071,30974,198723,89608,41360,190,33045,8386,31658,19992,237838,119015,137622,50890,100913,6460,116233,267230,26621,104129,65114,14190,41542,14888,85962,23342,23041,26453,43725,71809,45186,4770,46452,53894,56616,221286,18973,9038,109299,55365,19366,26863,18808,60909,69353,41738,83463,12100,68561,72860,3980,13796,49340,12332,31311,27418,4255,53430,18976,45523,510,14224,30477,26581,4530,3651,101663,139840,22709,150861,31996,63923,120623,262522,3076,10528,2929,14672,130238,18087,9816,121894,100308,25085,55111,14565,18952,53293,2042,369988,23674,61789,133529,28783,108293,35477,47119,36448,71049,40015,33055,78598,198442,1833,159937,40654,77444,189245,113153,8621,18599,38553,35223,166072,2375,11659,21786,89523,6032,12116,63046,159398,18454,3678,32521,47626,11411,103527,38896,42946,15696,26370,10185,8413,37080,165583,4331,63555,14907,72220,50056,6623,62236,36565,49783,10049,17503,100581,55951,146244,24724,9626,17969,25524,109300,173965,99994,101056,46459,43647,53737,277968,8347,123521,74858,33829,44762,77574,877,81377,222525,123532,30602,43881,53145,2973,16284,81940,61281,127044,63620,9875,14756,114829,19032,9202,52759,119141,23928,120551,19607,3599,33401,76821,73233,117430,39968,36539,7071,5446,121735,194059,15206,45283,6706,15603,65615,1207,165723,92275,34773,104447,8396,32353,205240,164323,13600,60555,79205,25532,22907,33410,57480,107111,69630,32137,47832,70913,33161,20321,2371,117348,10714,86246,1625,11763,17900,268,78457,99175,97940,101092,86660,32221,14041,128504,125080,53744,124263,31017,13897,403,31859,21964,5633,111630,5547,77329,17961,18241,84995,25984,12983,67491,62168,47262,5241,297,51191,7351,8967,147212,82060,16821,782,11033,82431,62957,5026,43459,77963,203477,53528,6247,191852,87774,74164,215654,13467,1522,219964,28589,244104,16242,117821,67725,72570,156792,17186,15979,26990,44128,193014,35276,57125,16212,166451,68017,6905,77608,16364,53777,75921,76426,37975,26203,269296,64099,84122,12077,38533,830,4407,20139,963,43028,38902,42911,37503,83343,85045,16979,1165,60835,137387,58380,86990,110066,134540,56331,193845,81238,17922,163093,38744,110641,12502,56404,34862,26865,125964,12965,111648,25547,7771,27196,136980,9555,29551,107158,57885,18831,37705,35505,101742,13970,102109,62548,124657,23328,11124,89592,146376,248050,6241,22033,18337,80685,29898,11908,216623,67721,106162,146610,21377,15085,91552,42041,62560,122532,125336,102365,121537,142559,29693,223919,11515,110495,18776,22494,5895,185059,103592,229351,51220,100102,37027,257855,29359,54123,36066,106493,12244,79258,32002,432,56205,94836,90182,6726,14762,29391,48938,26864,38083,60364,3310,60192,14766,205567,57504,110760,22649,24666,46333,21517,3430,13135,28873,27052,158809,11597,20529,6695,23138,22960,37137,45574,6545,305877,43423,26153,24769,59844,14501,10430,134352,56169,13213,103432,49523,35181,13435,12408,129475,64620,230854,77390,51990,15653,83248,33466,44571,117828,51481,2187,10559,68019,18021,54895,48247,18354,33737,4554,108595,37288,39767,116707,9175,3726,108877,21616,83684,49862,1938,8543,276466,20134,108498,48770,102254,31914,131520,185291,100559,51890,209,19526,76471,50544,71814,99351,8172,198526,28816,20419,9109,98389,136777,76479,75596,30635,165417,48216,120220,25955,211071,39314,24308,32164,2559,146280,43403,9233,17947,90585,1786,86920,125662,2457,64741,32152,32918,122882,78538,44001,31723,56426,23375,103172,88177,145697,52506,49319,68016,31664,41488,18486,110400,7030,28241,986,109199,19900,42147,56864,65287,49183,7858,24e3,30453,840,16673,25907,68916,89927,6309,158335,36407,199737,130464,13137,59603,201778,195292,21015,42466,179062,172561,89492,11075,180407,31868,72493,20998,60217,9865,19530,39274,130266,54539,21623,12535,13505,40641,73375,4087,85633,2153,3117,70680,55788,92096,47509,98493,37490,271936,151475,3032,16171,96642,34106,78425,125761,19591,3366,19316,54508,24183,50786,194248,91528,33253,34622,108355,41741,705,3814,3883,108929,13203,67831,10142,59754,68208,29128,84820,56880,38794,24972,48571,40821,40476,18137,164254,24064,236309,79181,11282,395,39169,2013,51587,28551,9645,701,109513,115899,113566,12762,62045,58322,103726,41343,40866,244102,143816,2490,70346,40973,52618,15412,30720,104315,38917,42027,93676,17513,107418,20706,123890,13399,97727,24044,87962,65606,44250,98044,65276,74790,101473,19350,91570,1326,87790,172042,7577,100813,86896,85891,41512,108130,27794,14875,71431,12835,156250,58135,3759,22476,42176,115873,34686,56523,73643,108505,51491,20838,12721,32863,45700,29496,13700,34294,55360,29206,155942,123812,7706,163234,203,132720,49358,144431,8130,175788,35818,3270,76832,25710,54095,97274,28779,94621,74396,19092,128242,58067,20885,14670,93255,15107,63291,23654,126900,129421,59294,262659,9798,3251,67344,28600,44629,50672,29072,26999,31526,23183,49175,165843,175455,17282,175411,32022,45989,30298,90690,78118,83156,23749,35636,31317,7069,80381,94561,133756,14960,97404,6138,41065,78041,32843,16601,34123,9559,146529,123377,96395,54441,42012,84257,123541,10745,22139,106459,11720,150883,172651,154996,110538,4728,53447,25704,2009,71152,119354,21166,66604,1429,216162,8637,122250,63520,27180,29172,36124,276428,107787,77184,4680,14952,104903,24418,14793,51561,52931,8371,26342,48526,7118,92066,67280,40653,8847,34597,105438,14198,50163,61188,146286,50315,41205,170829,161496,585,197359,95056,1687,365794,91349,48507,5804,49263,5146,104902,96365,117343,132222,46084,96919,16875,8073,262381,79982,52663,13928,16056,153908,15145,109256,132308,18763,24904,167644,13618,40750,18686,147124,114709,150038,52849,2938,12568,48617,8778,5459,44202,44591,74914,17183,248689,13878,7822,80060,23116,194037,18487,2067,7798,43077,33678,244028,31320,74273,2794,19466,8218,36280,183997,48124,19416,29656,19280,98734,7715,18311,30701,133602,150307,126956,7378,2933,79903,13178,12593,86571,26604,92446,13574,44205,65699,427599,21118,8245,14407,27877,47936,33542,7916,26460,117762,21596,37818,2249,127359,209394,60044,47677,308089,36791,154971,31417,6998,150042,174360,12255,43009,29335,48739,3912,101398,53340,2580,146939,151295,45360,125275,15273,45383,27456,48761,23314,8750,60801,85823,104759,27894,123685,66968,39480,26917,55290,83305,2696,98390,57569,145853,340733,4919,20024,52268,30884,7413,203685,70989,112855,4129,50536,349518,68205,332641,159581,135361,236026,37563,176404,64899,6578,122033,63871,1850,85234,82089,66124,74145,121098,107351,12687,36881,117334,13136,14698,85933,93866,18047,32620,310,15094,46e3,88451,23632,36645,27940,87618,80520,58892,20976,27702,140090,96075,67841,103292,238964,87778,107338,17019,83427,67522,7302,8261,47570,116787,8730,80484,61772,174422,56005,131193,52875,14588,28471,59817,9586,15720,158155,51307,109734,15196,11025,59331,3884,52626,102602,84797,25158,27314,4437,20488,76214,189248,35023,114952,157376,2827,62439,102878,129749,36405,10329,109339,108633,36662,1254,13267,5470,87105,58004,15397,10434,159667,21864,52022,179464,3013,32147,31496,116832,18494,105502,129227,107267,50033,13481,9954,24267,22141,16257,116154,36185,950,115685,11305,176708,2048,178671,112573,287867,162328,497663,95170,50979,193861,50987,30368,136257,31830,46549,15119,169876,23788,17462,249887,57377,1949,35448,14791,43769,210091,3783,34612,282103,88380,245190,5457,20491,98908,11402,86899,117916,16028,162584,60644,320177,156096,31065,55876,22e3,77655,9992,23397,13757,317623,63978,215255,2443,17648,93231,27388,104529,93807,55505,140477,12046,112040,70887,40152,94365,112353,25063,114679,266061,71248,119555,15589,2244,617,14129,211431,70110,100652,7777,4383,85911,89221,21010,120615,58357,86405,37554,41647,18,15143,69662,60491,14714,186134,148344,42347,5410,168175,44535,42449,343894,129417,99682,20659,27272,140483,63455,222159,17536,13722,42637,62324,11976,114691,148109,2283,32057,182393,4295,147364,33705,2075,44303,30274,28331,63740,69740,29148,10346,44862,33716,73937,153333,12930,38784,247159,2515,41053,20256,83368,256189,54639,115240,5096,24661,175419,153552,26516,141,138176,63885,34115,47222,55709,2765,28479,38875,236608,12229,22921,77291,54426,45388,2860,57787,114579,295139,105782,17826,71066,19119,54364,69385,16568,12323,28057,33346,34919,124763,155533,101386,31644,8627,49001,303600,29868,63213,9103,77280,71333,9696,138789,37059,24823,5057,21352,32368,114208,56803,19424,10445,58514,8661,209508,26187,171838,10460,63454,14016,122504,41328,21329,46618,32493,38225,7855,31763,7945,29876,8734,6438,24205,97490,139977,130740,47323,33195,85390,57194,13813,60600,21313,96251,7699,27584,170521,139271,1363,4402,336738,129223,84983,69150,13147,3590,163929,207225,155260,55916,20288,4503,8398,98490,11773,27512,37113,84976,86558,28365,11756,116005,182148,13733,115313,47644,67208,85069,9347,14995,226141,14704,101835,41159,35314,13113,63526,214039,29978,50446,83339,17440,129441,72522,118641,97816,24907,73844,15717,118884,167255,96509,162793,30847,36849,51297,78974,77793,10427,1873,2972,9999,35074,28190,64297,146836,46298,60038,163007,108919,61219,2403,75022,127339,4233,110389,69022,9833,128097,88016,79390,222936,22570,94657,28462,56956,38803,81536,30474,152794,19566,16481,147408,74574,81895,20731,1918,1366,76367,187321,54494,24366,21690,61696,33283,107477,77499,31112,414383,74362,18463,218441,120929,59848,258629,201924,69269,454,19989,13054,59894,3623,58908,20681,35723,78523,102680,38988,184112,108087,50944,132704,52966,21699,18860,96349,201411,82697,85395,95658,5093,6427,177894,44191,32755,26961,155739,6249,31310,81030,26574,84311,120155,86730,113535,7424,48888,13516,45747,98098,20077,183995,81945,43210,26704,40420,75831,45648,11180,6855,57927,65528,124096,34851,2598,156633,107572,127352,38169,123845,60142,62722,105584,232364,23211,68120,1601,22169,89299,747,258039,80572,7258,152249,11862,101204,8834,121434,33761,19175,133142,46343,40178,48723,3589,41977,30210,38868,62257,10087,82658,87827,90646,16415,47552,351723,28298,72225,91146,272760,1701,11295,1652,109651,300747,51863,198800,29446,11794,32345,37538,22356,33102,37590,113544,37970,11478,179743,25454,103417,59905,221970,105196,145604,7817,164809,102360,16974,75840,255333,56902,6659,1954,645,59400,67769,7689,18675,5215,13793,20536,27852,3387,29523,259718,16860,94625,43143,29245,15848,233581,22685,63631,78557,22836,133302,84513,1348,51826,47129,98836,58284,1830,1749,94642,10933,6145,12506,10975,13879,103781,144434,10268,28409,32346,52968,121567,107374,77268,23686,35097,10501,155275,15303,47136,21102,168741,55332,90385,15996,84817,681,137803,25054,142275,6163,38175,8056,124296,240642,65621,4934,178205,16101,62803,60964,18230,100622,76465,44689,14545,9543,47514,16852,93380,28048,12047,107106,37575,101485,77047,57326,34819,96137,76916,6469,46264,115983,75768,87668,69942,13027,165,8373,114231,26434,52844,42799,182044,23580,146254,38081,43236,33883,146220,382894,14606,46035,36481,166621,35417,95382,2957,59384,60428,36358,66343,75378,22267,22950,83528,17577,56474,25285,4619,179691,75355,95836,53295,34588,171410,4487,14679,84208,44015,18562,109133,54101,11531,86052,174479,303157,28095,9953,35642,14564,39802,16145,77606,117406,53038,121117,53624,22062,1212,7632,127157,237292,189087,10478,127345,102515,181997,86752,87623,10966,121602,68783,68681,83042,114380,138349,191305,67176,50085,39016,1427,42384,1412,67118,122616,72389,25260,2237,13576,137346,19938,20304,2191,68759,5373,61364,238507,75814,23931,69565,38993,131741,38364,12528,87762,5679,129853,5310,186831,32653,90338,260176,389531,108118,26843,43985,50175,30563,25106,56965,18130,140428,4542,165503,117991,24219,229605,1819,129663,1240,3797,76093,18398,71339,51919,93043,27175,47060,216257,6483,35051,1217,16512,80798,129064,13225,69339,8548,237079,72298,2575,34280,51379,117910,55671,53345,247552,29486,39328,140821,34681,57045,60177,5004,90269,78522,2479,322607,48474,61296,13057,31558,4678,59271,6699,27044,31988,35944,12503,83480,4389,136508,3781,114121,70279,4488,155829,42214,2898,68191,75695,305850,45041,74344,106509,30087,17429,93292,12477,290,23080,114802,35714,18751,26554,105424,17775,2144,2412,100610,65192,113975,52975,180272,135050,129815,76238,106483,21440,63186,4260,46189,9711,28249,4169,23429,23390,8324,141585,63809,67668,38457,38063,39226,59972,1189,203916,62368,14403,16949,61767,85801,1739,40147,35049,76757,33124,62102,15780,103593,103009,53484,22952,67973,114645,6566,5245,50462,7601,8288,3513,194571,80276,1908,54592,5124,58571,2513,6800,273997,193904,1119,17991,117245,2508,129156,82366,26278,71465,63341,56943,39662,106116,94966,156875,9736,2204,122308,94418,27134,1280,24539,49022,45314,3764,50904,46424,30699,28087,293839,9400,33646,40165,822,147499,50263,116179,29085,11863,31314,5578,17797,5104,12454,1604,15342,219206,10232,67800,94261,25872,13565,90339,78971,75377,26649,41184,47695,11514,35369,20767,14227,41953,309396,148270,147938,33074,14453,27499,109019,39018,25738,240196,158931,52820,8612,95853,21524,137010,84901,70869,70021,116794,48404,38771,6732,1070,70990,187297,49140,5238,576,3564,253975,16027,16483,2811,37775,19034,25259,4053,2e3,70083,95774,19713,33431,92703,91314,42381,288770,48194,95985,3991,77418,13406,241328,245086,56533,35275,62725,9246,51924,70181,95331,16163,31410,79016,39312,120878,119371,275987,80124,27712,9186,220,23598,146167,85209,68238,282190,57048,31273,30555,80913,17594,75779,59160,135002,101219,189377,29225,96735,60126,62522,104e3,27620,86814,17240,147533,11001,5425,43682,410,49460,87270,69480,46315,59448,1816,76201,9431,11788,87960,29063,65539,47347,11678,33846,7008,196704,9895,6753,8633,120892,59970,572824,115934,6646,202559,892,48351,37611,251282,57823,67263,57750,26527,34485,90747,7685,88370,6144,64182,1709,41969,21458,62327,181657,49247,225330,122600,114574,107124,85361,111833,63243,71420,15655,191178,72430,18063,51425,54002,12364,53225,86557,18193,97580,41232,138398,67821,128724,8944,233212,101353,52099,42127,14006,120107,32789,32132,3498,18123,33758,56058,5779,128760,59888,98869,18445,84702,51911,13234,218379,20093,39031,8074,70195,20708,23462,24355,131384,60189,26390,10403,41060,7140,10781,49410,42261,87202,82566,41663,43105,60276,2768,5733,74176,28329,2297,145430,131632,83615,122915,105441,655,224102,5284,136426,67763,16294,188511,32538,61049,27893,3394,13951,159099,28542,17930,145360,9492,190122,32285,78855,26440,13570,58648,73908,4239,124561,2444,74172,53131,11468,10794,73566,11623,35343,64710,30481,4163,10328,38309,29901,10538,154377,76132,92405,24839,11679,3465,13449,11637,7824,2337,57754,1260,14458,41118,19878,38661,13416,159180,37074,163164,54137,28627,52134,184900,8520,40385,29546,30502,22386,66527,107458,6850,24022,47983,30603,35083,8934,304066,39500,9,28261,33026,77251,9374,44833,116312,34990,29236,63563,125639,135405,165398,159055,55690,88141,69643,236964,31983,25572,20436,36746,60896,31850,16179,11828,5888,3043,66368,9750,31167,7915,53111,36430,1333,64344,93659,20061,60596,180191,51630,6792,30244,43509,101058,22409,420,44210,109783,43223,27030,72477,72831,32679,29235,7675,47556,12258,39907,149412,84926,118247,24692,71717,105038,86009,45941,41189,89453,29856,52543,30627,226798,67303,59230,67415,34408,1367,99685,16867,128419,52147,4111,125381,117881,16173,44093,102224,31575,23234,24870,83790,127407,239098,3200,994,1255,100903,242275,117266,55116,38205,16140,29662,11307,40414,208793,123355,56470,4862,75600,30119,58218,70828,24075,26974,7802,192353,4851,5475,78720,66596,3409,28573,64396,30381,30690,59859,88256,5406,99945,103064,34463,37727,24238,86643,60088,4057,23741,5967,162904,38240,28356,93858,25510,122879,6897,3278,7057,11971,4400,35461,211413,21395,59615,39471,87233,55795,128426,3051,22470,41950,14705,3974,180108,80476,78442,204996,91987,15634,67610,139015,142373,35611,51134,10387,4353,153456,57749,181039,14183,68447,151532,21107,36452,20551,3186,46247,46383,129666,88736,140662,146243,2066,8360,7978,64818,106963,17896,47801,10723,114821,223295,74192,3293,3393,16987,74064,11277,91622,4270,29828,27951,387869,103235,1374,61988,120083,477,145892,128378,11779,211263,61354,18221,17869,46530,83061,108538,157981,90608,67199,95080,49064,195814,12302,66307,10348,231346,160732,112859,63633,146558,21271,31037,198802,47622,12862,95710,3910,77850,73961,85585,34752,61e3,4082,24595,103679,71107,8208,79568,150019,16615,24961,139857,32664,197366,4559,54735,32696,4126,162019,75698,13916,70108,159638,19834,9349,24675,175560,49643,18206,52459,27992,10809,88865,401975,133172,29e3,34558,30915,3658,25834,42430,36562,125265,18182,10155,40149,97082,208980,19575,60853,90529,66545,9600,789,46420,2317,88593,55595,98980,115302,5742,169155,1073,177901,3472,11189,63711,78643,65472,50459,127979,93,42202,67053,21720,157650,11145,141378,42033,22824,85705,79114,35584,15974,1510,54172,28562,12451,104226,19190,97151,73024,20948,5151,81741,21499,29006,84183,198074,54003,45120,170125,26240,35177,28389,64863,79974,60778,176915,232183,45342,2038,80253,41564,40703,32689,5430,100689,5366,23007,134279,14266,26712,73993,24934,64242,52113,102887,61801,46415,201049,54251,62133,122757,164883,30815,139966,2319,30842,766,13362,10287,134518,86111,81665,82440,28333,43019,18963,8804,161944,23439,102144,101145,80029,39052,248708,30350,117340,11878,128467,974,138625,63961,5237,74778,61834,67040,43814,13690,65947,33809,232476,115258,181745,28824,94013,9510,10246,93722,81976,7217,114383,3493,16014,69045,72692,12145,80981,9507,6692,1620,60820,330444,35474,33962,4797,7053,295463,46445,27026,12491,77988,49524,35675,90947,29114,166705,101385,133782,32704,6186,84595,176031,185623,45966,151302,63069,1699,107491,947,15458,74452,196212,6046,10498,12163,10239,35191,243951,9277,9090,29539,54460,22820,26514,112549,60372,51753,48756,21812,70861,260326,41,44222,10441,16961,48148,138771,216194,5914,52153,53400,212036,56519,26245,10117,45888,15294,138019,90913,26368,43842,42111,23348,6082,194845,161089,156206,51546,11647,30759,302912,262094,8635,78876,26535,35283,54183,31183,85484,147873,12989,5197,6356,72894,65347,20150,27370,73787,1493,45918,12366,190217,20724,13858,10981,67449,81213,7553,14115,72242,271517,11842,48310,88743,143726,22177,3290,243231,58452,62937,12592,1654,40066,33477,13751,9921,128442,15868,7106,75236,83773,10775,36938,10482,170465,17368,17469,161508,32752,98340,800,19824,264456,3901,87319,2867,26782,9630,113102,185815,24197,44584,86366,40224,3636,140916,31731,267731,9567,53678,72984,29389,27963,17106,50282,284911,60170,8322,12608,23374,89652,5268,39044,229766,8869,151350,31436,177342,12269,183212,120418,116270,2843,78888,69192,7865,184099,1086,129897,18383,70508,20242,18508,229924,124569,35749,50589,55626,9884,83115,40971,30671,18135,14452,38861,17844,201826,5549,26413,17189,13561,38539,10679,143331,3314,36785,171194,49685,187713,67506,4618,104039,17060,195080,50648,33159,19238,67559,134840,28599,157523,17130,38064,117398,94355,31918,13575,34538,40326,13997,3494,348283,62481,26862,3603,104426,244363,153709,112487,304612,199674,41239,35545,54869,293005,28223,26277,26899,4533,18518,15492,38587,80488,70485,160395,263,60162,11382,222152,4696,250751,51921,182609,10707,48463,46243,1227,49111,111564,46502,33342,56846,68541,63559,858,139927,16654,229375,76759,26478,33205,95828,23399,92945,2637,35630,28470,143992,50214,14174,21456,166191,65665,1711,21594,78019,97599,111701,36,147151,110246,189022,43021,30397,40757,131935,42065,73335,48039,26596,28984,15102,2361,7421,202167,69744,43766,52826,3642,83304,33873,75140,63169,192389,36551,92748,13039,123959,233220,21738,84447,77230,20228,187852,19095,25799,92136,108774,29237,53947,2299,118106,2687,8830,42331,202924,33667,2023,73763,30704,19363,19779,16737,35629,48081,24068,101013,162338,291912,13749,24745,328289,167679,70086,48299,23306,16732,17801,43322,54589,3586,63653,43624,53474,925,109177,251316,43805,13082,19511,86565,142182,92461,17117,101033,103319,64589,4022,4351,235897,5352,82705,107142,46391,156084,5860,61365,10558,13045,7717,18357,33922,12590,33065,6928,46993,783,46937,67846,8952,26295,6107,119656,18799,17458,50747,4229,179559,112727,118080,20683,41464,125468,51560,49749,44231,7359,35339,62988,136487,67015,5208,29150,24956,105186,48858,6143,18097,6972,16404,73489,58742,97196,36357,164616,5834,32267,13746,147733,15113,132091,34127,106298,39729,106426,22294,9780,15602,36213,71502,42808,66802,599,60755,5851,39120,67363,108623,126368,72770,91263,32486,30596,151717,7951,52002,43103,11768,68942,40901,39344,24037,127500,116890,48403,16926,86750,17745,48648,159545,34460,58419,5634,114317,67865,31462,23352,24010,98185,125708,69686,68337,13610,26271,70691,2980,4768,27225,102402,75453,28106,8104,6931,1176,6274,6475,112635,22498,6176,238686,26832,28893,90319,14441,15682,15087,39517,45270,109134,104440,45965,47645,81772,7876,52683,87720,12898,4505,185665,2769,113401,15664,57592,105229,137381,97059,119268,6876,43309,33886,128363,35476,144249,67013,143587,83367,25703,91436,59347,53236,2289,16519,19844,46309,58558,99834,23313,218816,231303,36388,51333,183535,109792,139277,54306,90139,18235,8275,32710,37677,82464,86025,92204,88842,117723,37570,128723,234242,76350,73795,34896,148247,58424,11105,11744,45746,63372,17118,49772,199520,81902,38004,22911,33752,3125,1995,53792,4689,26909,108150,146062,69674,41811,161444,84855,8999,28561,16731,93937,3189,21967,24890,22943,1356,145300,51569,28802,517,118679,31703,40607,48098,108854,25003,10233,73969,177495,5248,24516,215347,146192,48712,60626,69188,40735,5866,586,101541,6509,47590,52129,5969,222045,110933,25733,24223,65339,62812,2414,155418,35819,16022,78423,43138,20995,128255,240673,46745,236093,72176,57085,97841,61248,107,36068,193177,105427,55726,215229,20446,47228,100420,87091,14429,121708,23605,21157,187721,21880,2997,203976,99166,95068,25877,7724,98925,83401,4829,13182,18229,13718,239662,38653,116505,153497,30589,89029,38962,181302,43853,78872,180301,4786,248240,7401,106136,112590,77745,19731,60880,77789,125748,135487,5975,48627,34084,12419,215770,47557,254582,10364,106495,21856,67539,88981,38805,21428,48732,42316,12149,16078,52808,25327,51322,33850,51147,12253,122354,46077,56483,254553,115417,81834,150991,94662,86668,7381,12841,100650,18218,15741,22372,68294,50705,15535,84660,61887,22553,72299,31361,24824,17743,46820,64288,31582,77006,111674,116384,30760,80920,86149,77192,51979,79691,60342,122805,103800,240873,160744,233114,78962,54920,8608,3484,316104,72548,24337,5088,230040,21926,10172,36838,26,86221,83458,102176,12062,17571,41929,41170,28428,68239,41750,103930,2634,18313,53019,34825,97837,63115,24606,73157,152474,14715,91439,37033,109806,140259,30668,174760,380,135597,95673,136073,65073,134249,13829,17279,122305,4420,46444,10237,64848,203623,70728,10349,182885,65075,24519,25783,40318,34139,22222,63394,55266,102764,41422,20126,65100,90408,53640,35128,48932,11192,38935,96839,34782,39492,19396,41332,6250,5511,19492,51304,25936,104466,54099,73771,86115,5080,7669,30891,111700,13931,25276,72289,135447,14820,258641,25265,31005,281179,75286,393,95359,14623,13584,6680,101227,80173,44933,76666,54542,13244,39348,458,25379,109451,134348,81143,6959,65554,12027,51311,8716,57589,140731,28467,23316,17272,30458,25980,55229,77197,83798,28302,114784,7428,34548,26241,14712,39336,103304,18928,54080,12870,334,87722,15208,16895,142098,114262,39820,83913,57817,28682,7721,14900,108672,11250,62246,42849,415188,1724,26555,24549,25505,26443,107450,145899,61035,43528,6901,60726,65906,267741,21338,147590,42079,18924,73017,135236,15393,5206,4026,84185,1531,5988,113890,82647,303391,7386,69844,71611,189865,76523,31877,13315,19314,198575,32821,1928,67641,25913,104475,103489,3297,70391,18406,15446,113347,19295,93790,27856,1792,167471,116449,8541,4408,41757,63233,25765,86680,64501,27034,24816,34975,6079,4486,49693,36229,16917,21581,62426,27862,11612,54284,35702,194034,355,24277,48262,87411,70504,310164,118018,12516,47559,43502,57433,107139,9290,66533,80863,14634,34312,91725,28606,21342,67241,72355,43244,375789,37402,174015,105070,8342,44167,67494,1890,16365,11723,271002,1865,47918,8350,45564,27742,25110,125803,8553,49504,81925,62211,4534,15491,19011,80373,206920,667,102405,128623,245524,5553,113309,192739,65766,19567,22832,261958,29679,21293,71134,20962,105123,24721,860,21752,33448,18372,157167,94822,35770,173224,232737,75729,28937,46828,28062,25453,5207,140366,36665,30652,6169,67920,150458,92040,23186,184604,92330,20891,176492,49427,27828,38305,42495,143982,49560,25503,90043,29747,65328,47830,12932,11068,77721,9003,25213,94205,140426,46090,89945,138173,192691,33329,112232,129905,35709,27514,1841,19957,31411,127476,53572,17497,173549,55063,175135,19841,69314,5192,237921,117660,150697,4060,273045,50414,98940,65348,153665,164423,58804,156695,48994,213928,86036,28608,8355,39574,34540,16927,135680,18374,151587,10830,53805,16878,16623,4282,48030,8537,14986,46102,13062,72897,72,33050,108227,39451,45935,651,113320,40535,95176,57450,48843,5003,19019,10407,211163,3848,1068,4988,32091,30095,41692,15099,43602,107434,50744,7627,171349,16313,150832,352665,207750,33937,38256,51091,156e3,87889,90663,84175,24908,114900,50365,31494,83829,5398,169342,47521,54818,18935,8356,43094,41212,174536,10082,92550,6678,60614,23355,69721,14796,34149,128830,58187,3179,208,40325,28399,225029,401412,51150,31580,207268,6657,10993,69818,64282,289845,23308,12961,38447,6681,52944,31855,2572,47646,120728,179148,37240,45196,218274,4816,3695,21961,50084,35209,18073,51452,27004,6100,33941,1377,84831,171214,85,141510,9078,99227,32610,6417,11718,49868,65579,87902,73018,49062,46280,61742,21512,40862,107733,15941,29168,157765,144919,14487,5767,158014,140070,7241,573,71584,16921,223566,40331,179473,35081,47926,140885,41508,52104,59180,42310,32811,29048,123517,102413,80208,10104,14746,12649,153641,126022,37965,113017,4171,83,142592,2809,6362,50416,71323,116894,260776,16204,1524,5760,30351,12658,20703,54403,36083,45408,74772,4946,14485,50759,111222,10890,2195,167147,92962,130534,16283,177256,35016,15472,210156,151187,73922,117691,43250,52051,37392,24811,24358,30830,5775,818,21969,1476,127322,151783,58392,31021,106913,65215,89407,90802,28531,11690,20234,95249,44602,37256,18707,11928,5161,4410,26571,51903,49768,22008,25252,65780,209499,68769,203726,13249,137363,48845,86823,6658,5674,31881,1083,1823,108676,34518,166752,13791,14287,91576,91429,8665,11529,26401,16191,91972,30964,5254,28486,54697,79613,66520,18447,22870,45203,194466,22822,51703,12278,76716,44595,73455,33546,12235,144843,36154,51247,11116,33040,3180,225753,60864,1972,28469,12891,28879,10338,144157,56294,353058,38302,41447,87532,110616,27065,168438,6557,1213,50804,144643,24817,2390,136531,38174,247513,16190,4059,122791,131994,137430,39506,57650,16305,5188,54309,106128,20628,88071,67394,395446,250285,66176,91254,1399,114196,43915,60230,44853,27206,106353,43013,18733,345105,226453,51202,16607,57106,117175,35492,10476,89598,127439,15187,39624,13688,61570,10615,31111,59370,6238,175252,32143,224492,41388,95408,34384,148238,78307,38959,9340,160091,61443,15737,11216,41244,170,38299,102443,113097,26382,14027,33707,3957,76300,66160,19431,18900,6952,1717,108656,82206,188021,257335,27295,43999,41210,31777,46956,57457,12657,11489,15697,48060,204748,53583,82422,284790,30503,137341,8120,19615,220311,15991,10217,63424,9808,67431,70976,98221,4491,15177,28535,144789,751,13230,2394,1504,33977,132104,30316,22230,931,97193,185240,24826,22687,174322,15307,22988,1390,188745,180325,29580,59068,74903,18994,29195,79,15436,7622,38462,11566,138710,44828,45774,37768,99236,68137,84083,19282,22698,17134,74807,126662,173497,46248,16938,119735,3212,28292,213652,49013,9975,32180,45660,86250,4801,68788,95490,77482,113751,11994,44624,94452,46839,128497,100316,5798,58588,73184,202987,65417,37790,88524,1606,43156,97964,105717,34947,11203,100060,37742,130074,93653,107799,94311,196106,41347,8035,10780,16390,27883,118236,167395,1979,25006,19375,31628,18916,144723,78502,114047,103107,86492,107686,5844,20934,206963,23556,22591,16562,146333,20167,10471,117434,33085,2863,9740,36669,41849,37271,22790,18209,28979,8231,12952,54408,21731,25130,45208,55748,138120,75826,414,29593,9925,292865,25999,683,123149,7036,92159,86055,61827,103680,23176,54918,58466,57578,13305,5709,86479,16697,31064,17660,200919,10770,49793,33423,32370,52047,16488,62555,6459,8426,83493,7763,59725,82812,18628,67760,79405,68557,9612,7673,28102,56517,69620,171797,32458,29541,15870,81109,32080,207644,71495,21202,11039,91036,61230,2810,130800,32260,4613,60590,37112,75214,33979,126402,155062,30642,63875,12810,194463,82799,47664,16725,36685,43367,61099,449,172150,102867,21691,301838,36745,7130,18671,57316,34852,38034,54182,35578,65900,99486,19771,3456,2658,16914,99866,28390,28109,8262,21147,34353,20006,4228,137085,1675,203023,283196,198286,214375,163329,290603,152574,40471,83506,30068,14730,23177,131539,34759,27668,32178,71896,104799,116305,85430,119262,42860,25160,8911,23428,49437,105322,6519,16203,6349,74711,1230,38045,8540,75165,44736,25909,51026,317034,4984,32281,91312,27060,44431,17817,45363,155937,239085,35697,59784,91993,29531,126740,213757,76560,167776,285273,24262,8237,65030,41160,74437,48804,118916,13159,37842,1031,75349,1478,11655,108777,23435,277425,101734,67469,70231,124711,43532,28514,65526,54956,1e3,21882,17728,25302,40952,52214,149632,1999,2111,3259,63362,89961,220561,39777,26335,9063,10572,12416,34551,34623,38604,24723,5947,15588,69927,66252,119177,69173,46629,28714,70715,212408,20521,406913,74380,11716,50659,50862,37009,88460,130101,7210,53853,538,65120,151950,55806,163748,52837,13153,21100,16674,64536,6091,138201,44837,58547,3723,163,2177,32288,85454,34033,8497,14282,25742,10535,10741,79559,117493,243787,49337,100718,79495,40139,42956,7551,55433,15421,31509,23034,45081,547,61176,53434,328001,8470,36263,30145,4519,74173,53935,11845,73774,60211,78025,3,4102,73782,109293,315332,48412,26683,13714,6865,20128,18490,104141,325,39470,171970,115860,15707,7268,73301,74336,31370,2368,111827,107757,136231,142844,97138,96638,84053,38691,23801,1588,10573,122098,77039,240,186135,146101,11996,18143,112963,46171,155836,348769,47795,121213,116266,132515,3344,144804,31286,99187,255838,129694,35894,48779,55235,148582,71967,65282,15174,13920,47080,6147,108242,157593,125025,7136,1286,28957,127956,28402,98813,20805,7532,109417,40610,5041,32958,15142,18408,108596,33543,50517,27748,80114,233434,91447,487,37094,100048,30541,43477,10639,89862,155868,37667,8726,60684,237903,73408,99589,12190,38739,97348,3914,13594,2680,149016,13907,30171,28343,23530,115225,61104,35821,147679,14337,4297,244282,24085,326976,56428,7851,21303,131620,71446,83253,68692,111870,5224,15813,38197,49026,45057,13660,3306,76345,40671,27905,91072,996,68527,62085,91351,122634,55109,168209,2024,27560,112707,17352,8306,167115,169921,166958,5031,46020,11844,67284,19130,76185,6920,32849,5450,14610,22451,21002,17392,31872,66682,84796,13709,40210,59898,12029,8719,53564,21462,91884,21647,88379,194428,12754,37797,132826,160016,22567,54383,53186,77611,31107,8339,4694,19185,90355,23597,17222,140675,28442,23668,55977,9128,61555,28774,155229,17658,9390,24379,69357,15752,127381,239631,62460,93181,55913,45133,140155,18676,25249,33164,29581,82837,67223,22362,29975,7317,52813,1943,29613,20012,207130,49617,49651,5636,15334,36313,29226,28084,95247,72072,19e3,224932,15811,114,32127,38097,37508,88507,37225,27359,91626,12193,69279,20608,11055,88156,92808,2152,57259,55275,72789,24475,104414,1708,9882,3818,48661,66897,1631,34806,227930,85815,87753,18321,250664,72733,25107,206797,50891,8082,196411,92596,96764,152823,65514,22819,387277,62176,51225,40329,15563,189,3659,73670,64357,51793,275136,33482,86653,74615,67058,11318,125720,15388,22388,8267,1730,102663,170910,40784,7144,85373,13040,7088,94309,583,44224,140424,77439,18496,164026,36578,4722,9151,5824,63365,26510,35199,40500,79277,32495,44614,35233,9566,203293,152144,7097,2330,183480,98629,13423,330887,44130,68600,30939,97829,31012,345465,56747,94879,4939,160027,149761,99423,46099,32251,15332,8761,96094,128555,5763,235318,222223,55729,30241,55420,201746,3987,81382,8259,49325,23287,7719,24633,251100,92311,18591,110533,64759,170260,393860,7175,21144,132887,3593,75346,101277,91109,16387,259187,11627,57459,173829,44694,55780,49797,89192,120443,62622,3904,14814,23887,1027,112258,64955,99800,11132,66353,36202,48624,18158,88481,96882,43059,11040,2455,7077,21651,181159,99126,100434,61388,68186,19161,110468,120052,8819,55324,41494,7014,37689,3618,87729,92615,207943,9823,128657,12587,15857,6379,67628,51216,71775,157617,63244,1503,3864,218754,110864,5769,21492,7243,1192,87921,85529,31512,18537,42698,35350,73510,84474,34301,8991,21013,35034,566,38832,19838,35586,37216,39413,55006,12178,59742,856,84563,6900,25632,17437,49786,30723,13847,70845,4044,7843,23944,235976,55530,48942,6518,20939,73769,192653,52936,95207,23895,132542,142982,22632,87452,48042,54018,178468,10728,26230,23559,363,81269,142012,5718,346258,31456,84333,246476,51018,66692,101804,120570,39962,30373,70593,2864,60541,19425,54209,104092,7201,31545,48018,25865,15442,46257,40443,8328,6451,111782,47527,97754,33046,470,245116,31095,39,91934,87208,73470,36708,36521,12801,70624,36272,8892,79768,12427,55454,103756,5908,52390,62962,22720,141138,94634,41689,128402,126390,6628,106394,35527,134394,82727,254651,194502,148064,89549,3202,28359,957,21954,27906,49840,142747,8307,24206,48978,1186,71728,133038,71474,91306,6333,110959,74600,70387,18983,62609,56057,22970,1147,135850,1321,28834,3578,59715,102227,32827,81415,99952,55636,257598,390,22702,35701,85872,402916,39216,189795,14929,19467,10112,144422,61514,5279,63421,134686,41436,8424,51925,10598,132295,124416,4604,194739,210929,57866,31829,51626,50007,9976,91878,61906,56168,81906,60918,61859,40017,23059,16887,40927,62064,12785,32893,32913,21782,93965,20169,44387,79084,38463,11457,93950,27127,157050,2697,337088,5116,54128,48255,33279,8821,27352,25515,124022,65710,28906,38557,33390,1722,104435,72215,38551,12094,30978,25113,6671,37355,175109,42862,98024,65406,221276,59624,118012,64637,78760,86697,21426,1639,40350,12584,67193,84144,31396,7863,143011,69629,63112,9454,28666,65798,46372,134721,6314,51402,30837,151922,2847,38676,38008,92823,136245,17540,5504,109295,205242,37606,5211,214892,1586,20670,208711,137743,19328,40652,16995,20023,14657,154919,34422,12996,13918,38221,47690,16398,2959,37680,89122,6721,198469,91876,172043,83898,101992,26084,94570,3635,76958,22853,76497,38266,176590,168403,44464,142840,79180,184594,1984,41806,83147,11985,6546,366068,59732,24533,271505,8736,39084,222992,93429,28962,58985,86665,8432,30028,14548,32439,54424,165029,55175,27458,69046,121277,46168,33732,20661,24581,135574,123110,37556,79260,72611,16957,12939,46162,58238,44907,72936,253758,41324,32518,96480,11949,124438,65280,43256,34107,53533,43531,37037,28366,45970,32741,173438,6121,194202,62969,26355,30314,58370,28455,1848,50519,82830,90393,21761,295490,10936,256940,133568,44050,20269,4089,27457,21610,219460,36743,14821,101388,52005,13124,30979,140816,167362,26054,18458,60789,34917,40447,26606,33422,9066,3452,83614,5761,20263,137238,25038,91310,101,52322,74548,42572,38084,214054,186568,31802,17665,30620,141936,37730,14420,4265,187218,49640,188208,51441,55388,96452,66659,40869,42039,60967,221027,19234,178581,29105,96050,9165,196118,157335,3738,40354,117436,2965,34136,59659,15570,50843,230035,31444,71260,43886,18316,5387,38500,168508,17406,32174,8828,103373,143806,90367,3560,18719,122310,16508,26719,2541,105429,6645,37998,73190,10591,235916,49737,87112,233941,53188,32193,79154,4544,52905,126477,7580,63501,57314,3216,31337,6541,103083,60846,49,9756,15481,1355,43840,14319,13743,27486,10222,73114,230718,418644,16706,6674,279748,23058,45273,295831,86306,2743,5535,88773,21829,35253,120938,31153,3169,16839,42847,8751,80974,33942,36867,35514,16485,26474,77775,56877,5391,48346,3882,108713,31403,27804,55248,26235,43821,136104,40118,175507,28034,203908,18732,1788,34030,106427,36958,54359,7251,44936,15356,69139,455,157915,22173,140291,50348,43275,82066,49621,54952,15216,36226,96695,66855,6936,1987,8227,196087,4631,68827,99004,47541,110265,17953,147605,110242,58520,31312,38724,329975,642,3155,34497,75937,6207,73843,6120,17249,51429,117746,3218,910,68961,319671,14938,29555,34700,1649,66673,72268,9655,76800,153087,6941,210168,27130,35398,1780,73242,3135,56689,19556,165307,8765,35967,121458,13333,70453,17350,117253,22265,13340,44265,39869,441,3742,135025,23581,33309,16543,17731,13291,157637,283005,21408,101360,63887,52312,83873,5338,233779,23759,186949,34531,177320,38069,156465,91004,19353,59852,68160,14891,1338,1072,29823,1950,28901,81407,313445,73038,84807,162348,240257,37162,138934,16111,58013,41253,102951,16457,96056,19541,56402,67217,41638,94381,89674,29481,37456,80815,151579,13937,13683,132537,19699,134545,67020,29816,222341,141235,427578,48868,129557,233342,23077,87871,16213,18728,16184,9469,37913,19680,2798,171356,178328,13216,50049,72690,71904,124644,55455,7504,29052,41036,266546,19899,30391,188755,8659,59469,16,104298,112943,53865,76203,138226,68857,139953,14125,107625,119795,173133,4398,50273,48808,54390,16466,122086,31835,67035,50971,48859,7508,46427,66477,73021,84615,39985,83076,46779,201569,53336,36443,60865,168164,143810,51393,25548,169307,32896,24485,38424,21837,29087,275813,51674,6714,64883,46169,187369,55186,76192,12852,12018,62134,31067,118303,16542,12125,10579,4928,26291,43854,7091,10946,253716,109062,39283,17261,113012,258512,47764,125126,32646,55892,80279,201623,149872,3192,385,1208,48750,5376,58738,22335,5427,82416,47811,32435,143086,38930,94128,59975,156037,37977,38224,62485,7698,50405,71027,16462,21559,136153,34131,107506,162069,63703,3101,215029,40407,4178,3774,9187,80019,17880,97926,67579,2600,18405,8351,47924,86638,70820,92206,86453,29610,42241,119200,3198,15466,67813,57863,35454,4779,99518,4649,104641,144269,33730,38073,65864,6838,109456,193298,154007,5623,45741,30846,182578,25573,157224,1543,58575,138703,146140,44971,49356,18275,59064,20300,13122,11848,24453,11973,9797,86843,2919,25530,49210,1130,161220,76788,75373,85604,34926,36014,17777,17255,51533,11676,92226,51845,119859,21525,5936,18507,28050,1140,31418,14857,34207,47859,10750,36382,32079,106909,59426,87757,38393,110042,15965,97104,33757,35344,97993,53979,33651,45407,41884,82515,173089,7177,58371,35365,47543,51927,35587,10670,23544,29306,84233,39976,76076,62097,9007,8668,28119,78281,120790,19835,143020,54968,18670,64959,20649,34469,42570,33001,136570,87796,120044,1106,58700,63951,127623,12805,83057,40212,31773,49850,7361,54336,347524,101314,23751,19569,48791,29174,49369,20467,7465,75842,38281,623,112457,60210,28849,51003,94720,6426,90047,85560,43761,3579,85105,34607,90410,118528,7224,42907,111163,18168,6960,161135,191298,5247,100584,127552,171568,20121,91173,12636,54615,20199,63730,98105,2396,40387,14438,125012,4765,33235,12865,45299,37728,82098,77872,114037,59253,19675,24838,398016,102561,11446,17069,57508,178277,65836,99941,26114,2585,271882,136866,50126,11027,155648,118367,14585,8910,123015,335383,40434,41016,53021,14439,87098,176860,201543,121888,2358,9286,5739,22666,54270,37884,169381,33984,93859,16124,89364,72207,51639,76366,99029,65812,2198,12147,174891,194289,6986,30252,88822,21284,11445,288337,160821,33034,100869,43852,25761,52882,1144,103809,1924,84458,86079,43411,13542,139276,18141,34978,41298,7276,26481,173800,33210,17951,142652,33616,33677,2210,19941,98568,2486,192414,80136,12058,235883,50963,249638,29572,27221,47034,6124,72107,63346,97620,158513,299699,40388,23235,37176,224244,198386,121323,67992,23827,63170,17838,106622,158590,26807,5345,23489,91891,55474,74834,37981,13058,5977,72552,34706,26828,145172,19904,21367,34043,960,77092,91381,4733,47446,7680,41697,5170,16960,14741,46101,13656,473,51842,37433,11103,11551,121951,13191,97536,165932,50397,51628,129028,9069,44885,6590,59195,47045,32940,225472,90345,21833,13303,29407,96615,141951,5198,6028,18395,7181,3861,14966,156358,167182,36529,55253,25942,173153,30959,27261,50691,150176,162201,38467,48462,80602,42163,118482,168,108756,26011,17166,54149,456538,22512,91374,13816,90358,131615,18132,226707,1824,28139,26860,42253,93877,77351,65575,8980,80574,22020,27948,40422,91324,76376,13528,39281,91685,82215,122541,144066,1983,193851,17283,26320,2739,194978,4790,26845,42627,61300,65815,174612,55133,4200,191130,79771,158321,52280,166796,221620,62461,11278,4067,88152,83409,31717,121367,13522,47325,37945,10406,174348,249321,154101,64912,29938,51775,17220,15776,166138,78890,84425,54121,42861,16368,24572,291647,10197,32073,22651,11677,97509,26952,35787,18424,41910,71614,94977,72318,41594,70024,275419,37702,60199,7335,39107,61315,18271,18394,33768,87884,104277,123724,7277,56288,71981,189803,49320,3352,6798,14240,8954,69220,94433,57372,28620,68863,193727,85575,42309,41667,67689,42081,22543,44824,12719,28540,114236,101553,27638,27296,4300,5353,4663,19379,94098,3758,95888,95144,80344,87320,28447,259518,12718,71391,152731,37063,24132,31911,104896,15672,103782,1521,4945,72541,23717,122632,15619,87175,206120,29428,189780,61416,28350,44457,972,1175,47233,198738,95789,41907,21953,97034,59341,22864,53713,16873,32971,20693,20954,31336,21477,16169,38370,16412,9019,3841,24599,21938,17085,6484,81198,76413,5849,72514,12320,65247,276175,37234,59796,52642,16312,57349,198507,94148,46134,18958,125552,1747,18725,151873,14901,5490,68287,29470,3689,64794,40814,26018,25692,54450,2703,88278,124886,173087,174e3,24159,179477,24276,46004,201876,209202,445,52876,31948,30206,157610,39180,18439,44124,50469,5774,96278,222758,200216,50290,45486,20435,46986,46276,140133,142326,15569,13363,47522,92583,2182,7135,16853,22998,30272,4952,63263,35623,39096,53789,44864,20053,110392,124213,4630,16087,28221,127787,25839,77481,44693,13464,113146,6983,27069,55717,50102,4760,7107,26186,66507,59145,36032,104182,71328,29425,64317,50781,47465,94298,69706,74899,22754,120756,25108,93077,56834,73286,39928,16218,41699,176763,7555,70819,50083,26895,23315,26014,16773,123079,41712,5719,31516,90427,158540,85051,183128,40864,27505,55392,9058,45224,96857,30901,136622,96557,56304,120061,11501,151448,5773,89743,7769,86069,2935,18471,41628,10114,33660,110170,49479,26745,92846,33221,26731,18795,87076,8550,2100,29972,120289,3077,72490,33784,2630,208722,50861,63483,79029,6419,39467,14302,45286,64207,9686,67513,44170,1050,77246,59266,17055,53801,7150,11111,42432,4278,94579,362117,36175,42902,41933,39002,98489,22913,74161,84773,57036,17556,162288,74485,178760,93867,73635,128860,50362,261,67455,80001,46080,35662,4368,25247,19230,74393,22588,1822,27682,235324,13798,85998,13194,235067,23514,71669,147632,23191,134748,214683,105101,1518,25489,247114,7380,54842,26922,3971,26361,20844,68642,170517,77339,123255,8963,77818,150998,48466,36806,2732,23261,11741,236162,18243,126216,28690,50546,16385,92760,197383,246558,201295,88255,67588,71687,176076,172653,169058,33906,63747,24835,157621,43338,30050,46152,132741,2770,51371,94835,6614,15112,11749,56936,1250,19027,399017,58036,100215,23388,55815,308768,124152,94803,9521,64186,8971,28,30427,62163,7616,103838,35079,29203,131235,7743,17389,10882,37420,61460,228512,85363,41581,131077,62822,119647,10130,54445,26925,19968,29016,24446,74028,24176,61448,67185,9254,8563,119129,9771,99184,37716,39514,10532,221512,258753,218630,55980,23394,32141,61924,66749,32411,3741,36475,26678,77010,44946,91203,128749,116953,20476,49625,53116,13735,102335,29376,51946,83407,67892,59212,34685,21083,1546,112982,32972,74397,1078,190545,16082,86140,58591,89611,101531,10061,105104,76319,20035,17551,52611,169061,190842,100780,23907,90413,115619,9675,34710,193435,49443,129734,11183,258877,16318,136182,126808,44635,27304,192375,2599,125648,47051,12091,23814,721,58800,40137,66726,97930,60877,74487,7942,54326,9841,41428,13762,8211,85383,6950,99177,79806,201786,296464,124087,13144,29741,41721,47634,55088,254286,106408,17041,99064,12942,64086,45233,14005,2612,55827,255,7984,13980,38574,12776,46654,73499,249951,2101,26676,25996,132326,116415,119062,50449,31033,23038,11589,179252,20007,14860,129270,21143,17796,144715,60106,70758,69842,34674,282133,44014,16774,57268,38528,24053,46373,201667,28327,471023,51889,102667,21193,114909,84132,69317,96723,67969,16134,68145,15058,28765,32035,2524,101089,98664,25045,76571,14957,86040,118506,262428,154764,81573,39681,283900,73287,127825,544,80448,52347,38512,175971,15180,45467,33086,46552,48894,81107,43213,36672,54025,76703,8053,7608,13299,56619,20752,238099,54164,105133,1444,32942,953,37564,8e3,66316,119463,106817,404,13667,149108,128597,31267,10269,49836,106150,1484,52330,76965,160486,171648,38456,31263,22424,37738,66245,67467,143369,60471,75610,20895,115528,86070,60854,40796,49347,18989,15030,11371,37578,15779,79867,10187,86462,46402,155626,93200,40229,7090,57547,108053,99598,11088,47505,41218,206017,2173,20988,30219,22919,80563,57566,42369,93141,41675,2407,182519,120495,27154,16702,29456,14349,7958,16688,117177,140375,42467,261919,74916,153569,10836,34742,49526,7621,105997,12212,2270,392377,7755,17959,25086,232152,138791,33847,13860,35316,5811,1344,71259,50452,207539,92635,50359,5821,33674,30255,2086,2587,96264,17543,42,6029,9580,43007,139248,82831,12917,29607,25786,51467,42137,85161,100698,31561,88989,121990,278500,3602,109344,37982,15279,116442,28936,30880,87894,58079,128661,126731,67392,28051,146885,4861,16216,97344,42827,147561,153948,22684,21335,47685,1853,43349,15185,59642,10229,25520,187921,108972,5579,98037,24945,6697,19193,63734,137934,75056,89740,19767,224268,56138,63643,151661,39313,70618,84031,89723,84074,13703,85626,35460,8867,64845,3439,57906,99776,63968,49270,81130,34356,16210,23547,36446,34090,140028,72439,2221,22163,57058,363492,113754,18913,95451,48663,54464,54037,176097,68425,3023,34906,29482,117389,341780,80431,58330,16753,92616,60907,94846,147486,4498,48646,7773,46801,7778,18946,464978,47558,33223,177444,7328,15626,63337,94700,11743,9351,255024,39098,16447,42647,96230,39769,58840,10068,63439,35800,65843,58823,413844,9156,51258,7434,61791,85018,6872,3692,28096,7121,33024,6009,75532,31997,192535,9661,3304,9547,14753,31987,25314,55689,15896,20430,39472,31340,99744,25398,115569,54883,28719,205423,23071,57855,64638,149867,25671,82403,37616,20668,39989,77996,74948,140555,175248,64810,36515,46595,4958,248773,24045,28728,136673,168704,20804,114833,100325,27135,21205,96151,153134,45992,7093,13992,76047,1980,19432,145001,75159,87462,17710,1013,45556,34297,144882,20648,26061,11319,129567,108555,18872,464580,33386,22717,65948,167189,5603,135042,79542,8801,202632,18114,91882,5973,5239,67315,4431,60916,47819,71693,32597,32606,18183,45072,80329,76385,24749,51305,40314,156514,14693,130345,13168,66214,18029,12858,34801,27628,14544,10823,40522,40185,33739,148694,23548,9923,61012,28859,17933,19442,34364,99849,164107,141167,30629,21054,6744,36491,8096,42474,41706,155060,30650,10600,163442,1143,96655,61390,52359,7559,51568,64256,203854,4467,22453,14504,436398,7878,6980,8293,63610,293747,16167,35763,19627,147603,15419,18032,110744,51346,33681,54571,40472,48615,39073,21604,13754,173027,92560,11083,47299,63062,11813,52007,29883,9734,139722,15953,1550,20651,13616,49306,16113,90089,92326,7584,30712,72424,164858,6831,152871,55746,197721,34167,196442,6022,112107,55215,7538,123381,4920,43539,77165,8939,50392,34192,20225,79762,22505,58667,40770,29788,97180,82835,4568,8579,13273,363569,35898,49983,436,36598,3237,131691,62418,35591,8101,4073,379438,65218,76072,33887,2968,27573,212619,288680,68278,72851,150504,217896,6913,121339,22017,35340,51072,43616,75043,31437,10833,81487,4364,22968,41454,106687,85446,19863,109625,149241,524,141850,214404,54376,657,237023,9401,108137,53800,32474,49712,53334,126876,27337,45552,177696,8269,15036,12097,42240,2328,125374,119295,99715,2500,19624,39441,27220,102691,60957,94543,39101,18566,67362,13975,78230,25017,34017,239007,90027,39351,41681,35354,43822,1043,916,58587,141983,94818,38799,75459,41114,67432,16195,36606,59568,22272,126769,31424,68659,12287,134302,257977,5756,207285,95637,47248,117689,19583,77451,22373,12200,54993,117118,34244,29386,34562,53819,71267,64172,77665,49368,7716,59301,25749,45426,194789,17297,2650,1766,32501,45198,20403,20984,6600,14171,94604,19037,5402,29896,9938,59935,109708,88081,145182,44844,39167,352626,164173,35374,45982,6122,154,73419,220487,53834,53601,17992,8609,229321,5610,68098,66815,71012,95069,140968,27396,8957,134489,24656,86659,56598,134852,17316,123838,255436,6613,41610,138033,81452,32023,32396,123687,63398,8693,29712,30407,19296,121188,3551,36099,20032,111948,56624,16547,27453,35916,15378,52039,56849,13489,22214,73177,53097,277349,2157,14029,187886,10260,141743,246460,91880,50869,3788,49486,133566,54950,33120,129337,53768,18333,9525,26902,312251,10297,9020,70759,16647,112432,59260,84609,9818,82766,73569,468,46001,75780,55028,52106,11498,43645,108069,17150,17753,29417,16705,31799,9606,289,122254,115975,8620,6133,255357,56908,14456,133464,43554,79224,11247,29630,160,12756,25464,65960,350428,62521,321796,100359,67358,35169,46172,113128,48988,88868,31094,33266,6847,60887,98188,49659,69117,92977,220228,13947,80181,35103,62170,97351,13475,2440,199768,19498,36597,46971,25234,67806,62881,84717,73648,181966,10488,94149,21550,26655,63436,48375,14405,165650,9621,24439,28043,42735,4490,29963,56674,45373,1934,262446,50855,67098,26898,5261,52696,40644,33900,9440,180286,87162,22940,19704,26936,69769,10254,101759,27406,12243,48e3,73926,113215,54935,5726,192787,4312,106216,9366,11550,52949,23457,212271,277152,133895,108374,6191,96477,29980,218916,58024,54696,40853,91124,65894,91170,65908,252552,6793,29212,15389,44516,122515,52617,35058,9017,103536,39510,49136,19242,130652,662077,74699,47024,31422,8517,73351,24399,13867,128360,4810,4434,61779,111983,61036,17798,110240,59722,102960,39688,10001,23803,23039,176498,56659,44814,134295,17188,77577,74466,226175,102472,154333,63900,111747,18062,41171,79669,32773,408933,42562,28931,30907,107388,43487,2946,240310,23938,24354,319,184983,7927,6488,1422,10790,68809,68209,64775,4361,202,17123,59634,51200,44391,18188,17843,2619,74278,3230,9540,47187,21702,36274,56894,43907,16310,34790,16866,6150,5561,13587,107545,108873,126867,86986,28640,33427,19017,5762,80637,17430,46903,2047,131055,25958,13558,5444,47152,13900,44563,122857,45348,70863,39593,54332,38068,33637,318,40310,143467,18502,24520,11377,62013,28942,27246,28269,83545,17999,59015,90707,30065,15161,34720,1263,37008,2012,6060,98575,92933,5721,299,199555,24578,29223,2985,743,115825,109523,136657,47454,26378,53586,3733,174945,93340,244456,5693,37386,28782,89767,27545,23573,18798,136425,34320,84778,20041,48453,38215,7477,71958,40621,8773,5874,187927,105965,51100,43533,18083,8443,10180,43597,2003,183999,69689,12216,129696,146188,62389,34044,68410,12765,43273,26949,266807,3345,34477,79197,5688,47539,213110,21634,22257,50092,32222,42346,39530,63668,98,134978,74022,5152,59088,174145,37220,9934,9545,118937,5724,87240,19875,15784,40143,23263,87513,181654,285152,37881,263241,4966,43934,10433,186657,6470,74416,225854,25908,142677,246262,32280,6192,75890,45546,143264,135305,29742,47013,77787,11732,126658,8763,37950,21806,57557,113464,89465,108995,164574,23894,22996,23169,15369,23117,17642,130607,40503,36239,280990,44666,9981,40427,147487,26869,168452,32886,32991,46798,240839,15111,70502,65697,88548,44145,28701,48767,31139,206777,35659,181164,166262,14554,171445,31786,66523,76607,17956,6507,31279,90476,116611,167918,6560,1243,115324,80128,41867,55897,187323,37069,32596,189444,145931,13390,105530,65709,26805,6999,55714,41300,22915,68951,22138,21120,22264,10058,19945,33635,56123,99085,10032,5818,6016,46649,57476,35264,94413,112522,262288,93686,83038,14341,23204,28807,66084,77987,6101,126673,7133,38126,5923,122091,170240,97772,46874,215746,43948,41622,3272,55596,8332,146411,251315,13533,8561,81521,115449,48616,175175,2063,186556,3036,134537,75772,29728,82360,22973,186559,86348,89100,38388,82297,45610,2613,87082,9986,177812,57884,23591,47485,42543,33582,44713,74439,257444,252451,31825,35631,38540,33066,5147,13973,4343,51830,70378,22827,26448,95560,36896,241741,48067,203953,298860,61620,20450,3220,67272,6586,107662,100160,108684,6929,57226,4762,7457,1320,40404,77204,99309,62750,208653,59977,44e3,74315,34332,5819,172217,64904,114077,18147,84012,1791,98456,90930,21446,116669,103938,7422,85140,59713,5768,326211,16239,75411,13229,29398,10758,236107,1539,112472,95979,152154,151294,306,21196,38146,10700,6891,84282,109646,56492,40539,6589,119491,51354,30685,140209,136906,29622,73617,49553,70525,51671,166869,139616,74395,37439,49595,45678,11959,33211,86560,52434,9282,62690,112155,130810,5243,108261,99970,265613,72551,80049,6391,33365,90721,66737,69872,87011,1860,9032,112544,60905,37371,89015,140351,19076,850,373531,2802,36725,218795,72062,28990,16550,24614,7815,6187,26336,33373,32162,42791,73555,32062,23386,10244,56392,49442,27076,136262,12412,14883,1134,33675,97153,199281,15608,100152,74072,47942,254301,36451,16026,10687,65067,56708,254030,30290,50490,13864,57941,259331,35588,23485,43486,24869,21620,92971,22072,88645,1048,182050,13343,32452,14825,19509,3325,216938,45740,99716,189082,53740,78245,25609,24311,176777,47340,308354,40669,66085,14102,125339,9225,128709,97207,1271,200933,78439,113451,88975,18324,46521,11819,18570,141756,72512,170020,52754,63550,118515,103073,93330,32736,50499,14722,31600,68452,398867,29316,172786,18417,104924,2606,5670,84818,16288,67106,59580,82929,607401,291,85829,359,15897,35830,50696,65630,52672,22115,356968,29895,40837,231192,34024,38957,26722,406,23335,124952,72068,68804,13268,147101,164740,276569,162596,66943,11569,26654,66358,4777,23229,102127,5848,978,2921,59666,5371,28212,90108,42938,39320,2499,4271,108792,33510,125072,71653,65239,38250,66357,38577,13964,86251,35708,50755,36010,29448,12209,3844,38222,206337,100876,67827,137088,14167,252225,84163,195270,1306,5703,54198,779,46802,22028,51124,86759,70560,113164,35685,162145,45471,34561,422,2611,6464,47486,19223,38246,9191,18331,89942,243642,212364,15893,17518,22617,6409,30046,126182,59716,36560,104428,18846,26592,19458,50793,147333,30826,1388,27647,10922,14495,33545,19269,135828,39727,41601,46931,233379,49169,131130,182112,16276,82381,118209,142445,128310,19672,28740,82907,33436,3118,102206,28723,24819,41937,38854,5157,3881,111491,1142,9776,421673,152241,29309,14961,87854,6054,15424,3796,82656,54996,2108,55367,239450,154525,9643,118103,106041,64601,68549,48707,30266,25772,18740,9462,229669,91798,112152,191327,14493,72828,8175,66636,236474,25817,87351,129027,76653,20422,22983,71240,27846,44661,12399,46158,77704,53101,35032,11072,17300,109294,33638,24408,1895,11241,760,17584,82479,125877,63150,141075,34259,23274,81698,15732,43577,48340,91584,14688,16379,24481,150280,96420,262050,48635,43727,61819,56268,72003,88178,17281,79912,13218,122519,125295,166396,11811,2171,118930,67746,17636,178278,174656,95661,173039,83845,79689,17473,98555,127696,203415,54730,22925,232239,9309,12136,175026,20740,180188,10747,39816,314017,266131,10040,175732,112550,220651,31974,37393,888,23008,86799,4303,64905,148467,75337,251,3284,370102,50264,9835,5438,23655,4481,29851,329,12855,7162,64931,78141,12804,42372,296771,83547,18624,34874,86271,3360,48665,77735,88767,11463,63527,28889,22258,29140,194315,113924,25499,6406,31334,1845,4802,49184,43455,35469,127594,92970,61038,115005,38840,87761,106838,8811,20572,55637,11162,96721,132425,108925,2948,125457,36356,3502,75270,27622,127192,2561,123095,49394,61155,16897,110064,9699,89448,53356,19628,220310,21622,83036,9885,112214,6087,26713,17901,161912,91492,3440,68594,9266,92238,8087,6866,150194,72175,80701,13459,31836,43243,239700,95846,44749,50647,21945,230538,120612,132371,244604,5193,105637,34661,41341,68775,85393,1874,8771,33718,49672,77403,595452,99507,6490,58895,128742,7704,39239,73217,43816,62824,37804,199976,22361,80005,87514,94832,14089,4574,139975,59142,75523,100268,43906,53442,15152,2547,186002,17011,19513,204282,3343,60568,128318,119250,4298,51871,41336,71759,21921,45074,98169,145889,99427,11350,1237,5520,28799,7803,53702,21026,136352,38293,128690,12158,90132,44600,10184,26957,39459,126025,78904,82999,59373,39301,150198,120529,153042,20177,50089,14764,271571,30530,123161,38975,101562,22941,5648,124654,109243,69817,71675,49162,106884,21241,107795,30258,16572,188262,141456,7688,60718,8271,11044,32440,104608,103419,236109,93156,43293,128929,42107,67180,25201,115254,185488,130954,72813,167547,20537,39969,38432,22582,184022,1139,27199,5655,17767,97412,122606,209377,27070,35871,326617,188954,42680,73512,80911,22629,3011,95021,315242,157737,383,41821,41808,19335,27950,15674,25677,110950,35375,76835,59108,57370,35262,16569,160415,37706,78086,32041,49691,137143,9782,172080,50148,77917,6323,10110,69172,17711,21795,59511,76184,135114,31046,132319,59105,157578,20549,80778,57649,158421,65143,4575,72235,21899,10797,92745,34035,106079,80159,4508,78304,25350,75457,46458,32937,25623,47,8531,104751,84953,8138,36508,187199,66310,115274,13253,32461,38536,1916,42007,187160,35055,26325,84394,35963,94216,45590,97782];var Rf=15,Lf=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:i,refreshQueryTimeout:s,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=i??vy,this.refreshQueryTimeout=s??Sy,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(o=>o.toISOString()).join(", ")} ]`),Promise.all(n.map(async(o,i)=>{try{if(await this._refreshCommonPrefixLength(i,o,e),this._numPeersForCpl(t)===0){let s=Math.min(2*(i+1),n.length-1);for(let a=i+1;a<s+1;a++)try{await this._refreshCommonPrefixLength(a,o,e)}catch(c){this.log.error(c)}}}catch(s){this.log.error(s)}})).catch(o=>{this.log.error(o)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(o=>{this.log.error(o)})}async _refreshCommonPrefixLength(e,t,n){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let o=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,o,this.routingTable.size);let i=AbortSignal.timeout(this.refreshQueryTimeout);$(1/0,i);let s=await Af(this.peerRouting.getClosestPeers(o.toMultihash().bytes,{signal:i}));this.log(`found ${s} peers that were close to imaginary peer %p`,o),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,o,this.routingTable.size)}_getTrackedCommonPrefixLengthsForRefresh(e){e>Rf&&(e=Rf);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");if(this.routingTable.kb.localPeer==null)throw new Error("Local peer not set");let t=Kt(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=ke(o);return mt(i)}async _makePeerId(e,t,n){if(n>Rf)throw new Error(`Cannot generate peer ID for common prefix length greater than ${Rf}`);let s=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=s&a|t&~a,l=Ky[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,ut.code),u.setUint8(1,32),u.setUint32(2,l,!1),new Uint8Array(u.buffer,u.byteOffset,u.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb?.localPeer!=null)for(let{kadId:e}of this.routingTable.kb.toIterable()){let t=on(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var Df=class{providers;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.providers=t.providers}async handle(e,t){if(t.key==null||t.key.length===0)throw new de("Missing key");let n;try{n=X.decode(t.key)}catch{throw new de("Invalid CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),this.log("%p asked us to store provider record for for %c",e,n),await Promise.all(t.providers.map(async o=>{if(!e.equals(o.id)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log.trace("received provider %p for %s (addrs %s)",e,n,o.multiaddrs.map(s=>Q(s).toString()));let i=ke(o.id);await this.providers.addProvider(n,mt(i))}))}};var Nf=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(this.log("incoming request from %p for peers closer to %b",e,t.key),t.key==null)throw new de("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);te(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(ee("p2p").code))});let o={type:Ee.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:i})=>i.length).map(i=>({id:i.id.toMultihash().bytes,multiaddrs:i.multiaddrs.map(s=>s.bytes)})),providers:[]};return o.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),o}};var Bf=class{peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:i}=t;this.log=e.logger.forComponent(`${i}:rpc:handlers:get-providers`),this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new de("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=X.decode(t.key)}catch{throw new de("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([this.providers.getProviders(n),this.peerRouting.getCloserPeersOffline(t.key,e)]),s=await this._getPeers(o),a=await this._getPeers(i.map(({id:l})=>l)),c={type:Ee.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:a.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toMultihash().bytes,multiaddrs:l.multiaddrs.map(d=>d.bytes)})),providers:s.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toMultihash().bytes,multiaddrs:l.multiaddrs.map(d=>d.bytes)}))};return this.log("got %s providers %s closerPeers",c.providers.length,c.closer.length),c}async _getAddresses(e){return[]}async _getPeers(e){let t=[];for(let n of e)try{let o=await this.peerStore.get(n),i=this.peerInfoMapper({id:n,multiaddrs:o.addresses.map(({multiaddr:s})=>s)});i.multiaddrs.length>0&&t.push(i)}catch(o){if(o.name!=="NotFoundError")throw o}return t}};var Of=class{peerStore;datastore;peerRouting;log;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.datastorePrefix=`/${t.logPrefix.replaceAll(":","/")}/record`,this.peerStore=e.peerStore,this.datastore=e.datastore,this.peerRouting=t.peerRouting}async handle(e,t){let n=t.key;if(this.log("%p asked for key %b",e,n),n==null||n.length===0)throw new de("Invalid key");let o={type:Ee.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(Dy(n)){this.log("is public key");let a=Ny(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Oe("No public key found in key book");c=Lt(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new At(n,c,new Date).serialize(),o}let[i,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return i!=null&&(this.log("had record for %b in local datastore",n),o.record=i.serialize()),s.length>0&&(this.log("had %s closer peers in routing table",s.length),o.closer=s.map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=Ho(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=At.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>fy){await this.datastore.delete(t);return}return o}};var Mf=class{log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:ping`)}async handle(e,t){return this.log("ping from %p",e),t}};var Uf=class{components;validators;log;datastorePrefix;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.datastorePrefix=`/${t.logPrefix.replaceAll(":","/")}/record`,this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new de(o)}try{let o=At.deserialize(t.record);await Zs(this.validators,o),o.timeReceived=new Date;let i=Ho(this.datastorePrefix,o.key);await this.components.datastore.put(i,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,i)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var Ff=class{handlers;routingTable;log;metrics;constructor(e,t){this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_errors_total`)},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.routingTable=t.routingTable,this.handlers={[Ee.GET_VALUE.toString()]:new Of(e,t),[Ee.PUT_VALUE.toString()]:new Uf(e,t),[Ee.FIND_NODE.toString()]:new Nf(e,t),[Ee.ADD_PROVIDER.toString()]:new Df(e,t),[Ee.GET_PROVIDERS.toString()]:new Bf(e,t),[Ee.PING.toString()]:new Mf(e,t)}}async handleMessage(e,t){let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}try{return this.metrics.operations?.increment({[t.type]:!0}),await n.handle(e,t)}catch{this.metrics.errors?.increment({[t.type]:!0})}}onIncomingStream(e){let t="unknown";Promise.resolve().then(async()=>{let{stream:n,connection:o}=e,i=o.remotePeer;try{await this.routingTable.add(i)}catch(a){this.log.error(a)}let s=this;await Je(n,a=>Xt(a),async function*(a){for await(let c of a){let l=io.decode(c);t=l.type,s.log("incoming %s from %p",l.type,i);let d=await s.handleMessage(i,l);d!=null&&(yield io.encode(d))}},a=>Yt(a),n)}).catch(n=>{this.log.error("error handling %s RPC message from %p - %e",t,e.connection.remotePeer,n)})}};var $f=class extends ge{log;components;protocol;running;registrarId;constructor(e,t){super();let{protocol:n,logPrefix:o}=t;this.components=e,this.log=e.logger.forComponent(`${o}:topology-listener`),this.running=!1,this.protocol=n}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.registrarId=await this.components.registrar.register(this.protocol,{onConnect:e=>{this.log("observed peer %p with protocol %s",e,this.protocol),this.dispatchEvent(new CustomEvent("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var h3=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await Ct(this.dht.provide(e,t))}async cancelReprovide(e){await this.dht.cancelReprovide(e)}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,t,n){await Ct(this.dht.put(e,t,n))}async get(e,t){for await(let n of this.dht.get(e,t))if(n.name==="VALUE")return n.value;throw new Oe("Could not find value for key")}},p3=class{dht;constructor(e){this.dht=e}async findPeer(e,t={}){for await(let n of this.dht.findPeer(e,t))if(n.name==="FINAL_PEER")return n.peer;throw new Oe("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},xk=32,Ek=64,Vf=class extends ge{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",o=t.datastorePrefix??"/dht",i=t.metricsPrefix??"libp2p_kad_dht",s={queries:e.metrics?.registerMetricGroup(`${i}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${i}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${i}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${i}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.protocol=t.protocol??hy,this.kBucketSize=t.kBucketSize??20,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??xk,this.maxOutboundStreams=t.maxOutboundStreams??Ek,this.peerInfoMapper=t.peerInfoMapper??Ry;let a=wi();this.providers=new vf(e,{...t.providers,logPrefix:n,datastorePrefix:o,lock:a}),this.validators={...Py,...t.validators},this.selectors={...Cy,...t.selectors},this.network=new xf(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:i}),this.routingTable=new Cf(e,{kBucketSize:t.kBucketSize,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:i,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let c=J();t.allowQueryWithZeroPeers===!0&&c.resolve(),this.queryManager=new Sf(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:n,metricsPrefix:i,initialQuerySelfHasRun:c,routingTable:this.routingTable}),this.peerRouting=new Ef(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new wf(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n}),this.contentRouting=new bf(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new Lf(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new Ff(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:i,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new $f(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new If(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:c,routingTable:this.routingTable,operationMetrics:s}),this.reprovider=new _f(e,{...t.reprovide,logPrefix:n,metricsPrefix:i,datastorePrefix:o,contentRouting:this.contentRouting,lock:a,operationMetrics:s}),this.network.addEventListener("peer",l=>{let d=l.detail;this.onPeerConnect(d).catch(u=>{this.log.error("could not add %p to routing table",d.id,u)}),this.dispatchEvent(new CustomEvent("peer",{detail:d}))}),this.topologyListener.addEventListener("peer",l=>{let d=l.detail;Promise.resolve().then(async()=>{let u=await this.components.peerStore.get(d),f={id:d,multiaddrs:u.addresses.map(({multiaddr:h})=>h),protocols:u.protocols};await this.onPeerConnect(f)}).catch(u=>{this.log.error("could not add %p to routing table",d,u)})}),this.dhtPeerRouting=new p3(this),this.dhtContentRouting=new h3(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",l=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let d=l.detail.peer.addresses.some(({multiaddr:f})=>By(f)),u=this.getMode();d&&u==="client"?await this.setMode("server"):u==="server"&&!d&&await this.setMode("client")}).catch(d=>{this.log.error("error setting dht server mode",d)})}),this.get=Ci(this.get.bind(this),s,"GET_VALUE"),this.findProviders=Ci(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=Ci(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=Ci(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=Ci(this.provide.bind(this),s,"PROVIDE"),this.put=Ci(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[Ie]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[Vr]=["@libp2p/identify"];get[ln](){return this.dhtContentRouting}get[un](){return this.dhtPeerRouting}get[Qo](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log.trace("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t=!1){if(e===this.getMode()&&!t){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol),e===this.getMode()&&!t){this.log("already in %s mode",e);return}e==="client"?(this.log("enabling client mode while in %s mode",this.getMode()),this.clientMode=!0):(this.log("enabling server mode while in %s mode",this.getMode()),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",!0),await wt(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await wt(this.querySelf))}async stop(){this.running=!1,await Tt(this.querySelf,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener,this.reprovider)}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async cancelReprovide(e){await this.providers.removeProvider(e,this.components.peerId)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var Pf;(function(r){r[r.SEND_QUERY=0]="SEND_QUERY",r[r.PEER_RESPONSE=1]="PEER_RESPONSE",r[r.FINAL_PEER=2]="FINAL_PEER",r[r.QUERY_ERROR=3]="QUERY_ERROR",r[r.PROVIDER=4]="PROVIDER",r[r.VALUE=5]="VALUE",r[r.ADD_PEER=6]="ADD_PEER",r[r.DIAL_PEER=7]="DIAL_PEER"})(Pf||(Pf={}));function Hy(r={}){return e=>new Vf(e,r)}var Zy=fr(jy(),1),na=Zy.default;var dw=fr(aw(),1);var oa={};Xe(oa,{create:()=>Fk,derivedEmptyPasswordKey:()=>qf});var qf={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function Fk(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",i=r?.saltLength??16,s=r?.iterations??32767,a=rr.get();t*=8;async function c(u,f){let h=a.getRandomValues(new Uint8Array(i)),p=a.getRandomValues(new Uint8Array(n)),m={name:e,iv:p};typeof f=="string"&&(f=M(f));let g;if(f.length===0){g=await a.subtle.importKey("jwk",qf,{name:"AES-GCM"},!0,["encrypt"]);try{let b={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(b,w,{name:e,length:t},!0,["encrypt"])}catch{g=await a.subtle.importKey("jwk",qf,{name:"AES-GCM"},!0,["encrypt"])}}else{let b={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(b,w,{name:e,length:t},!0,["encrypt"])}let y=await a.subtle.encrypt(m,g,u);return Pe([h,m.iv,new Uint8Array(y)])}async function l(u,f){let h=u.subarray(0,i),p=u.subarray(i,i+n),m=u.subarray(i+n),g={name:e,iv:p};typeof f=="string"&&(f=M(f));let y;if(f.length===0)try{let w={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},x=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,x,{name:e,length:t},!0,["decrypt"])}catch{y=await a.subtle.importKey("jwk",qf,{name:"AES-GCM"},!0,["decrypt"])}else{let w={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},x=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,x,{name:e,length:t},!0,["decrypt"])}let b=await a.subtle.decrypt(g,y,m);return new Uint8Array(b)}return{encrypt:c,decrypt:l}}async function g3(r,e){let n=await oa.create().encrypt(r,e);return it.encode(n)}async function y3(r,e,t){if(r.type==="RSA")return Kk(r,e,t);if(r.type==="Ed25519")return $k(r,e,t);if(r.type==="secp256k1")return Vk(r,e,t);throw new $r}async function $k(r,e,t="libp2p-key"){if(t==="libp2p-key")return g3(hs(r),e);throw new C(`export format '${t}' is not supported`)}async function Vk(r,e,t="libp2p-key"){if(t==="libp2p-key")return g3(hs(r),e);throw new C("Export format is not supported")}async function Kk(r,e,t="pkcs-8"){if(t==="pkcs-8")return Hk(r,e);if(t==="libp2p-key")return g3(hs(r),e);throw new C("Export format is not supported")}async function Hk(r,e){let t=rr.get(),o=new ft({value:[new tt({value:0}),new ft({value:[new Cr({value:"1.2.840.113549.1.1.1"}),new Kn]}),new Hn({valueHex:r.raw})]}).toBER(),i=new Uint8Array(o,0,o.byteLength),s=Kt(16),a=await zu(wo,e,s,{c:1e4,dkLen:32}),c=Kt(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),d=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,i),u=new ft({value:[new Hn({valueHex:s}),new tt({value:1e4}),new tt({value:32}),new ft({value:[new Cr({value:"1.2.840.113549.2.11"}),new Kn]})]}),f=new ft({value:[new Cr({value:"1.2.840.113549.1.5.13"}),new ft({value:[new ft({value:[new Cr({value:"1.2.840.113549.1.5.12"}),u]}),new ft({value:[new Cr({value:"2.16.840.1.101.3.4.1.42"}),new Hn({valueHex:c})]})]})]}),p=new ft({value:[f,new Hn({valueHex:d})]}).toBER(),m=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...V(m,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
19
+ `)}async function w3(r,e){try{let t=await qk(r,e);return k8(t)}catch{}if(!r.includes("BEGIN"))throw new C("Encrypted key was not a libp2p-key or a PEM file");return Wk(r,e)}async function qk(r,e){let t=it.decode(r);return oa.create().decrypt(t,e)}async function Wk(r,e){let t=rr.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let i=M(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=fi(i),{iv:a,salt:c,iterations:l,keySize:d,cipherText:u}=zk(s),f=await zu(wo,e,c,{c:l,dkLen:d}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Qc(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,u)),{result:m}=fi(p);n=uw(m)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let i=M(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=fi(i);n=uw(s)}else throw new C("Could not parse private key from PEM data");let o=C8(n);if(o.type!=="RSA")throw new C("Could not parse RSA private key from PEM data");return o}function zk(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new C("Only pkcs5PBES2 encrypted private keys are supported");let n=e.valueBlock.value[1].valueBlock.value[0];if(n.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.12")throw new C("Only pkcs5PBKDF2 key derivation functions are supported");let i=n.valueBlock.value[1],s=Qc(i.valueBlock.value[0].getValue()),a=1e4,c=32;if(i.valueBlock.value.length===3)a=Number(i.valueBlock.value[1].toBigInt()),c=Number(i.valueBlock.value[2].toBigInt());else if(i.valueBlock.value.length===2)throw new C("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key");let l=e.valueBlock.value[1].valueBlock.value[1],d=l.valueBlock.value[0].toString();if(d!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(d!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new C("Only AES-CBC encryption schemes are supported")}}}}let u=Qc(l.valueBlock.value[1].getValue());return{cipherText:Qc(r.valueBlock.value[1].getValue()),salt:s,iterations:a,keySize:c,iv:u}}function uw(r){return Qc(r.valueBlock.value[2].getValue())}function Qc(r){return new Uint8Array(r,0,r.byteLength)}var Gk="/pkcs8/",x3="/info/",Yc=new WeakMap,Pi={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},b3={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function ia(r){return r==null||typeof r!="string"?!1:r===(0,dw.default)(r.trim())&&r.length>0}async function It(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function Ri(r){return new De(Gk+r)}function sa(r){return new De(x3+r)}async function Qk(r){let e=hs(r),t=await ut.digest(e);return Se.encode(t.bytes).substring(1)}var Wf=class{components;init;log;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=na(b3,t),this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<Pi.minKeyLength)throw new Error(`dek.keyLength must be least ${Pi.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Pi.minSaltLength)throw new Error(`dek.saltLength must be least ${Pi.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Pi.minIterationCount)throw new Error(`dek.iterationCount must be least ${Pi.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Za(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Yc.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[Ie]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},b3),t=Math.ceil(Pi.minSaltLength/3)*3;return e.dek.salt=V(Kt(t),"base64"),e}static get options(){return b3}async findKeyByName(e){if(!ia(e))throw await It(),new C(`Invalid key name '${e}'`);let t=sa(e);try{let n=await this.components.datastore.get(t);return JSON.parse(V(n))}catch(n){throw await It(),this.log.error(n),new Oe(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:x3};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(V(n.value));if(o.id===e)return o}throw new C(`Key with id '${e}' does not exist.`)}catch(t){throw await It(),t}}async importKey(e,t){if(!ia(e))throw await It(),new C(`Invalid key name '${e}'`);if(t==null)throw await It(),new C("Key is required");let n=Ri(e);if(await this.components.datastore.has(n))throw await It(),new C(`Key '${e}' already exists`);let i,s;try{i=await Qk(t);let l=Yc.get(this);if(l==null)throw new C("dek missing");let d=l.dek;s=await y3(t,d,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await It(),l}let a={name:e,id:i},c=this.components.datastore.batch();return c.put(n,M(s)),c.put(sa(e),M(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!ia(e))throw await It(),new C(`Invalid key name '${e}'`);let t=Ri(e);try{let n=await this.components.datastore.get(t),o=V(n),i=Yc.get(this);if(i==null)throw new C("dek missing");let s=i.dek;return await w3(o,s)}catch(n){throw await It(),n}}async removeKey(e){if(!ia(e)||e==="self")throw await It(),new C(`Invalid key name '${e}'`);let t=Ri(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(sa(e)),await o.commit(),n}async listKeys(){let e={prefix:x3},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(V(n.value)));return t}async renameKey(e,t){if(!ia(e)||e==="self")throw await It(),new C(`Invalid old key name '${e}'`);if(!ia(t)||t==="self")throw await It(),new C(`Invalid new key name '${t}'`);let n=Ri(e),o=Ri(t),i=sa(e),s=sa(t);if(await this.components.datastore.has(o))throw await It(),new C(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(i),d=JSON.parse(V(l));d.name=t;let u=this.components.datastore.batch();return u.put(o,c),u.put(s,M(JSON.stringify(d))),u.delete(n),u.delete(i),await u.commit(),d}catch(c){throw await It(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await It(),new C(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await It(),new C(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await It(),new C(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=Yc.get(this);if(n==null)throw new C("dek missing");let o=n.dek;this.init.pass=t;let i=t!=null&&this.init.dek?.salt!=null?Za(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Yc.set(this,{dek:i});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(Ri(a.name)),l=V(c),d=await w3(l,o),u=i.toString(),f=await y3(d,u,d.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(Ri(a.name),M(f)),h.put(sa(a.name),M(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function zf(r={}){return e=>new Wf(e,r)}var aa=class{memoryStorage;points;duration;blockDuration;execEvenly;execEvenlyMinDelayMs;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.execEvenly=e.execEvenly??!1,this.execEvenlyMinDelayMs=e.execEvenlyMinDelayMs??this.duration*1e3/this.points,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new E3}async consume(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);if(s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s.consumedPoints>this.points)throw this.blockDuration>0&&s.consumedPoints<=this.points+t&&(s=this.memoryStorage.set(o,s.consumedPoints,this.blockDuration)),new wl("Rate limit exceeded",s);if(this.execEvenly&&s.msBeforeNext>0&&!s.isFirstInDuration){let a=Math.ceil(s.msBeforeNext/(s.remainingPoints+2));a<this.execEvenlyMinDelayMs&&(a=s.consumedPoints*this.execEvenlyMinDelayMs),await jd(a)}return s}penalty(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}reward(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,-t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}block(e,t){let n=t*1e3,o=this.points+1;return this.memoryStorage.set(this.getKey(e),o,t),{remainingPoints:0,msBeforeNext:n===0?-1:n,consumedPoints:o,isFirstInDuration:!1}}set(e,t,n=0){let o=(n>=0?n:this.duration)*1e3;return this.memoryStorage.set(this.getKey(e),t,n),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:t,isFirstInDuration:!1}}get(e){let t=this.memoryStorage.get(this.getKey(e));return t!=null&&(t.remainingPoints=Math.max(this.points-t.consumedPoints,0)),t}delete(e){this.memoryStorage.delete(this.getKey(e))}_getKeySecDuration(e){return e?.customDuration!=null&&e.customDuration>=0?e.customDuration:this.duration}getKey(e){return this.keyPrefix.length>0?`${this.keyPrefix}:${e}`:e}parseKey(e){return e.substring(this.keyPrefix.length)}},E3=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let i=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||i>0?(o.value+=t,{remainingPoints:0,msBeforeNext:i,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,i=this.storage.get(e);i!=null&&clearTimeout(i.timeoutId);let s={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,s),o>0&&(s.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),s.timeoutId.unref!=null&&s.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:s.value,isFirstInDuration:!0}}get(e){let t=this.storage.get(e);if(t!=null)return{remainingPoints:0,msBeforeNext:t.expiresAt!=null?t.expiresAt.getTime()-new Date().getTime():-1,consumedPoints:t.value,isFirstInDuration:!1}}delete(e){let t=this.storage.get(e);return t!=null?(t.timeoutId!=null&&clearTimeout(t.timeoutId),this.storage.delete(e),!0):!1}};var we;(function(r){r[r.NEW_STREAM=0]="NEW_STREAM",r[r.MESSAGE_RECEIVER=1]="MESSAGE_RECEIVER",r[r.MESSAGE_INITIATOR=2]="MESSAGE_INITIATOR",r[r.CLOSE_RECEIVER=3]="CLOSE_RECEIVER",r[r.CLOSE_INITIATOR=4]="CLOSE_INITIATOR",r[r.RESET_RECEIVER=5]="RESET_RECEIVER",r[r.RESET_INITIATOR=6]="RESET_INITIATOR"})(we||(we={}));var Xc=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),v3=Object.freeze({NEW_STREAM:we.NEW_STREAM,MESSAGE:we.MESSAGE_INITIATOR,CLOSE:we.CLOSE_INITIATOR,RESET:we.RESET_INITIATOR}),fw=Object.freeze({MESSAGE:we.MESSAGE_RECEIVER,CLOSE:we.CLOSE_RECEIVER,RESET:we.RESET_RECEIVER});var S3=1<<20,Yk=4<<20,Gf=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=S3,t=Yk){this._buffer=new le,this._headerInfo=null,this._maxMessageSize=e,this._maxUnprocessedMessageQueueSize=t}write(e){if(e==null||e.length===0)return[];if(this._buffer.append(e),this._buffer.byteLength>this._maxUnprocessedMessageQueueSize)throw new de("Unprocessed message queue size too large!");let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.name==="InvalidMessageError")throw l;break}let{id:n,type:o,length:i,offset:s}=this._headerInfo;if(this._buffer.length-s<i)break;let c={id:n,type:o};(o===we.NEW_STREAM||o===we.MESSAGE_INITIATOR||o===we.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(s,s+i)),t.push(c),this._buffer.consume(s+i),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=pw(e),{value:o,offset:i}=pw(e,n),s=t&7;if(Xc[s]==null)throw new Error(`Invalid type received: ${s}`);if(o>this._maxMessageSize)throw new de("Message size too large");return{id:t>>3,type:s,offset:n+i,length:o}}},Xk=128,hw=127;function pw(r,e=0){let t=0,n=0,o=e,i,s=r.length;do{if(o>=s||n>49)throw e=0,new RangeError("Could not decode varint");i=r.get(o++),t+=n<28?(i&hw)<<n:(i&hw)*Math.pow(2,n),n+=7}while(i>=Xk);return e=o-e,{value:t,offset:e}}var A3=10*1024,I3=class{_pool;_poolOffset;constructor(){this._pool=Ge(A3),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Ke(e.id<<3|e.type,n,o),o+=pe(e.id<<3|e.type),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null?(Ke(e.data.length,n,o),o+=pe(e.data.length)):(Ke(0,n,o),o+=pe(0));let i=n.subarray(this._poolOffset,o);A3-o<100?(this._pool=Ge(A3),this._poolOffset=0):this._poolOffset=o,t.append(i),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},jk=new I3;async function*mw(r){for await(let e of r){let t=new le;jk.write(e,t),yield t}}var Qf=class extends Error{constructor(e="Stream input buffer error"){super(e),this.name="StreamInputBufferError"}};var _3=class extends kn{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?v3:fw,this.send=e.send,this.name=e.name,this.streamId=e.streamId,this.maxDataSize=e.maxDataSize}async sendNewStream(){await this.send({id:this.streamId,type:v3.NEW_STREAM,data:new le(M(this.name))})}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxDataSize);await this.send({id:this.streamId,type:this.types.MESSAGE,data:e.sublist(0,t)}),e.consume(t)}}async sendReset(){await this.send({id:this.streamId,type:this.types.RESET})}async sendCloseWrite(){await this.send({id:this.streamId,type:this.types.CLOSE})}async sendCloseRead(){}};function gw(r){let{id:e,name:t,send:n,onEnd:o,type:i="initiator",maxMsgSize:s=S3}=r;return new _3({id:i==="initiator"?`i${e}`:`r${e}`,streamId:e,name:`${t??e}`,direction:i==="initiator"?"outbound":"inbound",maxDataSize:s,onEnd:o,send:n,log:r.logger.forComponent(`libp2p:mplex:stream:${i}:${e}`)})}var Zk=1024,Jk=1024,eC=1024*1024*4,tC=5,rC=500;function yw(r){let e={...r,type:`${Xc[r.type]} (${r.type})`};return r.type===we.NEW_STREAM&&(e.data=V(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===we.MESSAGE_INITIATOR||r.type===we.MESSAGE_RECEIVER)&&(e.data=V(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var Yf=class{protocol="/mplex/6.7.0";sink;source;log;_streamId;_streams;_init;_source;closeController;rateLimiter;closeTimeout;logger;constructor(e,t){t=t??{},this.log=e.logger.forComponent("libp2p:mplex"),this.logger=e.logger,this._streamId=0,this._streams={initiators:new Map,receivers:new Map},this._init=t,this.closeTimeout=t.closeTimeout??rC,this.sink=this._createSink(),this._source=kt({objectMode:!0,onEnd:()=>{for(let n of this._streams.initiators.values())n.destroy();for(let n of this._streams.receivers.values())n.destroy()}}),this.source=Je(this._source,n=>mw(n)),this.closeController=new AbortController,this.rateLimiter=new aa({points:t.disconnectThreshold??tC,duration:1})}get streams(){let e=[];for(let t of this._streams.initiators.values())e.push(t);for(let t of this._streams.receivers.values())e.push(t);return e}newStream(e){if(this.closeController.signal.aborted)throw new fn("Muxer already closed");let t=this._streamId++;e=e==null?t.toString():e.toString();let n=this._streams.initiators;return this._newStream({id:t,name:e,type:"initiator",registry:n})}async close(e){if(this.closeController.signal.aborted)return;let t=e?.signal??AbortSignal.timeout(this.closeTimeout);try{await Promise.all(this.streams.map(async n=>n.close({signal:t}))),this._source.end(),await this._source.onEmpty({signal:t}),this.closeController.abort()}catch(n){this.abort(n)}}abort(e){this.closeController.signal.aborted||(this.streams.forEach(t=>{t.abort(e)}),this.closeController.abort(e))}_newReceiverStream(e){let{id:t,name:n}=e,o=this._streams.receivers;return this._newStream({id:t,name:n,type:"receiver",registry:o})}_newStream(e){let{id:t,name:n,type:o,registry:i}=e;if(this.log("new %s stream %s",o,t),o==="initiator"&&this._streams.initiators.size===(this._init.maxOutboundStreams??Jk))throw new lo("Too many outbound streams open");if(i.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=gw({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,yw(l)),this._source.push(l)},type:o,onEnd:()=>{this.log("%s stream with id %s and protocol %s ended",o,t,c.protocol),i.delete(t),this._init.onStreamEnd!=null&&this._init.onStreamEnd(c)},maxMsgSize:this._init.maxMsgSize,logger:this.logger});return i.set(t,c),c}_createSink(){return async t=>{let n=()=>{Pd(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new Gf(this._init.maxMsgSize,this._init.maxUnprocessedMessageQueueSize);for await(let i of t)for(let s of o.write(i))await this._handleIncoming(s);this._source.end()}catch(o){this.log("error in sink",o),this._source.end(o)}finally{this.closeController.signal.removeEventListener("abort",n)}}}async _handleIncoming(e){let{id:t,type:n}=e;if(this.log.enabled&&this.log.trace("incoming message",yw(e)),e.type===we.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??Zk)){this.log("too many inbound streams open"),this._source.push({id:t,type:we.RESET_RECEIVER});try{await this.rateLimiter.consume("new-stream",1)}catch{this.log("rate limit hit when opening too many new streams over the inbound stream limit - closing remote connection"),this.abort(new Error("Too many open streams"));return}return}let a=this._newReceiverStream({id:t,name:V(e.data instanceof Uint8Array?e.data:e.data.subarray())});this._init.onIncomingStream!=null&&this._init.onIncomingStream(a);return}let i=((n&1)===1?this._streams.initiators:this._streams.receivers).get(t);if(i==null){this.log("missing stream %s for message type %s",t,Xc[n]);try{await this.rateLimiter.consume("missing-stream",1)}catch{this.log("rate limit hit when receiving messages for streams that do not exist - closing remote connection"),this.abort(new Error("Too many messages for missing streams"));return}return}let s=this._init.maxStreamBufferSize??eC;try{switch(n){case we.MESSAGE_INITIATOR:case we.MESSAGE_RECEIVER:if(i.sourceReadableLength()>s)throw this._source.push({id:e.id,type:n===we.MESSAGE_INITIATOR?we.RESET_RECEIVER:we.RESET_INITIATOR}),new Qf("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers");i.sourcePush(e.data);break;case we.CLOSE_INITIATOR:case we.CLOSE_RECEIVER:i.remoteCloseWrite();break;case we.RESET_INITIATOR:case we.RESET_RECEIVER:i.reset();break;default:this.log("unknown message type %s",n)}}catch(a){this.log.error("error while processing message",a),i.abort(a)}}};var T3=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}[Symbol.toStringTag]="@libp2p/mplex";[Ie]=["@libp2p/stream-multiplexing"];createStreamMuxer(e={}){return new Yf(this.components,{...e,...this._init})}};function ww(r={}){return e=>new T3(e,r)}var bw="1.0.0",xw="ping",Ew="ipfs";var Xf=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??Ew}/${xw}/${bw}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handleMessage=this.handleMessage.bind(this)}[Symbol.toStringTag]="@libp2p/ping";async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}handleMessage(e){this.log("incoming ping from %p",e.connection.remotePeer);let{stream:t}=e,n=Date.now(),o=Ai(t);Promise.resolve().then(async()=>{for(;;){let i=AbortSignal.timeout(this.timeout);i.addEventListener("abort",()=>{t?.abort(new Ur("ping timeout"))});let s=await o.read(32,{signal:i});await o.write(s,{signal:i})}}).catch(i=>{this.log.error("incoming ping from %p failed with error",e.connection.remotePeer,i),t?.abort(i)}).finally(()=>{let i=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,i)})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=Kt(32),i=await this.components.connectionManager.openConnection(e,t),s;if(t.signal==null){let a=AbortSignal.timeout(this.timeout);t={...t,signal:a}}try{s=await i.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let a=Ai(s),[,c]=await Promise.all([a.write(o,t),a.read(32,t)]),l=Date.now()-n;if(!te(o,c.subarray()))throw new pl(`Received wrong ping ack after ${l}ms`);return this.log("ping %p complete in %dms",i.remotePeer,l),l}catch(a){throw this.log.error("error while pinging %p",i.remotePeer,a),s?.abort(a),a}finally{s!=null&&await s.close(t)}}};function vw(r={}){return e=>new Xf(e,r)}var Sw=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},sC=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var aC=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var cC=function(){function r(e,t,n,o){this.name=e,this.version=t,this.os=n,this.bot=o,this.type="bot-device"}return r}();var lC=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var uC=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var dC=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,fC=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,Aw=3,hC=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/EdgA?\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["pie",/^Microsoft Pocket Internet Explorer\/(\d+\.\d+)$/],["pie",/^Mozilla\/\d\.\d+\s\(compatible;\s(?:MSP?IE|MSInternet Explorer) (\d+\.\d+);.*Windows CE.*\)$/],["netfront",/^Mozilla\/\d\.\d+.*NetFront\/(\d.\d)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FB[AS]V\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["curl",/^curl\/([0-9\.]+)$/],["searchbot",dC]],Iw=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Windows CE",/Windows CE|WinCE|Microsoft Pocket Internet Explorer/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function Tw(r){return r?_w(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new uC:typeof navigator<"u"?_w(navigator.userAgent):gC()}function pC(r){return r!==""&&hC.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var i=o.exec(r);return!!i&&[n,i]},!1)}function _w(r){var e=pC(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new lC;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<Aw&&(o=Sw(Sw([],o,!0),yC(Aw-o.length),!0)):o=[];var i=o.join("."),s=mC(r),a=fC.exec(r);return a&&a[1]?new cC(t,i,s,a[1]):new sC(t,i,s)}function mC(r){for(var e=0,t=Iw.length;e<t;e++){var n=Iw[e],o=n[0],i=n[1],s=i.exec(r);if(s)return o}return null}function gC(){var r=typeof process<"u"&&process.version;return r?new aC(process.version.slice(1)):null}function yC(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var kw=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"];var Cw=Tw(),jc=Cw!=null&&Cw.name==="firefox",jf=async function*(){},Zf=async r=>{},wC=30*1e3;function Pw(r,e,t=wC,n){r.readyState==="open"&&Promise.resolve().then(async()=>{if(r.bufferedAmount>0){n.log("%s drain channel with %d buffered bytes",e,r.bufferedAmount);let o=J(),i=!1;r.bufferedAmountLowThreshold=0;let s=()=>{i||(n.log("%s drain channel closed before drain",e),o.resolve())};r.addEventListener("close",s,{once:!0}),r.addEventListener("bufferedamountlow",()=>{i=!0,r.removeEventListener("close",s),o.resolve()}),await jr(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}async function Zc(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??kw.map(e=>({urls:[e]})),r}var Li=class{log;peerConnection;remoteAddr;timeline;metrics;source=jf();sink=Zf;constructor(e,t){this.log=e.logger.forComponent("libp2p:webrtc:maconn"),this.remoteAddr=t.remoteAddr,this.timeline=t.timeline,this.peerConnection=t.peerConnection;let n=this.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",this.peerConnection.connectionState,"initial state",n),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.timeline.close=Date.now())}}async close(e){this.log.trace("closing connection"),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({close:!0})}abort(e){this.log.error("closing connection due to error",e),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({abort:!0})}};var Gt;(function(r){let e;(function(o){o.FIN="FIN",o.STOP_SENDING="STOP_SENDING",o.RESET="RESET",o.FIN_ACK="FIN_ACK"})(e=r.Flag||(r.Flag={}));let t;(function(o){o[o.FIN=0]="FIN",o[o.STOP_SENDING=1]="STOP_SENDING",o[o.RESET=2]="RESET",o[o.FIN_ACK=3]="FIN_ACK"})(t||(t={})),function(o){o.codec=()=>He(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=oe((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.flag!=null&&(i.uint32(8),r.Flag.codec().encode(o.flag,i)),o.message!=null&&(i.uint32(18),i.bytes(o.message)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.flag=r.Flag.codec().decode(o);break}case 2:{a.message=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,i)=>re(o,r.codec(),i)})(Gt||(Gt={}));var bC=2*1024*1024,xC=30*1e3,Jf=16*1024;function EC(r=Jf){let e=pe(r-pe(r)),t=1+pe(Object.keys(Gt.Flag).length-1),n=1,o=r-e-t-n,i=pe(o);return e+t+n+i}var vC=EC(),SC=5e3,AC=5e3,C3=class extends kn{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;constructor(e){let t=e.onEnd;switch(e.onEnd=o=>{this.log.trace("readable and writeable ends closed",this.status),Promise.resolve(async()=>{if(!(this.timeline.abort!=null||this.timeline.reset!==null))try{await jr(this.receiveFinAck.promise,{milliseconds:this.finAckTimeout})}catch(i){this.log.error("error receiving FIN_ACK",i)}}).then(()=>{this.incomingData.end(),t?.(o)}).catch(i=>{this.log.error("error ending stream",i)})},super(e),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=kt(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??xC,this.maxBufferedAmount=e.maxBufferedAmount??bC,this.maxMessageSize=(e.maxMessageSize??Jf)-vC,this.receiveFinAck=J(),this.finAckTimeout=e.closeTimeout??SC,this.openTimeout=e.openTimeout??AC,this.channel.readyState){case"open":this.timeline.open=new Date().getTime();break;case"closed":case"closing":(this.timeline.close===void 0||this.timeline.close===0)&&(this.timeline.close=Date.now());break;case"connecting":break;default:throw this.log.error("unknown datachannel state %s",this.channel.readyState),new Yo("Unknown datachannel state")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.receiveFinAck.resolve(),this.close().catch(i=>{this.log.error("error closing stream after channel closed",i)})},this.channel.onerror=o=>{let i=o.error;this.abort(i)},this.channel.onmessage=async o=>{let{data:i}=o;i===null||i.byteLength===0||this.incomingData.push(new Uint8Array(i,0,i.byteLength))};let n=this;Promise.resolve().then(async()=>{for await(let o of Xt(this.incomingData)){let i=n.processIncomingProtobuf(o);i!=null&&n.sourcePush(new le(i))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(t&&this.channel.bufferedAmount>this.maxBufferedAmount)try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await zc(this.channel,"bufferedamountlow",{timeout:this.bufferedAmountLowEventTimeout})}catch(n){throw n instanceof Ur?new Ur(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`):n}if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new Yo(`Invalid datachannel state - ${this.channel.readyState}`);this.channel.readyState!=="open"&&(this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await zc(this.channel,"open",{timeout:this.openTimeout}),this.log('channel state is now "%s", sending data',this.channel.readyState)),this.channel.send(e.subarray())}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxMessageSize),n=e.subarray(0,t),o=Gt.encode({message:n}),i=Yt.single(o);await this._sendMessage(i),e.consume(t)}}async sendReset(){await this._sendFlag(Gt.Flag.RESET)}async sendCloseWrite(e){if(await this._sendFlag(Gt.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await Ce(this.receiveFinAck.promise,e?.signal,{errorMessage:"sending close-write was aborted before FIN_ACK was received",errorName:"FinAckNotReceivedError"})}catch(n){this.log.error("failed to await FIN_ACK",n)}}else this.log.trace("sending FIN failed, not awaiting FIN_ACK");this.receiveFinAck.resolve()}async sendCloseRead(){await this._sendFlag(Gt.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Gt.decode(e);if(t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===Gt.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Gt.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Gt.Flag.RESET&&this.reset(),t.flag===Gt.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Gt.Flag.FIN_ACK&&(this.log.trace("received FIN_ACK"),this.receiveFinAck.resolve())),this.readStatus==="ready")return t.message}async _sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',this.channel.readyState,e.toString()),!1;this.log.trace("sending flag %s",e.toString());let t=Gt.encode({flag:e}),n=Yt.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s",e.toString(),o)}return!1}};function ca(r){let{channel:e,direction:t}=r;return new C3({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var Rw="/webrtc",Wo=class{protocol;peerConnection;bufferedStreams=[];metrics;dataChannelOptions;components;log;constructor(e,t){this.components=e,this.peerConnection=t.peerConnection,this.metrics=t.metrics,this.protocol=t.protocol??Rw,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:datachannelmuxerfactory"),this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace('incoming early datachannel with channel id %d and label "%s"',n.id),n.label==="init"){this.log.trace("closing early init channel"),n.close();return}let o={},i=ca({channel:n,direction:"inbound",onEnd:s=>{o.onEnd(s)},logger:e.logger,...this.dataChannelOptions});o.stream=i,o.channel=n,o.onEnd=()=>{this.bufferedStreams=this.bufferedStreams.filter(s=>s.stream.id!==i.id)},this.bufferedStreams.push(o)}}createStreamMuxer(e){return new P3(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},P3=class{init;streams;protocol;log;peerConnection;dataChannelOptions;metrics;logger;constructor(e,t){this.init=t,this.log=e.logger.forComponent("libp2p:webrtc:muxer"),this.logger=e.logger,this.streams=t.streams.map(n=>n.stream),this.peerConnection=t.peerConnection,this.protocol=t.protocol??Rw,this.metrics=t.metrics,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace("incoming datachannel with channel id %d",n.id),n.label==="init"){this.log.trace("closing init channel"),n.close();return}let o=ca({channel:n,direction:"inbound",onEnd:()=>{this.log("incoming channel %s ended with state %s",n.id,n.readyState),this.#e(o,n)},logger:this.logger,...this.dataChannelOptions});this.streams.push(o),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(o)},this.init.streams.length>0&&queueMicrotask(()=>{this.init.streams.forEach(n=>{n.onEnd=()=>{this.log("incoming early channel %s ended with state %s",n.channel.id,n.channel.readyState),this.#e(n.stream,n.channel)},this.metrics?.increment({incoming_stream:!0}),this.init?.onIncomingStream?.(n.stream)})})}#e(e,t){this.log.trace("stream %s %s %s onEnd",e.direction,e.id,e.protocol),Pw(t,`${e.direction} ${e.id} ${e.protocol}`,this.dataChannelOptions.drainTimeout,{log:this.log}),this.streams=this.streams.filter(n=>n.id!==e.id),this.metrics?.increment({stream_end:!0}),this.init?.onStreamEnd?.(e)}async close(e){try{await Promise.all(this.streams.map(async t=>t.close(e)))}catch(t){this.abort(t)}}abort(e){for(let t of this.streams)t.abort(e)}source=jf();sink=Zf;newStream(){let e=this.peerConnection.createDataChannel("");this.log.trace("opened outgoing datachannel with channel id %s",e.id);let t=ca({channel:e,direction:"outbound",onEnd:()=>{this.log("outgoing channel %s ended with state %s",e.id,e.readyState),this.#e(t,e)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(t),this.metrics?.increment({outgoing_stream:!0}),t}};var Di=globalThis.RTCPeerConnection,eh=globalThis.RTCSessionDescription,Lw=globalThis.RTCIceCandidate;var zo=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Or=class extends zo{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var Jc=class extends zo{constructor(e,t){super(`[stream: ${e}] data channel error: ${t}`),this.name="WebRTC/DataChannelError"}},th=class extends zo{constructor(e){super(`There was a problem with the Multiaddr which was passed in: ${e}`),this.name="WebRTC/InappropriateMultiaddrError"}};var el=class extends zo{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var rh=class extends zo{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},nh=class extends zo{constructor(e){super(`unsupported hash algorithm code: ${e} please see the codes at https://github.com/multiformats/multicodec/blob/master/table.csv `),this.name="WebRTC/UnsupportedHashAlgorithmError"}};var dr;(function(r){let e;(function(o){o.SDP_OFFER="SDP_OFFER",o.SDP_ANSWER="SDP_ANSWER",o.ICE_CANDIDATE="ICE_CANDIDATE"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.SDP_OFFER=0]="SDP_OFFER",o[o.SDP_ANSWER=1]="SDP_ANSWER",o[o.ICE_CANDIDATE=2]="ICE_CANDIDATE"})(t||(t={})),function(o){o.codec=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=oe((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.data!=null&&(i.uint32(18),i.string(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.data=o.string();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,i)=>re(o,r.codec(),i)})(dr||(dr={}));var oh=async(r,e,t)=>{try{let n=J();for(IC(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal}).catch(()=>{})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==dr.Type.ICE_CANDIDATE)throw new de("ICE candidate message expected");let i=JSON.parse(o.data??"null");if(i===""||i===null){t.onProgress?.(new H("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let s=new Lw(i);t.log.trace("%s received new ICE candidate %o",t.direction,i);try{t.onProgress?.(new H("webrtc:add-ice-candidate",s.candidate)),await r.addIceCandidate(s)}catch(a){t.log.error("%s bad candidate received",t.direction,i,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate",t.direction,n),t.signal?.aborted===!0&&ih(r)!=="connected")throw n}};function ih(r){return jc?r.iceConnectionState:r.connectionState}function IC(r,e){r[jc?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(ih(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new Vi("RTCPeerConnection was closed"));break;default:break}}}async function Dw({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:i,transportManager:s,log:a,logger:c,onProgress:l}){let{baseAddr:d}=Nw(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing base address: %a",d);let u=d.getPeerId();if(u==null)throw new C("Relay peer was missing");let f=i.getConnections(Re(u)),h,p=!1;f.length===0?(l?.(new H("webrtc:dial-relay")),h=await s.dial(d,{signal:t,onProgress:l}),p=!0):(l?.(new H("webrtc:reuse-relay-connection")),h=f[0]);try{l?.(new H("webrtc:open-signaling-stream"));let m=await h.newStream(sh,{signal:t,runOnLimitedConnection:!0}),g=ot(m).pb(dr),y=new Di(r),b=new Wo({logger:c},{peerConnection:y,dataChannelOptions:e});try{let w=y.createDataChannel("init");y.onicecandidate=({candidate:v})=>{let S=JSON.stringify(v?.toJSON()??null);a.trace("initiator sending ICE candidate %o",v),g.write({type:dr.Type.ICE_CANDIDATE,data:S},{signal:t}).catch(_=>{a.error("error sending ICE candidate",_)})},y.onicecandidateerror=v=>{a.error("initiator ICE candidate error",v)};let x=await y.createOffer().catch(v=>{throw a.error("could not execute createOffer",v),new Or("Failed to set createOffer")});a.trace("initiator send SDP offer %s",x.sdp),l?.(new H("webrtc:send-sdp-offer")),await g.write({type:dr.Type.SDP_OFFER,data:x.sdp},{signal:t}),await y.setLocalDescription(x).catch(v=>{throw a.error("could not execute setLocalDescription",v),new Or("Failed to set localDescription")}),l?.(new H("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let T=await g.read({signal:t});if(T.type!==dr.Type.SDP_ANSWER)throw new Or("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",T.data);let k=new eh({type:"answer",sdp:T.data});return await y.setRemoteDescription(k).catch(v=>{throw a.error("could not execute setRemoteDescription",v),new Or("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new H("webrtc:read-ice-candidates")),await oh(y,g,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected, closing init channel"),w.close(),l?.(new H("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await m.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:y,muxerFactory:b}}catch(w){throw a.error("outgoing signaling error",w),y.close(),m.abort(w),w}finally{y.onicecandidate=null,y.onicecandidateerror=null}}finally{if(p)try{await h.close({signal:t})}catch(m){h.abort(m)}}}var ah=class extends ge{peerId;transportManager;shutdownController;constructor(e,t){super(),this.peerId=e.peerId,this.transportManager=e.transportManager,this.shutdownController=t.shutdownController}async listen(){this.safeDispatchEvent("listening",{})}getAddrs(){return this.transportManager.getListeners().filter(e=>e!==this).map(e=>e.getAddrs().filter(t=>oo.matches(t)).map(t=>t.encapsulate(`/webrtc/p2p/${this.peerId}`))).flat()}async close(){this.shutdownController.abort(),this.safeDispatchEvent("close",{})}};async function Bw({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let i=ot(e).pb(dr);try{r.onicecandidate=({candidate:d})=>{let u=JSON.stringify(d?.toJSON()??null);o.trace("recipient sending ICE candidate %s",u),i.write({type:dr.Type.ICE_CANDIDATE,data:u},{signal:t}).catch(f=>{o.error("error sending ICE candidate",f)})},o.trace("recipient read SDP offer");let a=await i.read({signal:t});if(a.type!==dr.Type.SDP_OFFER)throw new Or(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `);o.trace("recipient received SDP offer %s",a.data);let c=new eh({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(d=>{throw o.error("could not execute setRemoteDescription",d),new Or("Failed to set remoteDescription")});let l=await r.createAnswer().catch(d=>{throw o.error("could not execute createAnswer",d),new Or("Failed to create answer")});o.trace("recipient send SDP answer %s",l.sdp),await i.write({type:dr.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(d=>{throw o.error("could not execute setLocalDescription",d),new Or("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await oh(r,i,{direction:"recipient",signal:t,log:o})}catch(a){if(ih(r)!=="connected")throw o.error("error while handling signaling stream from peer %a",n.remoteAddr,a),r.close(),a;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",n.remoteAddr,a)}let s=Q(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",s),{remoteAddress:s}}var _C="/webrtc",TC="/p2p-circuit",sh="/webrtc-signaling/0.0.1",kC=30*1e3,ch=class{components;init;log;_started=!1;metrics;shutdownController;constructor(e,t={}){this.components=e,this.init=t,this.log=e.logger.forComponent("libp2p:webrtc"),this.shutdownController=new AbortController,$(1/0,this.shutdownController.signal),e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dialer events by type"}),listenerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_listener_events_total",{label:"event",help:"Total count of WebRTC listener events by type"})})}[dn]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[Ie]=["@libp2p/transport"];[Vr]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(sh,e=>{this._onProtocol(e).catch(t=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,t)})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(sh),this._started=!1}createListener(e){return new ah(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(Sc.exactMatch)}dialFilter(e){return this.listenFilter(e)}async dial(e,t){this.log.trace("dialing address: %a",e);let{remoteAddress:n,peerConnection:o,muxerFactory:i}=await Dw({rtcConfiguration:await Zc(this.init.rtcConfiguration),dataChannel:this.init.dataChannel,multiaddr:e,dataChannelOptions:this.init.dataChannel,signal:t.signal,connectionManager:this.components.connectionManager,transportManager:this.components.transportManager,log:this.log,logger:this.components.logger,onProgress:t.onProgress}),s=new Li(this.components,{peerConnection:o,timeline:{open:Date.now()},remoteAddr:n,metrics:this.metrics?.dialerEvents}),a=await t.upgrader.upgradeOutbound(s,{skipProtection:!0,skipEncryption:!0,muxerFactory:i,onProgress:t.onProgress});return this._closeOnShutdown(o,s),a}async _onProtocol({connection:e,stream:t}){let n=AbortSignal.timeout(this.init.inboundConnectionTimeout??kC),o=new Di(await Zc(this.init.rtcConfiguration)),i=new Wo(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:s}=await Bw({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new Li(this.components,{peerConnection:o,timeline:{open:new Date().getTime()},remoteAddr:s,metrics:this.metrics?.listenerEvents});await this.components.upgrader.upgradeInbound(a,{skipEncryption:!0,skipProtection:!0,muxerFactory:i}),this._closeOnShutdown(o,a)}catch(s){throw this.log.error("incoming signaling error",s),o.close(),t.abort(s),s}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function Nw(r){let e=r.toString().split(_C+"/");if(e.length!==2)throw new C("webrtc protocol was not present in multiaddr");if(!e[0].includes(TC))throw new C("p2p-circuit protocol was not present in multiaddr");let t=Q(e[0]),o=Q("/"+e[1]).getPeerId();if(o==null)throw new C("destination peer id was missing");let i=t.protos().pop();if(i===void 0)throw new C("invalid multiaddr");return i.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:Re(o)}}var R3=Object.values(Nn).map(r=>r.decoder).reduce((r,e)=>r.or(e));function Ow(r,e){let t=r.getConfiguration().certificates?.at(0);if(t?.getFingerprints==null){e.log.trace("fetching fingerprint from local SDP");let o=r.localDescription;return o==null?void 0:PC(o.sdp)}if(e.log.trace("fetching fingerprint from local certificate"),t.getFingerprints().length===0)return;let n=t.getFingerprints()[0].value;if(n==null)throw new el("","no fingerprint on local certificate");return n}var CC=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function PC(r){return r.match(CC)?.groups?.fingerprint}function RC(r){for(let e of r.protoNames())if(e.startsWith("ip"))return e.toUpperCase();return"IP6"}function lh(r){let t=r.stringTuples().filter(n=>n[0]===Fw).map(n=>n[1])[0];if(t===void 0||t==="")throw new C(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function L3(r){return Qe.decode(R3.decode(r))}function LC(r){let e=L3(lh(r)),t=D3(e.code),n=e.digest.reduce((i,s)=>i+s.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw new el(n,r.toString());return[`${t} ${o.join(":").toUpperCase()}`,n]}function D3(r){switch(r){case 17:return"SHA-1";case 18:return"SHA-256";case 19:return"SHA-512";default:throw new nh(r)}}function DC(r,e){let{host:t,port:n}=r.toOptions(),o=RC(r),[i]=LC(r);return`v=0
20
20
  o=- 0 0 IN ${o} ${t}
21
21
  s=-
22
22
  c=IN ${o} ${t}
@@ -29,26 +29,26 @@ a=ice-ufrag:${e}
29
29
  a=ice-pwd:${e}
30
30
  a=fingerprint:${i}
31
31
  a=sctp-port:5000
32
- a=max-message-size:${Hf}
32
+ a=max-message-size:${Jf}
33
33
  a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host\r
34
- `}function Dw(r,e){return{type:"answer",sdp:OC(r,e)}}function Lw(r,e){if(r.sdp===void 0)throw new C("Can't munge a missing SDP");return r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
34
+ `}function Mw(r,e){return{type:"answer",sdp:DC(r,e)}}function Uw(r,e){if(r.sdp===void 0)throw new C("Can't munge a missing SDP");return r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
35
35
  a=ice-ufrag:`+e+`
36
36
  `).replace(/\na=ice-pwd:[^\n]*\n/,`
37
37
  a=ice-pwd:`+e+`
38
- `),r}var Bw=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),Ow=r=>[...Array(r)].map(()=>Bw.at(Math.floor(Math.random()*Bw.length))).join("");var UC=1e4,Uae=ee("webrtc-direct").code,Nw=ee("certhash").code,eh=class{log;metrics;components;init;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webrtc-direct"),this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc-direct_dialer_events_total",{label:"event",help:"Total count of WebRTC-direct dial events by type"})})}[dn]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[_e]=["@libp2p/transport"];async dial(e,t){let n=await this._connect(e,t);return this.log("dialing address: %a",e),n}createListener(e){throw new zf("WebRTCTransport.createListener")}listenFilter(e){return e.filter(wc.exactMatch)}dialFilter(e){return this.listenFilter(e)}async _connect(e,t){let n=new AbortController,o=n.signal,i=e.getPeerId();if(i===null)throw new Wf("we need to have the remote's PeerId");let s=De(i),a=P3(Jf(e)),c=await Pi.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:R3(a.code)}),l=new Pi({...await Qc(this.init.rtcConfiguration),certificates:[c]});try{let d=new Promise((v,S)=>{let I=l.createDataChannel("",{negotiated:!0,id:0}),$=setTimeout(()=>{let N=`Data channel was never opened: state: ${I.readyState}`;this.log.error(N),this.metrics?.dialerEvents.increment({open_error:!0}),S(new Xc("data",N))},UC);I.onopen=N=>{clearTimeout($),v(I)},I.onerror=N=>{clearTimeout($);let B=`Error opening a data channel for handshaking: ${N.target?.toString()??"not specified"}`;this.log.error(B),this.metrics?.dialerEvents.increment({unknown_error:!0}),S(new Xc("data",B))}}),u="libp2p+webrtc+v1/"+Ow(32),f=await l.createOffer(),h=Lw(f,u);await l.setLocalDescription(h);let p=Dw(e,u);await l.setRemoteDescription(p);let m=await d,g=this.generateNoisePrologue(l,a.code,e),y=Bs({prologueBytes:g})(this.components),b=na({channel:m,direction:"inbound",logger:this.components.logger,...this.init.dataChannel??{}}),w={...b,sink:b.sink.bind(b),source:async function*(){for await(let v of b.source)for(let S of v)yield S}()},x=new Ci(this.components,{peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),T=Yc?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(T,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":x.close().catch(v=>{this.log.error("error closing connection",v)}).finally(()=>{n.abort()});break;default:break}},{signal:o}),this.metrics?.dialerEvents.increment({peer_connection:!0});let k=new Wo(this.components,{peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await y.secureInbound(w,{signal:o,remotePeer:s}),await t.upgrader.upgradeOutbound(x,{skipProtection:!0,skipEncryption:!0,muxerFactory:k})}catch(d){throw l.close(),d}}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw new C("no local certificate");let o=Rw(e,{log:this.log});if(o==null)throw new C("no local fingerprint found");let i=o.trim().toLowerCase().replaceAll(":",""),s=O(i,"hex"),a=Zt(t,s),c=C3.decode(Jf(n)),l=O("libp2p-webrtc-noise:");return Re([l,a.bytes,c])}};function Mw(r){return e=>new eh(e,r)}function Uw(r){return e=>new Zf(e,r)}var Fw=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",o),r.removeEventListener("error",i)}function o(){n(),e()}function i(s){n(),t(s.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",o),r.addEventListener("error",i)})};var $w=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await Fw(r)}catch(i){if(i.message==="socket closed")break;throw i}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(o)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((o,i)=>{r.addEventListener("close",s=>{if(s.wasClean||s.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:s});i(a)}}),setTimeout(()=>{r.close()})})});var qw=kt(Vw(),1);function Hw(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var Ww=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((i,s)=>{if(n){i();return}if(o!=null){s(o);return}let a=d=>{r.removeEventListener("open",c),r.removeEventListener("error",l),d()},c=()=>{a(i)},l=d=>{a(()=>{s(d.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let i=new qw.EventIterator(({push:s,stop:a,fail:c})=>{let l=u=>{let f=null;typeof u.data=="string"&&(f=O(u.data)),Hw(u.data)&&(f=new Uint8Array(u.data)),u.data instanceof Uint8Array&&(f=u.data),f!=null&&s(f)},d=u=>{c(u.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",d),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",d),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let s of i)yield Hw(s)?new Uint8Array(s):s}(),n=r.readyState===1,o;return r.addEventListener("open",()=>{n=!0,o=null}),r.addEventListener("close",()=>{n=!1,o=null}),r.addEventListener("error",i=>{n||(o=i.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var zw=(r,e)=>{e=e??{};let t=Ww(r),n=e.remoteAddress,o=e.remotePort;if(r.url!=null)try{let s=new URL(r.url);n=s.hostname,o=parseInt(s.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:$w(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(s=>{r.addEventListener("close",()=>{s()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:o,socket:r}};var Gw=WebSocket;var $C={"http:":"ws:","https:":"wss:"},Yw="ws:",Qw=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??Yw}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??Yw,o=e.host,i=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";r=`${n}//${o}${i}${r}`}let t=new URL(r);for(let[n,o]of Object.entries($C))t.protocol===n&&(t.protocol=o);return t};function Xw(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=Qw(r,t),o=new Gw(n.toString(),e.websocket);return zw(o,e)}function jw(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return $s.matches(t)||Si.matches(t)})}function Zw(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return Si.matches(t)})}function Jw(){throw new Error("WebSocket Servers can not be created in the browser!")}function eb(r,e,t){let n=t.logger.forComponent("libp2p:websockets:maconn"),o=t.metrics,i=t.metricPrefix??"",s={log:n,async sink(a){try{await r.sink(async function*(){for await(let c of a)c instanceof Uint8Array?yield c:yield c.subarray()}())}catch(c){c.type!=="aborted"&&n.error(c)}},source:r.source,remoteAddr:e,timeline:{open:Date.now()},async close(a={}){let c=Date.now();if(a.signal==null){let d=AbortSignal.timeout(500);a={...a,signal:d}}let l=()=>{let{host:d,port:u}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",d,u,Date.now()-c),this.abort(new mt("Socket close timeout"))};a.signal?.addEventListener("abort",l);try{await r.close()}catch(d){n.error("error closing WebSocket gracefully",d),this.abort(d)}finally{a.signal?.removeEventListener("abort",l),s.timeline.close=Date.now()}},abort(a){let{host:c,port:l}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",c,l,a),r.destroy(),s.timeline.close=Date.now(),o?.increment({[`${i}error`]:!0})}};return r.socket.addEventListener("close",()=>{o?.increment({[`${i}close`]:!0}),s.timeline.close==null&&(s.timeline.close=Date.now())},{once:!0}),s}var N3=class{log;init;logger;metrics;components;constructor(e,t){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_websockets_dialer_events_total",{label:"event",help:"Total count of WebSockets dialer events by type"})})}[dn]=!0;[Symbol.toStringTag]="@libp2p/websockets";[_e]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=eb(n,e,{logger:this.logger,metrics:this.metrics?.dialerEvents});this.log("new outbound connection %s",o.remoteAddr);let i=await t.upgrader.upgradeOutbound(o,t);return this.log("outbound connection %s upgraded",o.remoteAddr),i}async _connect(e,t){t?.signal?.throwIfAborted();let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=J(),i=Xw(Q1(e),this.init);i.socket.addEventListener("error",()=>{let s=new Ui(`Could not connect to ${e.toString()}`);this.log.error("connection error:",s),this.metrics?.dialerEvents.increment({error:!0}),o.reject(s)});try{t.onProgress?.(new H("websockets:open-connection")),await ke(Promise.race([i.connected(),o.promise]),t.signal)}catch(s){throw t.signal?.aborted===!0&&this.metrics?.dialerEvents.increment({abort:!0}),i.close().catch(a=>{this.log.error("error closing raw socket",a)}),s}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),i}createListener(e){return Jw({logger:this.logger,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):Zd||Jd?Zw(e):jw(e)}dialFilter(e){return this.listenFilter(e)}};function tb(r={}){return e=>new N3(e,r)}function B3(r){throw new Error("Not implemented")}var O3=class extends _n{writer;reader;constructor(e){super(e),this.writer=e.bidiStream.writable.getWriter(),this.reader=e.bidiStream.readable.getReader(),Promise.resolve().then(async()=>{for(;;){let t=await this.reader.read();if(t.done){e.log("remote closed write");return}t.value!=null&&this.sourcePush(new ce(t.value))}}).catch(t=>{e.log.error("error reading from stream",t),this.abort(t)}).finally(()=>{this.remoteCloseWrite()}),this.writer.closed.then(()=>{e.log("writer closed")}).catch(t=>{e.log("writer close promise rejected",t)}).finally(()=>{this.remoteCloseRead()})}sendNewStream(e){}async sendData(e,t){for await(let n of e)this.log("sendData waiting for writer to be ready"),await ke(this.writer.ready,t?.signal),this.writer.write(n).catch(o=>{this.log.error("error sending stream data",o)})}async sendReset(e){this.log("sendReset aborting writer"),await ke(this.writer.abort(),e?.signal),this.log("sendReset aborted writer")}async sendCloseWrite(e){this.log("sendCloseWrite closing writer"),await ke(this.writer.close(),e?.signal),this.log("sendCloseWrite closed writer")}async sendCloseRead(e){this.log("sendCloseRead cancelling reader"),await ke(this.reader.cancel(),e?.signal),this.log("sendCloseRead cancelled reader")}};async function M3(r,e,t,n,o,i){let s=i.forComponent(`libp2p:webtransport:stream:${t}:${e}`),a=new O3({bidiStream:r,id:e,direction:t,log:s,onEnd:()=>{let c=n.findIndex(l=>l===a);c!==-1&&n.splice(c,1),o?.(a)}});return a}function nh(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}function rb(r,e,t,n){let o=0,i=t.forComponent("libp2p:webtransport:muxer");return{protocol:"webtransport",createStreamMuxer:s=>{typeof s=="function"&&(s={onIncomingStream:s});let a=[];Promise.resolve().then(async()=>{for(;;){let{done:l,value:d}=await e.read();if(l)break;if(a.length>=n.maxInboundStreams)i(`too many inbound streams open - ${a.length}/${n.maxInboundStreams}, closing new incoming stream`),d.writable.close().catch(u=>{i.error(`failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)}),d.readable.cancel().catch(u=>{i.error(`failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)});else{let u=await M3(d,String(o++),"inbound",a,s?.onStreamEnd,t);a.push(u),s?.onIncomingStream?.(u)}}}).catch(l=>{i.error("could not create a new stream",l)});let c={protocol:"webtransport",streams:a,newStream:async l=>{i("new outgoing stream",l);let d=await r.createBidirectionalStream(),u=await M3(d,String(o++),s?.direction??"outbound",a,s?.onStreamEnd,t);return a.push(u),u},close:async()=>{i("closing webtransport muxer gracefully");try{r.close()}catch(l){c.abort(l)}},abort:l=>{i("closing webtransport muxer with err:",l);try{r.close()}catch(d){i.error("webtransport session threw error during close",d)}},...nh()};return c}}}function nb(r,e){return e.filter(n=>!!r.find(o=>te(n,o))).length===e.length}var qC=Object.values(Dn).map(r=>r.decoder).reduce((r,e)=>r.or(e));function WC(r){return Ye.decode(qC.decode(r))}function U3(r){if(!wi.matches(r))throw new hn("Invalid multiaddr, was not a WebTransport address");let e=r.stringTuples(),t=e.filter(([s,a])=>s===ee("certhash").code).map(([s,a])=>WC(a??"")),n=e.filter(([s,a])=>s===ee("p2p").code).map(([s,a])=>De(a??""))[0],o=r.toOptions(),i=o.host;return o.family===6&&i?.includes(":")&&(i=`[${i}]`),{url:`https://${i}:${o.port}`,certhashes:t,remotePeer:n}}var ob=globalThis.WebTransport;var F3=class{log;components;config;metrics;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webtransport"),this.components=e,this.config={...t,maxInboundStreams:t.maxInboundStreams??1e3,certificates:t.certificates??[]},e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webtransport_dialer_events_total",{label:"event",help:"Total count of WebTransport dialer events by type"})})}[Symbol.toStringTag]="@libp2p/webtransport";[dn]=!0;[_e]=["@libp2p/transport"];async dial(e,t){t?.signal?.throwIfAborted(),this.log("dialing %s",e),t=t??{};let{url:n,certhashes:o,remotePeer:i}=U3(e),s,a,c=()=>{},l=!1,d=!1,u=!1;try{this.metrics?.dialerEvents.increment({pending:!0});let f=new ob(`${n}/.well-known/libp2p-webtransport?type=noise`,{serverCertificateHashes:o.map(h=>({algorithm:"sha-256",value:h.digest}))});if(c=h=>{if(!l)try{this.metrics?.dialerEvents.increment({[h]:!0}),f.close()}catch(p){this.log.error("error closing wt session",p)}finally{a!=null&&(a.timeline.close=Date.now()),l=!0}},s=()=>{c(d?"noise_timeout":"ready_timeout")},t.signal?.addEventListener("abort",s,{once:!0}),this.log("wait for session to be ready"),t.onProgress?.(new H("webtransport:wait-for-session")),await Promise.race([f.closed,f.ready]),this.log("session became ready"),d=!0,this.metrics?.dialerEvents.increment({ready:!0}),f.closed.catch(h=>{this.log.error("error on remote wt session close",h)}).finally(()=>{c("remote_close")}),u=await ke(this.authenticateWebTransport({wt:f,remotePeer:i,certhashes:o,...t}),t.signal),!u)throw new cl("Failed to authenticate webtransport");return this.metrics?.dialerEvents.increment({open:!0}),a={close:async()=>{this.log("closing webtransport"),c("close")},abort:h=>{this.log("aborting webtransport due to passed err",h),c("abort")},remoteAddr:e,timeline:{open:Date.now()},log:this.components.logger.forComponent("libp2p:webtransport:maconn"),...nh()},await t.upgrader.upgradeOutbound(a,{skipEncryption:!0,muxerFactory:rb(f,f.incomingBidirectionalStreams.getReader(),this.components.logger,this.config),skipProtection:!0,onProgress:t.onProgress})}catch(f){throw this.log.error("caught wt session err",f),c(u?"upgrade_error":d?"noise_error":"ready_error"),f}finally{s!=null&&t.signal?.removeEventListener("abort",s)}}async authenticateWebTransport({wt:e,remotePeer:t,certhashes:n,onProgress:o,signal:i}){i?.throwIfAborted(),o?.(new H("webtransport:open-authentication-stream"));let s=await e.createBidirectionalStream(),a=s.writable.getWriter(),c=s.readable.getReader(),l={source:async function*(){for(;;){let f=await c.read();if(f.value!=null&&(yield f.value),f.done)break}}(),sink:async f=>{for await(let h of f){await ke(a.ready,i);let p=h instanceof Uint8Array?h:h.subarray();a.write(p).catch(m=>{this.log.error("could not write chunk during authentication of WebTransport stream",m)})}}},d=Bs()(this.components);o?.(new H("webtransport:secure-outbound-connection"));let{remoteExtensions:u}=await d.secureOutbound(l,{signal:i,remotePeer:t});if(o?.(new H("webtransport:close-authentication-stream")),a.close().catch(f=>{this.log.error(`Failed to close authentication stream writer: ${f.message}`)}),c.cancel().catch(f=>{this.log.error(`Failed to close authentication stream reader: ${f.message}`)}),!nb(u?.webtransportCerthashes??[],n.map(f=>f.bytes)))throw new C("Our certhashes are not a subset of the remote's reported certhashes");return!0}createListener(e){return B3(this.components,{...e,certificates:this.config.certificates,maxInboundStreams:this.config.maxInboundStreams})}listenFilter(){return[]}dialFilter(e){return globalThis.WebTransport==null?[]:e.filter(t=>{if(!wi.exactMatch(t))return!1;let{url:n,certhashes:o}=U3(t);return n!=null&&o.length>0})}};function ib(r={}){return e=>new F3(e,r)}var $3=kt(rd(),1);function sb(r,e){let t=e.map((n,o)=>({record:Sn(n),index:o}));return t.sort((n,o)=>{let i=n.record.sequence,s=o.record.sequence;if(i>s)return-1;if(i<s)return 1;if(n.record.validityType===sr.ValidityType.EOL&&o.record.validityType===sr.ValidityType.EOL){let a=$3.default.fromString(n.record.validity).toDate(),c=$3.default.fromString(o.record.validity).toDate();if(a.getTime()>c.getTime())return-1;if(a.getTime()<c.getTime())return 1}return 0}),t[0].index}var oh="2.1.9",ih="libp2p";var cb="5.0.1",lb="helia";var ub={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function sh(r={}){let e=`${lb}/${cb} ${ih}/${oh} UserAgent=${globalThis.navigator.userAgent}`;return{privateKey:r.privateKey,dns:r.dns,addresses:{listen:["/webrtc"]},transports:[Zm({discoverRelays:1}),Uw(),Mw(),ib(),tb()],connectionEncrypters:[Bs()],streamMuxers:[u9(),hw()],peerDiscovery:[_9(ub)],services:{autoNAT:p9(),dcutr:V9(),delegatedRouting:()=>m7("https://delegated-ipfs.dev"),dht:Uy({clientMode:!0,validators:{ipns:ld},selectors:{ipns:sb}}),identify:ry({agentVersion:e}),identifyPush:ny({agentVersion:e}),keychain:Of(r.keychain),ping:yw()}}}var zC=32,{code:GC}=ee("dnsaddr"),K3=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}},Ri=async function(e,t={}){let n=t.maxRecursiveDepth??zC;if(n===0)throw new K3("Max recursive depth reached");let[,o]=e.stringTuples().find(([l])=>l===GC)??[],s=await(t?.dns??s1()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[mr.TXT]}),a=e.getPeerId(),c=[];for(let l of s.Answer){let d=l.data.replace(/["']/g,"").trim().split("=")[1];if(d==null||a!=null&&!d.includes(a))continue;let u=Y(d);if(d.startsWith("/dnsaddr")){let f=await u.resolve({...t,maxRecursiveDepth:n-1});c.push(...f.map(h=>h.toString()))}else c.push(u.toString())}return c};var YC={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Ri}},transportManager:{faultTolerance:so.FATAL_ALL}};async function db(r){let e=Zs(YC,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new C("Private network is enforced, but no protector was provided");return e}var oa;(function(r){let e;(function(o){let i;o.codec=()=>(i==null&&(i=ie((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&s.value.byteLength>0&&(a.uint32(18),a.bytes(s.value)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:"",value:re(0)},d=a==null?s.len:s.pos+a;for(;s.pos<d;){let u=s.uint32();switch(u>>>3){case 1:{l.key=s.string();break}case 2:{l.value=s.bytes();break}default:{s.skipType(u&7);break}}}return l})),i),o.encode=s=>oe(s,o.codec()),o.decode=(s,a)=>ne(s,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let i;o.codec=()=>(i==null&&(i=ie((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&(a.uint32(18),ch.codec().encode(s.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:""},d=a==null?s.len:s.pos+a;for(;s.pos<d;){let u=s.uint32();switch(u>>>3){case 1:{l.key=s.string();break}case 2:{l.value=ch.codec().decode(s,s.uint32(),{limits:c.limits?.value});break}default:{s.skipType(u&7);break}}}return l})),i),o.encode=s=>oe(s,o.codec()),o.decode=(s,a)=>ne(s,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=ie((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.addresses!=null)for(let a of o.addresses)i.uint32(10),ah.codec().encode(a,i);if(o.protocols!=null)for(let a of o.protocols)i.uint32(18),i.string(a);if(o.publicKey!=null&&(i.uint32(34),i.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(i.uint32(42),i.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())i.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},i);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())i.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},i);s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={addresses:[],protocols:[],metadata:new Map,tags:new Map},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{if(s.limits?.addresses!=null&&a.addresses.length===s.limits.addresses)throw new Ue('Decode error - map field "addresses" had too many elements');a.addresses.push(ah.codec().decode(o,o.uint32(),{limits:s.limits?.addresses$}));break}case 2:{if(s.limits?.protocols!=null&&a.protocols.length===s.limits.protocols)throw new Ue('Decode error - map field "protocols" had too many elements');a.protocols.push(o.string());break}case 4:{a.publicKey=o.bytes();break}case 5:{a.peerRecordEnvelope=o.bytes();break}case 6:{if(s.limits?.metadata!=null&&a.metadata.size===s.limits.metadata)throw new ba('Decode error - map field "metadata" had too many elements');let d=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(d.key,d.value);break}case 7:{if(s.limits?.tags!=null&&a.tags.size===s.limits.tags)throw new ba('Decode error - map field "tags" had too many elements');let d=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:s.limits?.tags$value}});a.tags.set(d.key,d.value);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>oe(o,r.codec()),r.decode=(o,i)=>ne(o,r.codec(),i)})(oa||(oa={}));var ah;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.multiaddr!=null&&t.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(t.multiaddr)),t.isCertified!=null&&(n.uint32(16),n.bool(t.isCertified)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={multiaddr:re(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.multiaddr=t.bytes();break}case 2:{i.isCertified=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(ah||(ah={}));var ch;(function(r){let e;r.codec=()=>(e==null&&(e=ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.value!=null&&t.value!==0&&(n.uint32(8),n.uint32(t.value)),t.expiry!=null&&(n.uint32(16),n.uint64(t.expiry)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={value:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.value=t.uint32();break}case 2:{i.expiry=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>oe(t,r.codec()),r.decode=(t,n)=>ne(t,r.codec(),n)})(ch||(ch={}));function ia(r,e){let t=oa.decode(e);if(t.publicKey!=null&&r.publicKey==null){let i=rt(t.publicKey);r=xn(i)}let n=new Map,o=BigInt(Date.now());for(let[i,s]of t.tags.entries())s.expiry!=null&&s.expiry<o||n.set(i,s);return{...t,id:r,addresses:t.addresses.map(({multiaddr:i,isCertified:s})=>({multiaddr:Y(i),isCertified:s??!1})),metadata:t.metadata,peerRecordEnvelope:t.peerRecordEnvelope??void 0,tags:n}}var V3="/peers/";function sa(r){if(!sl(r)||r.type==null)throw new C("Invalid PeerId");let e=r.toCID().toString();return new Le(`${V3}${e}`)}async function fb(r,e,t){let n=new Map;for(let o of t){if(o==null)continue;if(o.multiaddr instanceof Uint8Array&&(o.multiaddr=Y(o.multiaddr)),!No(o.multiaddr))throw new C("Multiaddr was invalid");if(!await e(r,o.multiaddr))continue;let i=o.isCertified??!1,s=o.multiaddr.toString(),a=n.get(s);a!=null?o.isCertified=a.isCertified||i:n.set(s,{multiaddr:o.multiaddr,isCertified:i})}return[...n.values()].sort((o,i)=>o.multiaddr.toString().localeCompare(i.multiaddr.toString())).map(({isCertified:o,multiaddr:i})=>({isCertified:o,multiaddr:i.bytes}))}async function uh(r,e,t,n){if(e==null)throw new C("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new C("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer;if(o!=null&&!r.equals(o.id))throw new C("peer id did not match existing peer id");let i=o?.addresses??[],s=new Set(o?.protocols??[]),a=o?.metadata??new Map,c=o?.tags??new Map,l=o?.peerRecordEnvelope;if(t==="patch"){if((e.multiaddrs!=null||e.addresses!=null)&&(i=[],e.multiaddrs!=null&&i.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&i.push(...e.addresses)),e.protocols!=null&&(s=new Set(e.protocols)),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=lh(f,{validate:hb})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=lh(f,{validate:pb,map:mb})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&i.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&i.push(...e.addresses),e.protocols!=null&&(s=new Set([...s,...e.protocols])),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[h,p]of f)p==null?a.delete(h):a.set(h,p);a=lh([...a.entries()],{validate:hb})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[p,m]of f)m==null?h.delete(p):h.set(p,m);c=lh([...h.entries()],{validate:pb,map:mb})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d;o?.id.publicKey!=null?d=Lt(o.id.publicKey):e.publicKey!=null?d=Lt(e.publicKey):r.publicKey!=null&&(d=Lt(r.publicKey));let u={addresses:await fb(r,n.addressFilter??(async()=>!0),i),protocols:[...s.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:d,peerRecordEnvelope:l};return r.type!=="RSA"&&delete u.publicKey,u}function lh(r,e){let t=new Map;for(let[n,o]of r)o!=null&&e.validate(n,o);for(let[n,o]of r.sort(([i],[s])=>i.localeCompare(s)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function hb(r,e){if(typeof r!="string")throw new C("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new C("Metadata value must be a Uint8Array")}function pb(r,e){if(typeof r!="string")throw new C("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new C("Tag value must be an integer");if(e.value<0||e.value>100)throw new C("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new C("Tag ttl must be an integer");if(e.ttl<0)throw new C("Tag ttl must be between greater than 0")}}function mb(r,e){let t;return e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl))),{value:e.value??0,expiry:t}}function dh(r,e,t){let n=r.toString().split("/")[2],o=Z.parse(n,ut),i=En(o),s=t.get(i);if(s!=null)return s;let a=ia(i,e);return t.set(i,a),a}function QC(r,e){return r==null?{}:{prefix:V3,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(dh(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(dh(n.key,n.value,e),dh(o.key,o.value,e)))}}var fh=class{peerId;datastore;lock;addressFilter;constructor(e,t={}){this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=dc({name:"peer-store",singleProcess:!0})}async has(e){return this.datastore.has(sa(e))}async delete(e){if(this.peerId.equals(e))throw new C("Cannot delete self peer");await this.datastore.delete(sa(e))}async load(e){let t=await this.datastore.get(sa(e));return ia(e,t)}async save(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),i=await uh(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,i,n,o)}async patch(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),i=await uh(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,n,o)}async merge(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),i=await uh(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,n,o)}async*all(e){let t=new st;for await(let{key:n,value:o}of this.datastore.query(QC(e??{},t))){let i=dh(n,o,t);i.id.equals(this.peerId)||(yield i)}}async#e(e){try{let t=await this.datastore.get(sa(e)),n=ia(e,t);return{existingBuf:t,existingPeer:n}}catch(t){if(t.name!=="NotFoundError")throw t}return{}}async#t(e,t,n,o){let i=oa.encode(t);return n!=null&&te(i,n)?{peer:ia(e,i),previous:o,updated:!1}:(await this.datastore.put(sa(e),i),{peer:ia(e,i),previous:o,updated:!0})}};var H3=class{store;events;peerId;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.events=e.events,this.peerId=e.peerId,this.store=new fh(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){this.log.trace("forEach await read lock");let n=await this.store.lock.readLock();this.log.trace("forEach got read lock");try{for await(let o of this.store.all(t))e(o)}finally{this.log.trace("forEach release read lock"),n()}}async all(e){this.log.trace("all await read lock");let t=await this.store.lock.readLock();this.log.trace("all got read lock");try{return await Ic(this.store.all(e))}finally{this.log.trace("all release read lock"),t()}}async delete(e){this.log.trace("delete await write lock");let t=await this.store.lock.writeLock();this.log.trace("delete got write lock");try{await this.store.delete(e)}finally{this.log.trace("delete release write lock"),t()}}async has(e){this.log.trace("has await read lock");let t=await this.store.lock.readLock();this.log.trace("has got read lock");try{return await this.store.has(e)}finally{this.log.trace("has release read lock"),t()}}async get(e){this.log.trace("get await read lock");let t=await this.store.lock.readLock();this.log.trace("get got read lock");try{return await this.store.load(e)}finally{this.log.trace("get release read lock"),t()}}async save(e,t){this.log.trace("save await write lock");let n=await this.store.lock.writeLock();this.log.trace("save got write lock");try{let o=await this.store.save(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("save release write lock"),n()}}async patch(e,t){this.log.trace("patch await write lock");let n=await this.store.lock.writeLock();this.log.trace("patch got write lock");try{let o=await this.store.patch(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("patch release write lock"),n()}}async merge(e,t){this.log.trace("merge await write lock");let n=await this.store.lock.writeLock();this.log.trace("merge got write lock");try{let o=await this.store.merge(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("merge release write lock"),n()}}async consumePeerRecord(e,t){let n=await vr.openAndCertify(e,Wt.DOMAIN),o=En(n.publicKey.toCID());if(t?.equals(o)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,o),!1;let i=Wt.createFromProtobuf(n.payload),s;try{s=await this.get(o)}catch(a){if(a.name!=="NotFoundError")throw a}if(s?.peerRecordEnvelope!=null){let a=await vr.createFromProtobuf(s.peerRecordEnvelope),c=Wt.createFromProtobuf(a.payload);if(c.seqNumber>=i.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",c.seqNumber,i.seqNumber),!1}return await this.patch(i.peerId,{peerRecordEnvelope:e,addresses:i.multiaddrs.map(a=>({isCertified:!0,multiaddr:a}))}),!0}#e(e,t){t.updated&&(this.peerId.equals(e)?this.events.safeDispatchEvent("self:peer:update",{detail:t}):this.events.safeDispatchEvent("peer:update",{detail:t}))}};function gb(r,e={}){return new H3(r,e)}function yb(r,e){let t;return function(){let n=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(n,e)}}var XC=r=>r;function q3(r,e){let t=r.getPeerId();return t!=null&&De(t).equals(e)&&(r=r.decapsulate(Y(`/p2p/${e.toString()}`))),r}var hh=class{log;components;listen;announce;observed;announceFilter;constructor(e,t={}){let{listen:n=[],announce:o=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(i=>i.toString()),this.announce=new Set(o.map(i=>i.toString())),this.observed=new Map,this.announceFilter=t.announceFilter??XC,this._updatePeerStoreAddresses=yb(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}[Symbol.toStringTag]="@libp2p/address-manager";_updatePeerStoreAddresses(){let e=this.getAnnounceAddrs().concat(this.components.transportManager.getAddrs()).concat([...this.observed.entries()].filter(([t,n])=>n.confident).map(([t])=>Y(t))).map(t=>t.getPeerId()===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>Y(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>Y(e))}getObservedAddrs(){return Array.from(this.observed).map(([e])=>Y(e))}addObservedAddr(e){e=q3(e,this.components.peerId);let t=e.toString();this.observed.has(t)||this.observed.set(t,{confident:!1})}confirmObservedAddr(e){e=q3(e,this.components.peerId);let t=e.toString(),o=(this.observed.get(t)??{confident:!1}).confident;this.observed.set(t,{confident:!0}),o||this._updatePeerStoreAddresses()}removeObservedAddr(e){e=q3(e,this.components.peerId);let t=e.toString();this.observed.delete(t)}getAddresses(){let e=this.getAnnounceAddrs().map(n=>n.toString());e.length===0&&(e=this.components.transportManager.getAddrs().map(n=>n.toString())),e=e.concat(Array.from(this.observed).filter(([n,o])=>o.confident).map(([n])=>n));let t=new Set(e);return this.announceFilter(Array.from(t).map(n=>Y(n))).map(n=>n.protos().pop()?.path===!0||n.getPeerId()===this.components.peerId.toString()?n:n.encapsulate(`/p2p/${this.components.peerId.toString()}`))}};var wb;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(wb||(wb={}));var ph=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},mh=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},Jc=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},el=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},gh=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},yh=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},wh=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},tl=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},Di=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},bh=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},xh=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},Li=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Ni=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Eh=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}};var W3=class{components={};_started=!1;constructor(e={}){this.components={};for(let[t,n]of Object.entries(e))this.components[t]=n;this.components.logger==null&&(this.components.logger=To())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>ml(t)).map(async t=>{await t[e]?.()}))}async beforeStart(){await this._invokeStartableMethod("beforeStart")}async start(){await this._invokeStartableMethod("start"),this._started=!0}async afterStart(){await this._invokeStartableMethod("afterStart")}async beforeStop(){await this._invokeStartableMethod("beforeStop")}async stop(){await this._invokeStartableMethod("stop"),this._started=!1}async afterStop(){await this._invokeStartableMethod("afterStop")}},ZC=["metrics","connectionProtector","dns"],JC=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function bb(r={}){let e=new W3(r);return new Proxy(e,{get(n,o,i){if(typeof o=="string"&&!JC.includes(o)){let s=e.components[o];if(s==null&&!ZC.includes(o))throw new ph(`${o} not set`);return s}return Reflect.get(n,o,i)},set(n,o,i){return typeof o=="string"?e.components[o]=i:Reflect.set(n,o,i),!0}})}function xb(r){let e={};for(let t of Object.values(r.components))for(let n of eP(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of tP(t))if(e[n]!==!0)throw new mh(`Service "${rP(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function eP(r){return Array.isArray(r?.[_e])?r[_e]:[]}function tP(r){return Array.isArray(r?.[Vr])?r[Vr]:[]}function rP(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function Eb(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{let t=e.stringTuples();return t[0][0]===4||t[0][0]===41?!!Ot(`${t[0][1]}`):!1},denyInboundConnection:async()=>!1,denyOutboundConnection:async()=>!1,denyInboundEncryptedConnection:async()=>!1,denyOutboundEncryptedConnection:async()=>!1,denyInboundUpgradedConnection:async()=>!1,denyOutboundUpgradedConnection:async()=>!1,filterMultiaddrForPeer:async()=>!0,...r}}function vh(r){if(sl(r))return{peerId:r,multiaddrs:[]};Array.isArray(r)||(r=[r]);let e;if(r.length>0){let t=r[0].getPeerId();e=t==null?void 0:De(t),r.forEach(n=>{if(!No(n))throw new hn("Invalid multiaddr");let o=n.getPeerId();if(o==null){if(e!=null)throw new C("Multiaddrs must all have the same peer id or have no peer id")}else{let i=De(o);if(e?.equals(i)!==!0)throw new C("Multiaddrs must all have the same peer id or have no peer id")}})}return{peerId:e,multiaddrs:r}}var nP=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function vb(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??nP;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}var Sb="last-dial-failure",Ab="last-dial-success";var Sh=100,Ah=50;var _b={maxConnections:Sh,allow:[]},_h=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??_b.maxConnections,this.allow=t.allow??_b.allow,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),this.maybePruneConnections=this.maybePruneConnections.bind(this)}start(){this.events.addEventListener("connection:open",this.maybePruneConnections)}stop(){this.events.removeEventListener("connection:open",this.maybePruneConnections)}maybePruneConnections(){this._maybePruneConnections().catch(e=>{this.log.error("error while pruning connections %e",e)})}async _maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length;if(this.log("checking max connections limit %d/%d",t,this.maxConnections),t<=this.maxConnections)return;let n=new st;for(let a of e){let c=a.remotePeer;if(!n.has(c)){n.set(c,0);try{let l=await this.peerStore.get(c);n.set(c,[...l.tags.values()].reduce((d,u)=>d+u.value,0))}catch(l){l.name!=="NotFoundError"&&this.log.error("error loading peer tags",l)}}}let o=this.sortConnections(e,n),i=Math.max(t-this.maxConnections,0),s=[];for(let a of o)if(this.log("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(l=>a.remoteAddr.toString().startsWith(l.toString()))||s.push(a),s.length===i)break;await Promise.all(s.map(async a=>{await vb(a,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:s})}sortConnections(e,t){return e.sort((n,o)=>{let i=n.timeline.open,s=o.timeline.open;return i<s?1:i>s?-1:0}).sort((n,o)=>n.direction==="outbound"&&o.direction==="inbound"?1:n.direction==="inbound"&&o.direction==="outbound"?-1:0).sort((n,o)=>n.streams.length>o.streams.length?1:n.streams.length<o.streams.length?-1:0).sort((n,o)=>{let i=t.get(n.remotePeer)??0,s=t.get(o.remotePeer)??0;return i>s?1:i<s?-1:0})}};var Ih=class extends fr{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};function z3(r){try{let{address:e}=r.nodeAddress();return!!Ot(e)}catch{return!0}}function oP(r,e){let t=Bp.exactMatch(r.multiaddr),n=Bp.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=Up.exactMatch(r.multiaddr),i=Up.exactMatch(e.multiaddr);if(o&&!i)return-1;if(!o&&i)return 1;let s=Mp.exactMatch(r.multiaddr),a=Mp.exactMatch(e.multiaddr);if(s&&!a)return-1;if(!s&&a)return 1;let c=bc.exactMatch(r.multiaddr),l=bc.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let d=wc.exactMatch(r.multiaddr),u=wc.exactMatch(e.multiaddr);if(d&&!u)return-1;if(!d&&u)return 1;let f=wi.exactMatch(r.multiaddr),h=wi.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function iP(r,e){let t=z3(r.multiaddr),n=z3(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function sP(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function aP(r,e){let t=Nr.exactMatch(r.multiaddr),n=Nr.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Ib(r){return r.sort(oP).sort(sP).sort(aP).sort(iP)}async function Tb(r,e){let t=!1;for(let o of Ts.keys())if(t=r.protoNames().includes(o),t)break;if(!t)return[r];let n=await r.resolve(e);return e.log("resolved %s to",r,n.map(o=>o.toString())),n}var Th={maxParallelDials:Ah,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:5e3,resolvers:{dnsaddr:Ri}},kh=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??Th.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??Th.maxDialQueueLength,this.dialTimeout=t.dialTimeout??Th.dialTimeout,this.connections=t.connections??new st,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,K(1/0,this.shutDownController.signal);for(let[n,o]of Object.entries(t.resolvers??{}))Ts.set(n,o);this.queue=new Ih({concurrency:t.maxParallelDials??Th.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{n.detail.name!==mt.name&&this.log.error("error in dial queue - %e",n.detail)})}start(){this.shutDownController=new AbortController,K(1/0,this.shutDownController.signal)}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=vh(e),i=Array.from(this.connections.values()).flat().find(a=>t.force===!0?!1:a.remotePeer.equals(n)?!0:o.find(c=>c.equals(a.remoteAddr)));if(i?.status==="open")return this.log("already connected to %a",i.remoteAddr),t.onProgress?.(new H("dial-queue:already-connected")),i;let s=this.queue.queue.find(a=>{if(n?.equals(a.options.peerId)===!0)return!0;let c=a.options.multiaddrs;if(c==null)return!1;for(let l of o)if(c.has(l.toString()))return!0;return!1});if(s!=null){this.log("joining existing dial target for %p",n);for(let a of o)s.options.multiaddrs.add(a.toString());return t.onProgress?.(new H("dial-queue:already-in-dial-queue")),s.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new Pn("Dial queue is full");return this.log("creating dial target for %p",n,o.map(a=>a.toString())),t.onProgress?.(new H("dial-queue:add-to-dial-queue")),this.queue.add(async a=>{a?.onProgress?.(new H("dial-queue:start-dial"));let c=this.createDialAbortController(a?.signal),l;try{l=await this.calculateMultiaddrs(n,a?.multiaddrs,{...a,signal:c}),a?.onProgress?.(new H("dial-queue:calculated-addresses",l)),l.map(({multiaddr:d})=>d.toString()).forEach(d=>{a?.multiaddrs.add(d)})}catch(d){throw c.clear(),d}try{let d=0,u=[];for(let f of l){if(d===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",d,n),new Pn("Peer had more than maxPeerAddrsToDial");d++;try{let h=await this.components.transportManager.dial(f.multiaddr,{...a,signal:c});this.log("dial to %a succeeded",f.multiaddr);try{await this.components.peerStore.merge(h.remotePeer,{multiaddrs:[h.remoteAddr],metadata:{[Ab]:O(Date.now().toString())}})}catch(p){this.log.error("could not update last dial failure key for %p",n,p)}return h}catch(h){if(this.log.error("dial failed to %a",f.multiaddr,h),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[Sb]:O(Date.now().toString())}})}catch(p){this.log.error("could not update last dial failure key for %p",n,p)}if(c.aborted)throw new Fr(h.message);u.push(h)}}throw u.length===1?u[0]:new AggregateError(u,"All multiaddr dials failed")}finally{c.clear()}},{peerId:n,priority:t.priority??X3,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal,onProgress:t.onProgress})}createDialAbortController(e){let t=he([AbortSignal.timeout(this.dialTimeout),this.shutDownController.signal,e]);return K(1/0,t),t}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(u=>({multiaddr:Y(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Pn("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new tl("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let u=await this.components.peerStore.get(e);o.push(...u.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(u){if(u.name!=="NotFoundError")throw u}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let u=await this.components.peerRouting.findPeer(e);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:f})=>f.toString())),o.push(...u.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(u){u.name!=="NoPeerRoutersError"&&this.log.error("looking up multiaddrs for %p in the peer routing failed",e,u)}}}let i=(await Promise.all(o.map(async u=>{let f=await Tb(u.multiaddr,{dns:this.components.dns,...n,log:this.log});return f.length===1&&f[0].equals(u.multiaddr)?u:f.map(h=>({multiaddr:h,isCertified:!1}))}))).flat();if(e!=null){let u=`/p2p/${e.toString()}`;i=i.map(f=>f.multiaddr.protos().pop()?.path===!0?f:f.multiaddr.getPeerId()==null?{multiaddr:f.multiaddr.encapsulate(u),isCertified:f.isCertified}:f)}let s=i.filter(u=>{if(this.components.transportManager.dialTransportForMultiaddr(u.multiaddr)==null)return!1;let f=u.multiaddr.getPeerId();return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let u of s){let f=u.multiaddr.toString(),h=a.get(f);if(h!=null){h.isCertified=h.isCertified||u.isCertified||!1;continue}a.set(f,u)}let c=[...a.values()];if(c.length===0)throw new Di("The dial request has no valid addresses");let l=[];for(let u of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(u.multiaddr)||l.push(u);let d=this.addressSorter==null?Ib(l):l.sort(this.addressSorter);if(d.length===0)throw new tl("The connection gater denied all addresses in the dial request");return this.log.trace("addresses for %p before filtering",e??"unknown peer",i.map(({multiaddr:u})=>u.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",d.map(({multiaddr:u})=>u.toString())),d}async isDialable(e,t={}){Array.isArray(e)||(e=[e]);try{let n=await this.calculateMultiaddrs(void 0,new Set(e.map(o=>o.toString())),t);return t.runOnLimitedConnection===!1?n.find(o=>!Nr.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var Nb=kt(Db(),1);var lP=Object.prototype.toString,uP=r=>lP.call(r)==="[object Error]",dP=new Set(["network error","Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Load failed","Network request failed","fetch failed","terminated"]);function j3(r){return r&&uP(r)&&r.name==="TypeError"&&typeof r.message=="string"?r.message==="Load failed"?r.stack===void 0:dP.has(r.message):!1}var Z3=class extends Error{constructor(e){super(),e instanceof Error?(this.originalError=e,{message:e}=e):(this.originalError=new Error(e),this.originalError.stack=this.stack),this.name="AbortError",this.message=e}},Lb=(r,e,t)=>{let n=t.retries-(e-1);return r.attemptNumber=e,r.retriesLeft=n,r};async function J3(r,e){return new Promise((t,n)=>{e={onFailedAttempt(){},retries:10,shouldRetry:()=>!0,...e};let o=Nb.default.operation(e),i=()=>{o.stop(),n(e.signal?.reason)};e.signal&&!e.signal.aborted&&e.signal.addEventListener("abort",i,{once:!0});let s=()=>{e.signal?.removeEventListener("abort",i),o.stop()};o.attempt(async a=>{try{let c=await r(a);s(),t(c)}catch(c){try{if(!(c instanceof Error))throw new TypeError(`Non-error was thrown: "${c}". You should only throw errors.`);if(c instanceof Z3)throw c.originalError;if(c instanceof TypeError&&!j3(c))throw c;if(Lb(c,a,e),await e.shouldRetry(c)||(o.stop(),n(c)),await e.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){Lb(l,a,e),s(),n(l)}}})})}var Ch=class{log;queue;started;peerStore;retries;retryInterval;backoffFactor;connectionManager;events;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:reconnect-queue"),this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.queue=new Ut({concurrency:t.maxParallelReconnects??5,metricName:"libp2p_reconnect_queue",metrics:e.metrics}),this.started=!1,this.retries=t.retries??5,this.backoffFactor=t.backoffFactor,this.retryInterval=t.retryInterval,this.events=e.events,e.events.addEventListener("peer:disconnect",n=>{this.maybeReconnect(n.detail).catch(o=>{this.log.error("failed to maybe reconnect to %p - %e",n.detail,o)})})}async maybeReconnect(e){if(!this.started)return;let t=await this.peerStore.get(e);Bb(t)&&(this.queue.has(e)||this.queue.add(async n=>{await J3(async o=>{if(this.started)try{await this.connectionManager.openConnection(e,{signal:n?.signal})}catch(i){throw this.log("reconnecting to %p attempt %d of %d failed - %e",e,o,this.retries,i),i}},{signal:n?.signal,retries:this.retries,factor:this.backoffFactor,minTimeout:this.retryInterval})},{peerId:e}).catch(async n=>{this.log.error("failed to reconnect to %p - %e",e,n);let o={};[...t.tags.keys()].forEach(i=>{i.startsWith(io)&&(o[i]=void 0)}),await this.peerStore.merge(e,{tags:o}),this.events.safeDispatchEvent("peer:reconnect-failure",{detail:e})}).catch(async n=>{this.log.error("failed to remove keep-alive tag from %p - %e",e,n)}))}start(){this.started=!0}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>Bb(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)})}stop(){this.started=!1,this.queue.abort()}};function Bb(r){for(let e of r.tags.keys())if(e.startsWith(io))return!0;return!1}var X3=50,e4={maxConnections:Sh,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},Ph=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;outboundPendingConnections;maxConnections;dialQueue;reconnectQueue;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;peerId;constructor(e,t={}){if(this.maxConnections=t.maxConnections??e4.maxConnections,this.maxConnections<1)throw new C("Connection Manager maxConnections must be greater than 0");this.connections=new st,this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.metrics=e.metrics,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager"),this.onConnect=this.onConnect.bind(this),this.onDisconnect=this.onDisconnect.bind(this),this.allow=(t.allow??[]).map(n=>Y(n)),this.deny=(t.deny??[]).map(n=>Y(n)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??e4.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new ra({points:t.inboundConnectionThreshold??e4.inboundConnectionThreshold,duration:1}),this.connectionPruner=new _h({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:this.allow}),this.dialQueue=new kh(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??Ah,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??5e3,resolvers:t.resolvers??{dnsaddr:Ri},connections:this.connections}),this.reconnectQueue=new Ch({events:e.events,peerStore:e.peerStore,logger:e.logger,connectionManager:this},{retries:t.reconnectRetries,retryInterval:t.reconnectRetryInterval,backoffFactor:t.reconnectBackoffFactor,maxParallelReconnects:t.maxParallelReconnects})}[Symbol.toStringTag]="@libp2p/connection-manager";async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,"inbound pending":this.incomingPendingConnections,outbound:0,"outbound pending":this.outboundPendingConnections};for(let t of this.connections.values())for(let n of t)e[n.direction]++;return e}}),this.metrics?.registerMetricGroup("libp2p_protocol_streams_total",{label:"protocol",calculate:()=>{let e={};for(let t of this.connections.values())for(let n of t)for(let o of n.streams){let i=`${o.direction} ${o.protocol??"unnegotiated"}`;e[i]=(e[i]??0)+1}return e}}),this.metrics?.registerMetricGroup("libp2p_connection_manager_protocol_streams_per_connection_90th_percentile",{label:"protocol",calculate:()=>{let e={};for(let n of this.connections.values())for(let o of n){let i={};for(let s of o.streams){let a=`${s.direction} ${s.protocol??"unnegotiated"}`;i[a]=(i[a]??0)+1}for(let[s,a]of Object.entries(i))e[s]=e[s]??[],e[s].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((s,a)=>s-a);let i=Math.floor(o.length*.9);t[n]=o[i]}return t}}),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),await bt(this.dialQueue,this.reconnectQueue,this.connectionPruner),this.started=!0,this.log("started")}async stop(){this.events.removeEventListener("connection:open",this.onConnect),this.events.removeEventListener("connection:close",this.onDisconnect),await Ct(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push((async()=>{try{await n.close()}catch(o){this.log.error(o)}})());this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}onConnect(e){this._onConnect(e).catch(t=>{this.log.error(t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}if(t.status!=="open")return;let n=t.remotePeer,o=!this.connections.has(n),i=this.connections.get(n)??[];i.push(t),this.connections.set(n,i),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),o&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e,n=t.remotePeer,i=(this.connections.get(n)??[]).filter(s=>s.id!==t.id);this.connections.set(n,i),i.length===0&&(this.log("onDisconnect remove all connections for peer %p",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:t.remotePeer}))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let t=[];for(let n of this.connections.values())t=t.concat(n);return t}getConnectionsMap(){return this.connections}async openConnection(e,t={}){if(!this.started)throw new $r("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n}=vh(e);if(this.peerId.equals(n))throw new Fi("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>c.limits==null);if(a!=null)return this.log("had an existing non-limited connection to %p",n),t.onProgress?.(new H("dial-queue:already-connected")),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??X3});if(o.status!=="open")throw new Mi("Remote closed connection during opening");let i=this.connections.get(o.remotePeer);i==null&&(i=[],this.connections.set(o.remotePeer,i));let s=!1;for(let a of i)if(a.id===o.id&&(s=!0),t.force!==!0&&a.id!==o.id&&a.remoteAddr.equals(o.remoteAddr))return o.abort(new hn("Duplicate multiaddr connection")),a;return s||i.push(o),o}finally{this.outboundPendingConnections--}}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await o.close(t)}catch(i){o.abort(i)}}))}async acceptIncomingConnection(e){if(this.deny.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let o=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(o,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>Y(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var pP=1e4,mP="1.0.0",gP="ping",yP="ipfs",Ob=32,wP=!0,Rh=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??yP}/${gP}/${mP}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??pP,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??wP,this.timeout=new oo({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[_e]=["@libp2p/connection-monitor"];start(){this.abortController=new AbortController,K(1/0,this.abortController.signal),this.heartbeatInterval=setInterval(()=>{this.components.connectionManager.getConnections().forEach(e=>{Promise.resolve().then(async()=>{let t=Date.now();try{let n=this.timeout.getTimeoutSignal({signal:this.abortController?.signal}),o=await e.newStream(this.protocol,{signal:n,runOnLimitedConnection:!0}),i=Ei(o);t=Date.now(),await Promise.all([i.write(pt(Ob),{signal:n}),i.read(Ob,{signal:n})]),e.rtt=Date.now()-t,await i.unwrap().close({signal:n})}catch(n){if(n.name!=="UnsupportedProtocolError")throw n;e.rtt=(Date.now()-t)/2}}).catch(t=>{this.log.error("error during heartbeat",t),this.abortConnectionOnPingFailure?(this.log.error("aborting connection due to ping failure"),e.abort(t)):this.log("connection ping failed, but not aborting due to abortConnectionOnPingFailure flag")})})},this.pingIntervalMs)}stop(){this.abortController?.abort(),this.heartbeatInterval!=null&&clearInterval(this.heartbeatInterval)}};var Dh=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e}[Symbol.toStringTag]="@libp2p/content-routing";isStarted(){return this.started}async start(){this.started=!0}async stop(){this.started=!1}async*findProviders(e,t={}){if(this.routers.length===0)throw new Jc("No content routers available");let n=this,o=new nr;for await(let i of $t(...n.routers.map(s=>s.findProviders(e,t))))i!=null&&(i.multiaddrs.length>0&&await this.components.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id)&&(o.add(i.id),yield i))}async provide(e,t={}){if(this.routers.length===0)throw new Jc("No content routers available");await Promise.all(this.routers.map(async n=>{await n.provide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new $r;await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new $r;return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var Lh=class{log;peerId;peerStore;routers;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-routing"),this.peerId=e.peerId,this.peerStore=e.peerStore,this.routers=t.routers??[]}[Symbol.toStringTag]="@libp2p/peer-routing";async findPeer(e,t){if(this.routers.length===0)throw new el("No peer routers available");if(e.toString()===this.peerId.toString())throw new gh("Should not try to find self");let n=this,o=$t(...this.routers.map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),i;throw new Me}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new el("No peer routers available");let n=this,o=Za(1024);for await(let i of Er(async function*(){let s=$t(...n.routers.map(a=>a.getClosestPeers(e,t)));for await(let a of s)yield async()=>{if(a.multiaddrs.length===0)try{a=await n.findPeer(a.id,{...t,useCache:!1})}catch(c){n.log.error("could not find peer multiaddrs",c);return}return a}}()))i!=null&&(i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id.toMultihash().bytes)&&(o.add(i.id.toMultihash().bytes),yield i))}};var Nh=class extends Ee{peerRouting;log;walking;walkers;shutdownController;walkController;needNext;constructor(e){super(),this.log=e.logger.forComponent("libp2p:random-walk"),this.peerRouting=e.peerRouting,this.walkers=0,this.walking=!1,this.shutdownController=new AbortController,K(1/0,this.shutdownController.signal)}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,K(1/0,this.shutdownController.signal)}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=he([this.shutdownController.signal,e?.signal]);K(1/0,t);try{for(;;)this.needNext?.resolve(),this.needNext=J(),yield(await dr(this,"walk:peer",t,{errorEvent:"walk:error"})).detail}finally{t.clear(),this.walkers--,this.walkers===0&&(this.walkController?.abort(),this.walkController=void 0)}}startWalk(){this.walking=!0,this.walkController=new AbortController,K(1/0,this.walkController.signal);let e=he([this.walkController.signal,this.shutdownController.signal]);K(1/0,e);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=pt(32),i=Date.now();for await(let s of this.peerRouting.getClosestPeers(o,{signal:e}))e.aborted&&this.log("aborting walk"),e.throwIfAborted(),this.log("found peer %p after %dms for %d walkers",s.id,Date.now()-i,this.walkers),n++,this.safeDispatchEvent("walk:peer",{detail:s}),this.walkers===1&&this.needNext!=null&&(this.log("wait for need next"),await ke(this.needNext.promise,e)),i=Date.now();this.log("walk iteration for %b and %d walkers finished, found %d peers",o,this.walkers,n)}catch(o){this.log.error("randomwalk errored",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("randomwalk errored",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var t4=32,r4=64,Bh=class{log;topologies;handlers;components;constructor(e){this.log=e.logger.forComponent("libp2p:registrar"),this.topologies=new Map,this.handlers=new Map,this.components=e,this._onDisconnect=this._onDisconnect.bind(this),this._onPeerUpdate=this._onPeerUpdate.bind(this),this._onPeerIdentify=this._onPeerIdentify.bind(this),this.components.events.addEventListener("peer:disconnect",this._onDisconnect),this.components.events.addEventListener("peer:update",this._onPeerUpdate),this.components.events.addEventListener("peer:identify",this._onPeerIdentify)}[Symbol.toStringTag]="@libp2p/registrar";getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new yh(`No handler registered for protocol ${e}`);return t}getTopologies(e){let t=this.topologies.get(e);return t==null?[]:[...t.values()]}async handle(e,t,n){if(this.handlers.has(e))throw new wh(`Handler already registered for protocol ${e}`);let o=Zs.bind({ignoreUndefined:!0})({maxInboundStreams:t4,maxOutboundStreams:r4},n);this.handlers.set(e,{handler:t,options:o}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]})}async unhandle(e){(Array.isArray(e)?e:[e]).forEach(n=>{this.handlers.delete(n)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()})}async register(e,t){if(t==null)throw new C("invalid topology");let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,o=this.topologies.get(e);return o==null&&(o=new Map,this.topologies.set(e,o)),o.set(n,t),n}unregister(e){for(let[t,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(t))}_onDisconnect(e){let t=e.detail;this.components.peerStore.get(t).then(n=>{for(let o of n.protocols){let i=this.topologies.get(o);if(i!=null)for(let s of i.values())s.filter?.has(t)!==!1&&(s.filter?.remove(t),s.onDisconnect?.(t))}}).catch(n=>{n.name!=="NotFoundError"&&this.log.error("could not inform topologies of disconnecting peer %p",t,n)})}_onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(i=>!t.protocols.includes(i));for(let i of o){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())a.filter?.has(t.id)!==!1&&(a.filter?.remove(t.id),a.onDisconnect?.(t.id))}}_onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;for(let i of t){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),a.onConnect?.(o,n))}}};var Oh=class{log;components;transports;listeners;faultTolerance;started;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:transports"),this.components=e,this.started=!1,this.transports=new Map,this.listeners=O1({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??so.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new C("Transport must have a valid tag");if(this.transports.has(t))throw new C(`There is already a transport with the tag ${t}`);this.log("adding transport %s",t),this.transports.set(t,e),this.listeners.has(t)||this.listeners.set(t,[])}isStarted(){return this.started}start(){this.started=!0}async afterStart(){let e=this.components.addressManager.getListenAddrs();await this.listen(e)}async stop(){let e=[];for(let[t,n]of this.listeners)for(this.log("closing listeners for %s",t);n.length>0;){let o=n.pop();o!=null&&e.push(o.close())}await Promise.all(e),this.log("all listeners closed");for(let t of this.listeners.keys())this.listeners.set(t,[]);this.started=!1}async dial(e,t){let n=this.dialTransportForMultiaddr(e);if(n==null)throw new Eh(`No transport available for address ${String(e)}`);return t?.onProgress?.(new H("transport-manager:selected-transport",n[Symbol.toStringTag])),n.dial(e,{...t,upgrader:this.components.upgrader})}getAddrs(){let e=[];for(let t of this.listeners.values())for(let n of t)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}getListeners(){return Array.of(...this.listeners.values()).flat()}dialTransportForMultiaddr(e){for(let t of this.transports.values())if(t.dialFilter([e]).length>0)return t}listenTransportForMultiaddr(e){for(let t of this.transports.values())if(t.listenFilter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new $r("Not started");if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t=[];for(let[n,o]of this.transports.entries()){let i=o.listenFilter(e),s=[];for(let l of i){this.log("creating listener for %s on %a",n,l);let d=o.createListener({upgrader:this.components.upgrader}),u=this.listeners.get(n)??[];u==null&&(u=[],this.listeners.set(n,u)),u.push(d),d.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:d})}),d.addEventListener("close",()=>{let f=u.findIndex(h=>h===d);u.splice(f,1),this.components.events.safeDispatchEvent("transport:close",{detail:d})}),s.push(d.listen(l))}if(s.length===0){t.push(n);continue}if((await Promise.allSettled(s)).find(l=>l.status==="fulfilled")==null&&this.faultTolerance!==so.NO_FATAL)throw new Di(`Transport (${n}) could not listen on any available address`)}if(t.length===this.transports.size){let n=`no valid addresses were provided for transports [${t.join(", ")}]`;if(this.faultTolerance===so.FATAL_ALL)throw new Di(n);this.log(`libp2p in dial mode only: ${n}`)}}async remove(e){let t=this.listeners.get(e)??[];this.log.trace("removing transport %s",e);let n=[];for(this.log.trace("closing listeners for %s",e);t.length>0;){let o=t.pop();o!=null&&n.push(o.close())}await Promise.all(n),this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let t of this.transports.keys())e.push(this.remove(t));await Promise.all(e)}};var Tt="/multistream/1.0.0";var bP=O(`
39
- `);async function Oi(r,e,t){await r.write(e,t)}async function Mb(r,e,t){await r.writeV(e,t)}async function xP(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==bP[0])throw e.log.error("Invalid mss message - missing newline",t),new de("Missing newline");return t.sublist(0,-1)}async function Go(r,e){let t=await xP(r,e);return F(t.subarray())}async function rl(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return EP(r,e[0],t);let n=An(r,{...t,maxDataLength:1024}),o=e.shift();if(o==null)throw new Error("At least one protocol must be specified");t.log.trace('select: write ["%s", "%s"]',Tt,o);let i=O(`${Tt}
40
- `),s=O(`${o}
41
- `);await Mb(n,[i,s],t),t.log.trace("select: reading multistream-select header");let a=await Go(n,t);if(t.log.trace('select: read "%s"',a),a===Tt&&(t.log.trace("select: reading protocol response"),a=await Go(n,t),t.log.trace('select: read "%s"',a)),a===o)return{stream:n.unwrap(),protocol:o};for(let c of e){t.log.trace('select: write "%s"',c),await Oi(n,O(`${c}
42
- `),t),t.log.trace("select: reading protocol response");let l=await Go(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new Cn("protocol selection failed")}function EP(r,e,t){let n=r.sink.bind(r),o=r.source,i=!1,s=!1,a=J(),c=!1,l=!1,d=J(),u=!1,f=!1,h=J(),p=An({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async b=>{let{sink:w}=p.unwrap();await w(async function*(){let x=!1;for await(let T of b){if(l&&await d.promise,c)yield T;else{l=!0,t.log.trace('optimistic: write ["%s", "%s", data(%d)] in sink',Tt,e,T.byteLength);let k=`${e}
43
- `;yield new ce(Uint8Array.from([19]),O(`${Tt}
44
- `),Ve(k.length),O(k),T).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',Tt,e,T.byteLength),c=!0,l=!1,d.resolve(),m().catch(v=>{t.log.error("could not finish optimistic protocol negotiation of %s",e,v)})}x=!0}x||await m()}())};async function m(){if(s){t.log.trace("optimistic: already negotiating %s stream",e),await a.promise;return}s=!0;try{c||(t.log.trace("optimistic: doing send protocol for %s stream",e),await g()),u||(t.log.trace("optimistic: doing read protocol for %s stream",e),await y())}finally{s=!1,i=!0,a.resolve()}}async function g(){if(l){await d.promise;return}l=!0;try{t.log.trace('optimistic: write ["%s", "%s", data] in source',Tt,e),await p.writeV([O(`${Tt}
45
- `),O(`${e}
46
- `)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',Tt,e)}finally{c=!0,l=!1,d.resolve()}}async function y(){if(f){await h.promise;return}f=!0;try{t.log.trace("optimistic: reading multistream select header");let b=await Go(p,t);if(t.log.trace('optimistic: read multistream select header "%s"',b),b===Tt&&(b=await Go(p,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',b,e),b!==e)throw new Cn("protocol selection failed")}finally{u=!0,f=!1,h.resolve()}}if(r.source=async function*(){await m(),t.log.trace('optimistic: reading data from "%s" stream',e),yield*p.unwrap().source}(),r.closeRead!=null){let b=r.closeRead.bind(r);r.closeRead=async w=>{i||await m().catch(x=>{t.log.error("could not negotiate protocol before close read",x)}),await b(w)}}if(r.closeWrite!=null){let b=r.closeWrite.bind(r);r.closeWrite=async w=>{i||await m().catch(x=>{t.log.error("could not negotiate protocol before close write",x)}),await b(w)}}if(r.close!=null){let b=r.close.bind(r);r.close=async w=>{let x=[];l&&x.push(d.promise),f&&x.push(h.promise),x.length>0?await ke(Promise.all(x),w?.signal):(i=!0,s=!1,a.resolve()),await b(w)}}return{stream:r,protocol:e}}async function nl(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=An(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await Go(n,t);if(t.log.trace('handle: read "%s"',o),o===Tt){t.log.trace('handle: respond with "%s" for "%s"',Tt,o),await Oi(n,O(`${Tt}
47
- `),t),t.log.trace('handle: responded with "%s" for "%s"',Tt,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await Oi(n,O(`${o}
48
- `),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let i=new ce(...e.map(s=>Qt.single(O(`${s}
49
- `))),O(`
50
- `));t.log.trace('handle: respond with "%s" for %s',e,o),await Oi(n,i,t),t.log.trace('handle: responded with "%s" for %s',e,o);continue}t.log.trace('handle: respond with "na" for "%s"',o),await Oi(n,O(`na
51
- `),t),t.log('handle: responded with "na" for "%s"',o)}}var SP=500,o4=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;limits;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:o,close:i,abort:s,getStreams:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=t,this.remotePeer=n,this.direction=e.direction,this.status="open",this.timeline=e.timeline,this.multiplexer=e.multiplexer,this.encryption=e.encryption,this.limits=e.limits,this.log=e.logger.forComponent(`libp2p:connection:${this.direction}:${this.id}`),this.remoteAddr.getPeerId()==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),this._newStream=o,this._close=i,this._abort=s,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[h4]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new ll("the connection is being closed");if(this.status==="closed")throw new Mi("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new $i("Cannot open protocol stream on limited connection");let n=await this._newStream(e,t);return n.direction="outbound",n}async close(e={}){if(!(this.status==="closed"||this.status==="closing")){if(this.log("closing connection to %a",this.remoteAddr),this.status="closing",e.signal==null){let t=AbortSignal.timeout(SP);K(1/0,t),e={...e,signal:t}}try{this.log.trace("closing underlying transport"),await this._close(e),this.log.trace("updating timeline with close time"),this.status="closed",this.timeline.close=Date.now()}catch(t){this.log.error("error encountered during graceful close of connection to %a",this.remoteAddr,t),this.abort(t)}}}abort(e){this.status!=="closed"&&(this.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this._abort(e),this.status="closed",this.timeline.close=Date.now())}};function Fb(r){return new o4(r)}function IP(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return t4}function TP(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.name!=="UnhandledProtocolError")throw n}return t.maxOutboundStreams??r4}function $b(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var Mh=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;outboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;constructor(e,t){this.components=e,this.connectionEncrypters=new Map,t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=new Map,t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??3e3,this.outboundUpgradeTimeout=t.outboundUpgradeTimeout??3e3,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??2e3,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??2e3,this.events=e.events,this.metrics={dials:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_total"),errors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dial_errors_total")}}[Symbol.toStringTag]="@libp2p/upgrader";async shouldBlockConnection(e,...t){let n=this.components.connectionGater[e];if(n==null)return;if(await n.apply(this.components.connectionGater,t)===!0)throw new bh(`The multiaddr connection is blocked by gater.${e}`)}async upgradeInbound(e,t={}){try{if(this.metrics.dials?.increment({inbound:!0}),!await this.components.connectionManager.acceptIncomingConnection(e))throw new xh("connection denied");return await this.shouldBlockConnection("denyInboundConnection",e),await this._performUpgrade(e,"inbound",t)}catch(n){throw this.metrics.errors?.increment({inbound:!0}),n}finally{this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t={}){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getPeerId(),o;return n!=null&&(o=De(n),await this.shouldBlockConnection("denyOutboundConnection",o,e)),await this._performUpgrade(e,"outbound",t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),n}}async _performUpgrade(e,t,n){let o,i,s,a,c,l=AbortSignal.timeout(t==="inbound"?this.inboundUpgradeTimeout:this.outboundUpgradeTimeout),d=he([l,n.signal]);K(1/0,l,d),n.signal=d,this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t);let u=e;if(n?.skipProtection!==!0){let f=this.components.connectionProtector;f!=null&&(e.log("protecting the %s connection",t),u=await f.protect(e,n))}try{if(o=u,n?.skipEncryption!==!0){n?.onProgress?.(new H(`upgrader:encrypt-${t}-connection`)),{conn:o,remotePeer:i,protocol:c}=await(t==="inbound"?this._encryptInbound(u,{...n,signal:d}):this._encryptOutbound(u,{...n,signal:d}));let f={...u,...o};await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",i,f)}else{let f=e.remoteAddr.getPeerId();if(f==null)throw new hn(`${t} connection that skipped encryption must have a peer id`);let h=De(f);c="native",i=h}if(i.equals(this.components.peerId)){let f=new Fi("Can not dial self");throw e.abort(f),f}if(s=o,n?.muxerFactory!=null)a=n.muxerFactory;else if(this.streamMuxers.size>0){n?.onProgress?.(new H(`upgrader:multiplex-${t}-connection`));let f=await(t==="inbound"?this._multiplexInbound({...u,...o},this.streamMuxers,n):this._multiplexOutbound({...u,...o},this.streamMuxers,n));a=f.muxerFactory,s=f.stream}}catch(f){throw e.log.error("failed to upgrade inbound connection %s %a - %e",t==="inbound"?"from":"to",e.remoteAddr,f),f}finally{d.clear()}return await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",i,e),e.log("successfully upgraded %s connection",t),this._createConnection({cryptoProtocol:c,direction:t,maConn:e,upgradedConn:s,muxerFactory:a,remotePeer:i,limits:n?.limits})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:i,remotePeer:s,muxerFactory:a,limits:c}=e,l,d,u;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:p=>{u!=null&&Promise.resolve().then(async()=>{let m=this.components.registrar.getProtocols(),g=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);K(1/0,g);let{stream:y,protocol:b}=await nl(p,m,{signal:g,log:p.log,yieldBytes:!1});if(u==null)return;u.log("incoming stream opened on %s",b);let w=IP(b,this.components.registrar);if($b(b,"inbound",u)===w){let T=new pl(`Too many inbound protocol streams for protocol "${b}" - limit ${w}`);throw p.abort(T),T}p.source=y.source,p.sink=y.sink,p.protocol=b,y.closeWrite!=null&&(p.closeWrite=y.closeWrite),y.closeRead!=null&&(p.closeRead=y.closeRead),y.close!=null&&(p.close=y.close),await this.components.peerStore.merge(s,{protocols:[b]}),this.components.metrics?.trackProtocolStream(p,u),this._onStream({connection:u,stream:p,protocol:b})}).catch(async m=>{u.log.error("error handling incoming stream id %s - %e",p.id,m),p.timeline.close==null&&await p.close()})}}),d=async(p,m={})=>{if(l==null)throw new Li("Connection is not multiplexed");u.log.trace("starting new stream for protocols %s",p);let g=await l.newStream();u.log.trace("started new stream %s for protocols %s",g.id,p);try{if(m.signal==null){g.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",p);let T=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);K(1/0,T),m={...m,signal:T}}g.log.trace("selecting protocol from protocols %s",p);let{stream:y,protocol:b}=await rl(g,p,{...m,log:g.log,yieldBytes:!0});g.log.trace("selected protocol %s",b);let w=TP(b,this.components.registrar,m),x=$b(b,"outbound",u);if(x>=w){let T=new co(`Too many outbound protocol streams for protocol "${b}" - ${x}/${w}`);throw g.abort(T),T}return await this.components.peerStore.merge(s,{protocols:[b]}),g.source=y.source,g.sink=y.sink,g.protocol=b,y.closeWrite!=null&&(g.closeWrite=y.closeWrite),y.closeRead!=null&&(g.closeRead=y.closeRead),y.close!=null&&(g.close=y.close),this.components.metrics?.trackProtocolStream(g,u),g}catch(y){throw u.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",n==="inbound"?"from":"to",e.maConn.remoteAddr,p,y),g.timeline.close==null&&g.abort(y),y}},Promise.all([l.sink(i.source),i.sink(l.source)]).catch(p=>{u.log.error("error piping data through muxer - %e",p)}));let f=o.timeline;o.timeline=new Proxy(f,{set:(...p)=>(p[1]==="close"&&p[2]!=null&&f.close==null&&(async()=>{try{u.status==="open"&&await u.close()}catch(m){u.log.error("error closing connection after timeline close %e",m)}finally{this.events.safeDispatchEvent("connection:close",{detail:u})}})().catch(m=>{u.log.error("error thrown while dispatching connection:close event %e",m)}),Reflect.set(...p))}),o.timeline.upgraded=Date.now();let h=()=>{throw new Li("Connection is not multiplexed")};return u=Fb({remoteAddr:o.remoteAddr,remotePeer:s,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,limits:c,logger:this.components.logger,newStream:d??h,getStreams:()=>l?.streams??[],close:async p=>{await l?.close(p),await o.close(p)},abort:p=>{o.abort(p),l?.abort(p)}}),this.events.safeDispatchEvent("connection:open",{detail:u}),u.__maConnTimeline=f,u}_onStream(e){let{connection:t,stream:n,protocol:o}=e,{handler:i,options:s}=this.components.registrar.getHandler(o);if(t.limits!=null&&s.runOnLimitedConnection!==!0)throw new $i("Cannot open protocol stream on limited connection");i({connection:t,stream:n})}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let{stream:o,protocol:i}=await nl(e,n,{...t,log:e.log}),s=this.connectionEncrypters.get(i);if(s==null)throw new Ni(`no crypto module found for ${i}`);return e.log("encrypting inbound connection to %a using %s",e.remoteAddr,i),{...await s.secureInbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting inbound connection from %a failed",e.remoteAddr,o),new Ni(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:i}=await rl(e,n,{...t,log:e.log,yieldBytes:!0}),s=this.connectionEncrypters.get(i);if(s==null)throw new Ni(`no crypto module found for ${i}`);return e.log("encrypting outbound connection to %a using %s",e.remoteAddr,i),{...await s.secureOutbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting outbound connection to %a failed",e.remoteAddr,o),new Ni(o.message)}}async _multiplexOutbound(e,t,n){let o=Array.from(t.keys());e.log("outbound selecting muxer %s",o);try{e.log.trace("selecting stream muxer from %s",o);let{stream:i,protocol:s}=await rl(e,o,{...n,log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing outbound connection",i),new Li(String(i))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{let{stream:i,protocol:s}=await nl(e,o,{...n,log:e.log}),a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing inbound connection",i),new Li(String(i))}}};var Uh=class extends Ee{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new Ee,n=t.dispatchEvent.bind(t);t.dispatchEvent=a=>{let c=n(a),l=this.dispatchEvent(new CustomEvent(a.type,{detail:a.detail}));return c||l},K(1/0,t),this.peerId=e.peerId,this.logger=e.logger??To(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=this.components=bb({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:e.nodeInfo??{name:ih,version:oh},logger:this.logger,events:t,datastore:e.datastore??new xi,connectionGater:Eb(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",gb(o,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),o.events.addEventListener("peer:update",a=>{if(a.detail.previous==null){let c={id:a.detail.peer.id,multiaddrs:a.detail.peer.addresses.map(l=>l.multiaddr)};o.events.safeDispatchEvent("peer:discovery",{detail:c})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(o)),this.components.upgrader=new Mh(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((a,c)=>this.configureComponent(`connection-encryption-${c}`,a(this.components))),streamMuxers:(e.streamMuxers??[]).map((a,c)=>this.configureComponent(`stream-muxers-${c}`,a(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,outboundUpgradeTimeout:e.connectionManager?.outboundUpgradeTimeout}),this.configureComponent("transportManager",new Oh(this.components,e.transportManager)),this.configureComponent("connectionManager",new Ph(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new Rh(this.components,e.connectionMonitor)),this.configureComponent("registrar",new Bh(this.components)),this.configureComponent("addressManager",new hh(this.components,e.addresses));let i=(e.peerRouters??[]).map((a,c)=>this.configureComponent(`peer-router-${c}`,a(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new Lh(this.components,{routers:i}));let s=(e.contentRouters??[]).map((a,c)=>this.configureComponent(`content-router-${c}`,a(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new Dh(this.components,{routers:s})),this.configureComponent("randomWalk",new Nh(this.components)),(e.peerDiscovery??[]).forEach((a,c)=>{this.configureComponent(`peer-discovery-${c}`,a(this.components)).addEventListener("peer",d=>{this.#e(d)})}),e.transports?.forEach((a,c)=>{this.components.transportManager.add(this.configureComponent(`transport-${c}`,a(this.components)))}),e.services!=null)for(let a of Object.keys(e.services)){let c=e.services[a],l=c(this.components);if(l==null){this.log.error("service factory %s returned null or undefined instance",a);continue}this.services[a]=l,this.configureComponent(a,l),l[ln]!=null&&(this.log("registering service %s for content routing",a),s.push(l[ln])),l[un]!=null&&(this.log("registering service %s for peer routing",a),i.push(l[un])),l[Yo]!=null&&(this.log("registering service %s for peer discovery",a),l[Yo].addEventListener?.("peer",d=>{this.#e(d)}))}xb(o)}configureComponent(e,t){return t==null&&this.log.error("component %s was null or undefined",e),this.components[e]=t,t}async start(){if(this.status==="stopped"){this.status="starting",this.log("libp2p is starting");try{await this.components.beforeStart?.(),await this.components.start(),await this.components.afterStart?.(),this.status="started",this.safeDispatchEvent("start",{detail:this}),this.log("libp2p has started")}catch(e){throw this.log.error("An error occurred starting libp2p",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new nr;for(let t of this.components.connectionManager.getConnections())e.add(t.remotePeer);return Array.from(e)}async dial(e,t={}){return this.components.connectionManager.openConnection(e,{priority:75,...t})}async dialProtocol(e,t,n={}){if(t==null)throw new C("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new C("no protocols were provided to open a stream");return(await this.dial(e,n)).newStream(t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){No(e)&&(e=De(e.getPeerId()??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let s=await this.peerStore.get(e);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.name!=="NotFoundError")throw s}let n=Re([O("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),i=rt(o);return await this.peerStore.patch(e,{publicKey:i}),i}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async o=>{await this.components.registrar.handle(o,t,n)}))}async unhandle(e){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async t=>{await this.components.registrar.unhandle(t)}))}async register(e,t){return this.components.registrar.register(e,t)}unregister(e){this.components.registrar.unregister(e)}async isDialable(e,t={}){return this.components.connectionManager.isDialable(e,t)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error("peer discovery mechanism discovered self");return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function Kb(r={}){r.privateKey??=await Vu("Ed25519");let e=new Uh({...await db(r),peerId:P8(r.privateKey)});return r.start!==!1&&await e.start(),e}async function Vb(r){let e=r.libp2p?.privateKey,t=r.logger??To(),n=new Le("/pkcs8/self"),o;if(e==null&&r.datastore!=null)if(o=Of(r.keychain)({datastore:r.datastore,logger:t}),r.libp2p=r.libp2p??{},await r.datastore.has(n))r.libp2p.privateKey=await o.exportKey("self");else{let a=await Vu("Ed25519");r.libp2p.privateKey=a,await o.importKey("self",a)}let i=sh(r);return i.datastore=i.datastore??r.datastore,r=r??{},await Kb({...i,...r.libp2p,start:!1})}async function kP(r={}){let e=r.datastore??new xi,t=r.blockstore??new _c,n;CP(r.libp2p)?n=r.libp2p:n=await Vb({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new md({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[Jp(),Tp()],routers:r.routers??[dm(n),lm()],metrics:n.metrics});return r.start!==!1&&await o.start(),o}function CP(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return rx(PP);})();
38
+ `),r}var $w=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),Vw=r=>[...Array(r)].map(()=>$w.at(Math.floor(Math.random()*$w.length))).join("");var BC=1e4,Uae=ee("webrtc-direct").code,Fw=ee("certhash").code,uh=class{log;metrics;components;init;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webrtc-direct"),this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc-direct_dialer_events_total",{label:"event",help:"Total count of WebRTC-direct dial events by type"})})}[dn]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[Ie]=["@libp2p/transport"];async dial(e,t){let n=await this._connect(e,t);return this.log("dialing address: %a",e),n}createListener(e){throw new rh("WebRTCTransport.createListener")}listenFilter(e){return e.filter(vc.exactMatch)}dialFilter(e){return this.listenFilter(e)}async _connect(e,t){let n=new AbortController,o=n.signal,i=e.getPeerId();if(i===null)throw new th("we need to have the remote's PeerId");let s=Re(i),a=L3(lh(e)),c=await Di.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:D3(a.code)}),l=new Di({...await Zc(this.init.rtcConfiguration),certificates:[c]});try{let d=new Promise((v,S)=>{let _=l.createDataChannel("",{negotiated:!0,id:0}),F=setTimeout(()=>{let N=`Data channel was never opened: state: ${_.readyState}`;this.log.error(N),this.metrics?.dialerEvents.increment({open_error:!0}),S(new Jc("data",N))},BC);_.onopen=N=>{clearTimeout(F),v(_)},_.onerror=N=>{clearTimeout(F);let B=`Error opening a data channel for handshaking: ${N.target?.toString()??"not specified"}`;this.log.error(B),this.metrics?.dialerEvents.increment({unknown_error:!0}),S(new Jc("data",B))}}),u="libp2p+webrtc+v1/"+Vw(32),f=await l.createOffer(),h=Uw(f,u);await l.setLocalDescription(h);let p=Mw(e,u);await l.setRemoteDescription(p);let m=await d,g=this.generateNoisePrologue(l,a.code,e),y=$s({prologueBytes:g})(this.components),b=ca({channel:m,direction:"inbound",logger:this.components.logger,...this.init.dataChannel??{}}),w={...b,sink:b.sink.bind(b),source:async function*(){for await(let v of b.source)for(let S of v)yield S}()},x=new Li(this.components,{peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),T=jc?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(T,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":x.close().catch(v=>{this.log.error("error closing connection",v)}).finally(()=>{n.abort()});break;default:break}},{signal:o}),this.metrics?.dialerEvents.increment({peer_connection:!0});let k=new Wo(this.components,{peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await y.secureInbound(w,{signal:o,remotePeer:s}),await t.upgrader.upgradeOutbound(x,{skipProtection:!0,skipEncryption:!0,muxerFactory:k})}catch(d){throw l.close(),d}}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw new C("no local certificate");let o=Ow(e,{log:this.log});if(o==null)throw new C("no local fingerprint found");let i=o.trim().toLowerCase().replaceAll(":",""),s=M(i,"hex"),a=Zt(t,s),c=R3.decode(lh(n)),l=M("libp2p-webrtc-noise:");return Pe([l,a.bytes,c])}};function Kw(r){return e=>new uh(e,r)}function Hw(r){return e=>new ch(e,r)}var qw=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",o),r.removeEventListener("error",i)}function o(){n(),e()}function i(s){n(),t(s.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",o),r.addEventListener("error",i)})};var Ww=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await qw(r)}catch(i){if(i.message==="socket closed")break;throw i}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(o)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((o,i)=>{r.addEventListener("close",s=>{if(s.wasClean||s.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:s});i(a)}}),setTimeout(()=>{r.close()})})});var Yw=fr(Gw(),1);function Qw(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var Xw=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((i,s)=>{if(n){i();return}if(o!=null){s(o);return}let a=d=>{r.removeEventListener("open",c),r.removeEventListener("error",l),d()},c=()=>{a(i)},l=d=>{a(()=>{s(d.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let i=new Yw.EventIterator(({push:s,stop:a,fail:c})=>{let l=u=>{let f=null;typeof u.data=="string"&&(f=M(u.data)),Qw(u.data)&&(f=new Uint8Array(u.data)),u.data instanceof Uint8Array&&(f=u.data),f!=null&&s(f)},d=u=>{c(u.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",d),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",d),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let s of i)yield Qw(s)?new Uint8Array(s):s}(),n=r.readyState===1,o;return r.addEventListener("open",()=>{n=!0,o=null}),r.addEventListener("close",()=>{n=!1,o=null}),r.addEventListener("error",i=>{n||(o=i.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var jw=(r,e)=>{e=e??{};let t=Xw(r),n=e.remoteAddress,o=e.remotePort;if(r.url!=null)try{let s=new URL(r.url);n=s.hostname,o=parseInt(s.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:Ww(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(s=>{r.addEventListener("close",()=>{s()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:o,socket:r}};var Zw=WebSocket;var MC={"http:":"ws:","https:":"wss:"},Jw="ws:",eb=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??Jw}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??Jw,o=e.host,i=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";r=`${n}//${o}${i}${r}`}let t=new URL(r);for(let[n,o]of Object.entries(MC))t.protocol===n&&(t.protocol=o);return t};function tb(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=eb(r,t),o=new Zw(n.toString(),e.websocket);return jw(o,e)}function rb(r){return r.filter(e=>Ps.exactMatch(e)||Ec.exactMatch(e))}function nb(r){return r.filter(e=>Ps.exactMatch(e))}function ob(){throw new Error("WebSocket Servers can not be created in the browser!")}function ib(r,e,t){let n=t.logger.forComponent("libp2p:websockets:maconn"),o=t.metrics,i=t.metricPrefix??"",s={log:n,async sink(a){try{await r.sink(async function*(){for await(let c of a)c instanceof Uint8Array?yield c:yield c.subarray()}())}catch(c){c.type!=="aborted"&&n.error(c)}},source:r.source,remoteAddr:e,timeline:{open:Date.now()},async close(a={}){let c=Date.now();if(a.signal==null){let d=AbortSignal.timeout(500);a={...a,signal:d}}let l=()=>{let{host:d,port:u}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",d,u,Date.now()-c),this.abort(new ht("Socket close timeout"))};a.signal?.addEventListener("abort",l);try{await r.close()}catch(d){n.error("error closing WebSocket gracefully",d),this.abort(d)}finally{a.signal?.removeEventListener("abort",l),s.timeline.close=Date.now()}},abort(a){let{host:c,port:l}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",c,l,a),r.destroy(),s.timeline.close=Date.now(),o?.increment({[`${i}error`]:!0})}};return r.socket.addEventListener("close",()=>{o?.increment({[`${i}close`]:!0}),s.timeline.close==null&&(s.timeline.close=Date.now())},{once:!0}),s}var O3=class{log;init;logger;metrics;components;constructor(e,t){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_websockets_dialer_events_total",{label:"event",help:"Total count of WebSockets dialer events by type"})})}[dn]=!0;[Symbol.toStringTag]="@libp2p/websockets";[Ie]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=ib(n,e,{logger:this.logger,metrics:this.metrics?.dialerEvents});this.log("new outbound connection %s",o.remoteAddr);let i=await t.upgrader.upgradeOutbound(o,t);return this.log("outbound connection %s upgraded",o.remoteAddr),i}async _connect(e,t){t?.signal?.throwIfAborted();let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=J(),i=tb(z1(e),this.init);i.socket.addEventListener("error",()=>{let s=new Vi(`Could not connect to ${e.toString()}`);this.log.error("connection error:",s),this.metrics?.dialerEvents.increment({error:!0}),o.reject(s)});try{t.onProgress?.(new H("websockets:open-connection")),await Ce(Promise.race([i.connected(),o.promise]),t.signal)}catch(s){throw t.signal?.aborted===!0&&this.metrics?.dialerEvents.increment({abort:!0}),i.close().catch(a=>{this.log.error("error closing raw socket",a)}),s}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),i}createListener(e){return ob({logger:this.logger,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):tf||rf?nb(e):rb(e)}dialFilter(e){return this.listenFilter(e)}};function sb(r={}){return e=>new O3(e,r)}function M3(r){throw new Error("Not implemented")}var U3=class extends kn{writer;reader;constructor(e){super(e),this.writer=e.bidiStream.writable.getWriter(),this.reader=e.bidiStream.readable.getReader(),Promise.resolve().then(async()=>{for(;;){let t=await this.reader.read();if(t.done){e.log("remote closed write");return}t.value!=null&&this.sourcePush(new le(t.value))}}).catch(t=>{e.log.error("error reading from stream",t),this.abort(t)}).finally(()=>{this.remoteCloseWrite()}),this.writer.closed.then(()=>{e.log("writer closed")}).catch(t=>{e.log("writer close promise rejected",t)}).finally(()=>{this.remoteCloseRead()})}sendNewStream(e){}async sendData(e,t){for await(let n of e)this.log("sendData waiting for writer to be ready"),await Ce(this.writer.ready,t?.signal),this.writer.write(n).catch(o=>{this.log.error("error sending stream data",o)})}async sendReset(e){this.log("sendReset aborting writer"),await Ce(this.writer.abort(),e?.signal),this.log("sendReset aborted writer")}async sendCloseWrite(e){this.log("sendCloseWrite closing writer"),await Ce(this.writer.close(),e?.signal),this.log("sendCloseWrite closed writer")}async sendCloseRead(e){this.log("sendCloseRead cancelling reader"),await Ce(this.reader.cancel(),e?.signal),this.log("sendCloseRead cancelled reader")}};async function F3(r,e,t,n,o,i){let s=i.forComponent(`libp2p:webtransport:stream:${t}:${e}`),a=new U3({bidiStream:r,id:e,direction:t,log:s,onEnd:()=>{let c=n.findIndex(l=>l===a);c!==-1&&n.splice(c,1),o?.(a)}});return a}function hh(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}function ab(r,e,t,n){let o=0,i=t.forComponent("libp2p:webtransport:muxer");return{protocol:"webtransport",createStreamMuxer:s=>{typeof s=="function"&&(s={onIncomingStream:s});let a=[];Promise.resolve().then(async()=>{for(;;){let{done:l,value:d}=await e.read();if(l)break;if(a.length>=n.maxInboundStreams)i(`too many inbound streams open - ${a.length}/${n.maxInboundStreams}, closing new incoming stream`),d.writable.close().catch(u=>{i.error(`failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)}),d.readable.cancel().catch(u=>{i.error(`failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)});else{let u=await F3(d,String(o++),"inbound",a,s?.onStreamEnd,t);a.push(u),s?.onIncomingStream?.(u)}}}).catch(l=>{i.error("could not create a new stream",l)});let c={protocol:"webtransport",streams:a,newStream:async l=>{i("new outgoing stream",l);let d=await r.createBidirectionalStream(),u=await F3(d,String(o++),s?.direction??"outbound",a,s?.onStreamEnd,t);return a.push(u),u},close:async()=>{i("closing webtransport muxer gracefully");try{r.close()}catch(l){c.abort(l)}},abort:l=>{i("closing webtransport muxer with err:",l);try{r.close()}catch(d){i.error("webtransport session threw error during close",d)}},...hh()};return c}}}function cb(r,e){return e.filter(n=>!!r.find(o=>te(n,o))).length===e.length}var FC=Object.values(Nn).map(r=>r.decoder).reduce((r,e)=>r.or(e));function $C(r){return Qe.decode(FC.decode(r))}function $3(r){if(!Ei.matches(r))throw new hn("Invalid multiaddr, was not a WebTransport address");let e=r.stringTuples(),t=e.filter(([s,a])=>s===ee("certhash").code).map(([s,a])=>$C(a??"")),n=e.filter(([s,a])=>s===ee("p2p").code).map(([s,a])=>Re(a??""))[0],o=r.toOptions(),i=o.host;return o.family===6&&i?.includes(":")&&(i=`[${i}]`),{url:`https://${i}:${o.port}`,certhashes:t,remotePeer:n}}var lb=globalThis.WebTransport;var V3=class{log;components;config;metrics;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webtransport"),this.components=e,this.config={...t,maxInboundStreams:t.maxInboundStreams??1e3,certificates:t.certificates??[]},e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webtransport_dialer_events_total",{label:"event",help:"Total count of WebTransport dialer events by type"})})}[Symbol.toStringTag]="@libp2p/webtransport";[dn]=!0;[Ie]=["@libp2p/transport"];async dial(e,t){t?.signal?.throwIfAborted(),this.log("dialing %s",e),t=t??{};let{url:n,certhashes:o,remotePeer:i}=$3(e),s,a,c=()=>{},l=!1,d=!1,u=!1;try{this.metrics?.dialerEvents.increment({pending:!0});let f=new lb(`${n}/.well-known/libp2p-webtransport?type=noise`,{serverCertificateHashes:o.map(h=>({algorithm:"sha-256",value:h.digest}))});if(c=h=>{if(!l)try{this.metrics?.dialerEvents.increment({[h]:!0}),f.close()}catch(p){this.log.error("error closing wt session",p)}finally{a!=null&&(a.timeline.close=Date.now()),l=!0}},s=()=>{c(d?"noise_timeout":"ready_timeout")},t.signal?.addEventListener("abort",s,{once:!0}),this.log("wait for session to be ready"),t.onProgress?.(new H("webtransport:wait-for-session")),await Promise.race([f.closed,f.ready]),this.log("session became ready"),d=!0,this.metrics?.dialerEvents.increment({ready:!0}),f.closed.catch(h=>{this.log.error("error on remote wt session close",h)}).finally(()=>{c("remote_close")}),u=await Ce(this.authenticateWebTransport({wt:f,remotePeer:i,certhashes:o,...t}),t.signal),!u)throw new ul("Failed to authenticate webtransport");return this.metrics?.dialerEvents.increment({open:!0}),a={close:async()=>{this.log("closing webtransport"),c("close")},abort:h=>{this.log("aborting webtransport due to passed err",h),c("abort")},remoteAddr:e,timeline:{open:Date.now()},log:this.components.logger.forComponent("libp2p:webtransport:maconn"),...hh()},await t.upgrader.upgradeOutbound(a,{skipEncryption:!0,muxerFactory:ab(f,f.incomingBidirectionalStreams.getReader(),this.components.logger,this.config),skipProtection:!0,onProgress:t.onProgress})}catch(f){throw this.log.error("caught wt session err",f),c(u?"upgrade_error":d?"noise_error":"ready_error"),f}finally{s!=null&&t.signal?.removeEventListener("abort",s)}}async authenticateWebTransport({wt:e,remotePeer:t,certhashes:n,onProgress:o,signal:i}){i?.throwIfAborted(),o?.(new H("webtransport:open-authentication-stream"));let s=await e.createBidirectionalStream(),a=s.writable.getWriter(),c=s.readable.getReader(),l={source:async function*(){for(;;){let f=await c.read();if(f.value!=null&&(yield f.value),f.done)break}}(),sink:async f=>{for await(let h of f){await Ce(a.ready,i);let p=h instanceof Uint8Array?h:h.subarray();a.write(p).catch(m=>{this.log.error("could not write chunk during authentication of WebTransport stream",m)})}}},d=$s()(this.components);o?.(new H("webtransport:secure-outbound-connection"));let{remoteExtensions:u}=await d.secureOutbound(l,{signal:i,remotePeer:t});if(o?.(new H("webtransport:close-authentication-stream")),a.close().catch(f=>{this.log.error(`Failed to close authentication stream writer: ${f.message}`)}),c.cancel().catch(f=>{this.log.error(`Failed to close authentication stream reader: ${f.message}`)}),!cb(u?.webtransportCerthashes??[],n.map(f=>f.bytes)))throw new C("Our certhashes are not a subset of the remote's reported certhashes");return!0}createListener(e){return M3(this.components,{...e,certificates:this.config.certificates,maxInboundStreams:this.config.maxInboundStreams})}listenFilter(){return[]}dialFilter(e){return globalThis.WebTransport==null?[]:e.filter(t=>{if(!Ei.exactMatch(t))return!1;let{url:n,certhashes:o}=$3(t);return n!=null&&o.length>0})}};function ub(r={}){return e=>new V3(e,r)}var K3=fr(J1(),1);function db(r,e){let t=e.map((n,o)=>({record:_n(n),index:o}));return t.sort((n,o)=>{let i=n.record.sequence,s=o.record.sequence;if(i>s)return-1;if(i<s)return 1;if(n.record.validityType===ar.ValidityType.EOL&&o.record.validityType===ar.ValidityType.EOL){let a=K3.default.fromString(n.record.validity).toDate(),c=K3.default.fromString(o.record.validity).toDate();if(a.getTime()>c.getTime())return-1;if(a.getTime()<c.getTime())return 1}return 0}),t[0].index}var ph="2.2.1",mh="libp2p";var hb="5.1.0-dff82ec",pb="helia";var mb={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/dnsaddr/va1.bootstrap.libp2p.io/p2p/12D3KooWKnDdG3iXw9eTFijk3EWSunZcFi54Zka4wmtqtt6rPxc8","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function gh(r={}){let e=`${pb}/${hb} ${mh}/${ph} UserAgent=${globalThis.navigator.userAgent}`;return{privateKey:r.privateKey,dns:r.dns,addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[r3(),Hw(),Kw(),ub(),sb()],connectionEncrypters:[$s()],streamMuxers:[y9(),ww()],peerDiscovery:[L9(mb)],services:{autoNAT:E9(),dcutr:X9(),delegatedRouting:()=>v7("https://delegated-ipfs.dev",{filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss"]}),dht:Hy({clientMode:!0,validators:{ipns:sd},selectors:{ipns:db}}),identify:uy({agentVersion:e}),identifyPush:dy({agentVersion:e}),keychain:zf(r.keychain),ping:vw()}}}var VC=32,{code:KC}=ee("dnsaddr"),H3=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}},Ni=async function(e,t={}){let n=t.maxRecursiveDepth??VC;if(n===0)throw new H3("Max recursive depth reached");let[,o]=e.stringTuples().find(([l])=>l===KC)??[],s=await(t?.dns??i1()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[gr.TXT]}),a=e.getPeerId(),c=[];for(let l of s.Answer){let d=l.data.replace(/["']/g,"").trim().split("=")[1];if(d==null||a!=null&&!d.includes(a))continue;let u=Q(d);if(d.startsWith("/dnsaddr")){let f=await u.resolve({...t,maxRecursiveDepth:n-1});c.push(...f.map(h=>h.toString()))}else c.push(u.toString())}return c};var HC={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Ni}},transportManager:{faultTolerance:ao.FATAL_ALL}};async function gb(r){let e=na(HC,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new C("Private network is enforced, but no protector was provided");return e}var la;(function(r){let e;(function(o){let i;o.codec=()=>(i==null&&(i=oe((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&s.value.byteLength>0&&(a.uint32(18),a.bytes(s.value)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:"",value:se(0)},d=a==null?s.len:s.pos+a;for(;s.pos<d;){let u=s.uint32();switch(u>>>3){case 1:{l.key=s.string();break}case 2:{l.value=s.bytes();break}default:{s.skipType(u&7);break}}}return l})),i),o.encode=s=>ne(s,o.codec()),o.decode=(s,a)=>re(s,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let i;o.codec=()=>(i==null&&(i=oe((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&(a.uint32(18),wh.codec().encode(s.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:""},d=a==null?s.len:s.pos+a;for(;s.pos<d;){let u=s.uint32();switch(u>>>3){case 1:{l.key=s.string();break}case 2:{l.value=wh.codec().decode(s,s.uint32(),{limits:c.limits?.value});break}default:{s.skipType(u&7);break}}}return l})),i),o.encode=s=>ne(s,o.codec()),o.decode=(s,a)=>re(s,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=oe((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.addresses!=null)for(let a of o.addresses)i.uint32(10),yh.codec().encode(a,i);if(o.protocols!=null)for(let a of o.protocols)i.uint32(18),i.string(a);if(o.publicKey!=null&&(i.uint32(34),i.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(i.uint32(42),i.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())i.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},i);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())i.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},i);s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={addresses:[],protocols:[],metadata:new Map,tags:new Map},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{if(s.limits?.addresses!=null&&a.addresses.length===s.limits.addresses)throw new Me('Decode error - map field "addresses" had too many elements');a.addresses.push(yh.codec().decode(o,o.uint32(),{limits:s.limits?.addresses$}));break}case 2:{if(s.limits?.protocols!=null&&a.protocols.length===s.limits.protocols)throw new Me('Decode error - map field "protocols" had too many elements');a.protocols.push(o.string());break}case 4:{a.publicKey=o.bytes();break}case 5:{a.peerRecordEnvelope=o.bytes();break}case 6:{if(s.limits?.metadata!=null&&a.metadata.size===s.limits.metadata)throw new Sa('Decode error - map field "metadata" had too many elements');let d=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(d.key,d.value);break}case 7:{if(s.limits?.tags!=null&&a.tags.size===s.limits.tags)throw new Sa('Decode error - map field "tags" had too many elements');let d=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:s.limits?.tags$value}});a.tags.set(d.key,d.value);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>ne(o,r.codec()),r.decode=(o,i)=>re(o,r.codec(),i)})(la||(la={}));var yh;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.multiaddr!=null&&t.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(t.multiaddr)),t.isCertified!=null&&(n.uint32(16),n.bool(t.isCertified)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={multiaddr:se(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.multiaddr=t.bytes();break}case 2:{i.isCertified=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(yh||(yh={}));var wh;(function(r){let e;r.codec=()=>(e==null&&(e=oe((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.value!=null&&t.value!==0&&(n.uint32(8),n.uint32(t.value)),t.expiry!=null&&(n.uint32(16),n.uint64(t.expiry)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={value:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.value=t.uint32();break}case 2:{i.expiry=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>ne(t,r.codec()),r.decode=(t,n)=>re(t,r.codec(),n)})(wh||(wh={}));function ua(r,e){let t=la.decode(e);if(t.publicKey!=null&&r.publicKey==null){let i=rt(t.publicKey);r=En(i)}let n=new Map,o=BigInt(Date.now());for(let[i,s]of t.tags.entries())s.expiry!=null&&s.expiry<o||n.set(i,s);return{...t,id:r,addresses:t.addresses.map(({multiaddr:i,isCertified:s})=>({multiaddr:Q(i),isCertified:s??!1})),metadata:t.metadata,peerRecordEnvelope:t.peerRecordEnvelope??void 0,tags:n}}var q3="/peers/";function da(r){if(!cl(r)||r.type==null)throw new C("Invalid PeerId");let e=r.toCID().toString();return new De(`${q3}${e}`)}async function yb(r,e,t){let n=new Map;for(let o of t){if(o==null)continue;if(o.multiaddr instanceof Uint8Array&&(o.multiaddr=Q(o.multiaddr)),!Bo(o.multiaddr))throw new C("Multiaddr was invalid");if(!await e(r,o.multiaddr))continue;let i=o.isCertified??!1,s=o.multiaddr.toString(),a=n.get(s);a!=null?o.isCertified=a.isCertified||i:n.set(s,{multiaddr:o.multiaddr,isCertified:i})}return[...n.values()].sort((o,i)=>o.multiaddr.toString().localeCompare(i.multiaddr.toString())).map(({isCertified:o,multiaddr:i})=>({isCertified:o,multiaddr:i.bytes}))}async function xh(r,e,t,n){if(e==null)throw new C("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new C("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer;if(o!=null&&!r.equals(o.id))throw new C("peer id did not match existing peer id");let i=o?.addresses??[],s=new Set(o?.protocols??[]),a=o?.metadata??new Map,c=o?.tags??new Map,l=o?.peerRecordEnvelope;if(t==="patch"){if((e.multiaddrs!=null||e.addresses!=null)&&(i=[],e.multiaddrs!=null&&i.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&i.push(...e.addresses)),e.protocols!=null&&(s=new Set(e.protocols)),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=bh(f,{validate:wb})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=bh(f,{validate:bb,map:xb})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&i.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&i.push(...e.addresses),e.protocols!=null&&(s=new Set([...s,...e.protocols])),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[h,p]of f)p==null?a.delete(h):a.set(h,p);a=bh([...a.entries()],{validate:wb})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[p,m]of f)m==null?h.delete(p):h.set(p,m);c=bh([...h.entries()],{validate:bb,map:xb})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d;o?.id.publicKey!=null?d=Lt(o.id.publicKey):e.publicKey!=null?d=Lt(e.publicKey):r.publicKey!=null&&(d=Lt(r.publicKey));let u={addresses:await yb(r,n.addressFilter??(async()=>!0),i),protocols:[...s.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:d,peerRecordEnvelope:l};return r.type!=="RSA"&&delete u.publicKey,u}function bh(r,e){let t=new Map;for(let[n,o]of r)o!=null&&e.validate(n,o);for(let[n,o]of r.sort(([i],[s])=>i.localeCompare(s)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function wb(r,e){if(typeof r!="string")throw new C("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new C("Metadata value must be a Uint8Array")}function bb(r,e){if(typeof r!="string")throw new C("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new C("Tag value must be an integer");if(e.value<0||e.value>100)throw new C("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new C("Tag ttl must be an integer");if(e.ttl<0)throw new C("Tag ttl must be between greater than 0")}}function xb(r,e){let t;return e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl))),{value:e.value??0,expiry:t}}function Eh(r,e){let t=r.toString().split("/")[2],n=X.parse(t,lt),o=vn(n);return ua(o,e)}function qC(r){return r==null?{}:{prefix:q3,filters:(r.filters??[]).map(e=>({key:t,value:n})=>e(Eh(t,n))),orders:(r.orders??[]).map(e=>(t,n)=>e(Eh(t.key,t.value),Eh(n.key,n.value)))}}var vh=class{peerId;datastore;lock;addressFilter;constructor(e,t={}){this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=wi({name:"peer-store",singleProcess:!0})}async has(e){return this.datastore.has(da(e))}async delete(e){if(this.peerId.equals(e))throw new C("Cannot delete self peer");await this.datastore.delete(da(e))}async load(e){let t=await this.datastore.get(da(e));return ua(e,t)}async save(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),i=await xh(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,i,n,o)}async patch(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),i=await xh(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,n,o)}async merge(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),i=await xh(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,n,o)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(qC(e??{}))){let o=Eh(t,n);o.id.equals(this.peerId)||(yield o)}}async#e(e){try{let t=await this.datastore.get(da(e)),n=ua(e,t);return{existingBuf:t,existingPeer:n}}catch(t){if(t.name!=="NotFoundError")throw t}return{}}async#t(e,t,n,o){let i=la.encode(t);return n!=null&&te(i,n)?{peer:ua(e,i),previous:o,updated:!1}:(await this.datastore.put(da(e),i),{peer:ua(e,i),previous:o,updated:!0})}};var W3=class{store;events;peerId;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.events=e.events,this.peerId=e.peerId,this.store=new vh(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){this.log.trace("forEach await read lock");let n=await this.store.lock.readLock();this.log.trace("forEach got read lock");try{for await(let o of this.store.all(t))e(o)}finally{this.log.trace("forEach release read lock"),n()}}async all(e){this.log.trace("all await read lock");let t=await this.store.lock.readLock();this.log.trace("all got read lock");try{return await Pc(this.store.all(e))}finally{this.log.trace("all release read lock"),t()}}async delete(e){this.log.trace("delete await write lock");let t=await this.store.lock.writeLock();this.log.trace("delete got write lock");try{await this.store.delete(e)}finally{this.log.trace("delete release write lock"),t()}}async has(e){this.log.trace("has await read lock");let t=await this.store.lock.readLock();this.log.trace("has got read lock");try{return await this.store.has(e)}finally{this.log.trace("has release read lock"),t()}}async get(e){this.log.trace("get await read lock");let t=await this.store.lock.readLock();this.log.trace("get got read lock");try{return await this.store.load(e)}finally{this.log.trace("get release read lock"),t()}}async save(e,t){this.log.trace("save await write lock");let n=await this.store.lock.writeLock();this.log.trace("save got write lock");try{let o=await this.store.save(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("save release write lock"),n()}}async patch(e,t){this.log.trace("patch await write lock");let n=await this.store.lock.writeLock();this.log.trace("patch got write lock");try{let o=await this.store.patch(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("patch release write lock"),n()}}async merge(e,t){this.log.trace("merge await write lock");let n=await this.store.lock.writeLock();this.log.trace("merge got write lock");try{let o=await this.store.merge(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("merge release write lock"),n()}}async consumePeerRecord(e,t){let n=await Sr.openAndCertify(e,zt.DOMAIN),o=vn(n.publicKey.toCID());if(t?.equals(o)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,o),!1;let i=zt.createFromProtobuf(n.payload),s;try{s=await this.get(o)}catch(a){if(a.name!=="NotFoundError")throw a}if(s?.peerRecordEnvelope!=null){let a=await Sr.createFromProtobuf(s.peerRecordEnvelope),c=zt.createFromProtobuf(a.payload);if(c.seqNumber>=i.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",c.seqNumber,i.seqNumber),!1}return await this.patch(i.peerId,{peerRecordEnvelope:e,addresses:i.multiaddrs.map(a=>({isCertified:!0,multiaddr:a}))}),!0}#e(e,t){t.updated&&(this.peerId.equals(e)?this.events.safeDispatchEvent("self:peer:update",{detail:t}):this.events.safeDispatchEvent("peer:update",{detail:t}))}};function Eb(r,e={}){return new W3(r,e)}function vb(r,e){let t;return function(){let n=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(n,e)}}var WC=r=>r;function z3(r,e){let t=r.getPeerId();return t!=null&&Re(t).equals(e)&&(r=r.decapsulate(Q(`/p2p/${e.toString()}`))),r}var Sh=class{log;components;listen;announce;observed;announceFilter;constructor(e,t={}){let{listen:n=[],announce:o=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(i=>i.toString()),this.announce=new Set(o.map(i=>i.toString())),this.observed=new Map,this.announceFilter=t.announceFilter??WC,this._updatePeerStoreAddresses=vb(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}[Symbol.toStringTag]="@libp2p/address-manager";_updatePeerStoreAddresses(){let e=this.getAnnounceAddrs().concat(this.components.transportManager.getAddrs()).concat([...this.observed.entries()].filter(([t,n])=>n.confident).map(([t])=>Q(t))).map(t=>t.getPeerId()===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>Q(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>Q(e))}getObservedAddrs(){return Array.from(this.observed).map(([e])=>Q(e))}addObservedAddr(e){e=z3(e,this.components.peerId);let t=e.toString();this.observed.has(t)||this.observed.set(t,{confident:!1})}confirmObservedAddr(e){e=z3(e,this.components.peerId);let t=e.toString(),o=(this.observed.get(t)??{confident:!1}).confident;this.observed.set(t,{confident:!0}),o||this._updatePeerStoreAddresses()}removeObservedAddr(e){e=z3(e,this.components.peerId);let t=e.toString();this.observed.delete(t)}getAddresses(){let e=this.getAnnounceAddrs().map(n=>n.toString());e.length===0&&(e=this.components.transportManager.getAddrs().map(n=>n.toString())),e=e.concat(Array.from(this.observed).filter(([n,o])=>o.confident).map(([n])=>n));let t=new Set(e);return this.announceFilter(Array.from(t).map(n=>Q(n))).map(n=>n.protos().pop()?.path===!0||n.getPeerId()===this.components.peerId.toString()?n:n.encapsulate(`/p2p/${this.components.peerId.toString()}`))}};var Sb;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(Sb||(Sb={}));var Ah=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},Ih=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},fa=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},rl=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},_h=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},Th=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},kh=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},nl=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},Bi=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},Ch=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},Ph=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},Oi=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Mi=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Rh=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}};var G3=class{components={};_started=!1;constructor(e={}){this.components={};for(let[t,n]of Object.entries(e))this.components[t]=n;this.components.logger==null&&(this.components.logger=ko())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>gl(t)).map(async t=>{await t[e]?.()}))}async beforeStart(){await this._invokeStartableMethod("beforeStart")}async start(){await this._invokeStartableMethod("start"),this._started=!0}async afterStart(){await this._invokeStartableMethod("afterStart")}async beforeStop(){await this._invokeStartableMethod("beforeStop")}async stop(){await this._invokeStartableMethod("stop"),this._started=!1}async afterStop(){await this._invokeStartableMethod("afterStop")}},GC=["metrics","connectionProtector","dns"],QC=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function Ab(r={}){let e=new G3(r);return new Proxy(e,{get(n,o,i){if(typeof o=="string"&&!QC.includes(o)){let s=e.components[o];if(s==null&&!GC.includes(o))throw new Ah(`${o} not set`);return s}return Reflect.get(n,o,i)},set(n,o,i){return typeof o=="string"?e.components[o]=i:Reflect.set(n,o,i),!0}})}function Ib(r){let e={};for(let t of Object.values(r.components))for(let n of YC(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of XC(t))if(e[n]!==!0)throw new Ih(`Service "${jC(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function YC(r){return Array.isArray(r?.[Ie])?r[Ie]:[]}function XC(r){return Array.isArray(r?.[Vr])?r[Vr]:[]}function jC(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function _b(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{let t=e.stringTuples();return t[0][0]===4||t[0][0]===41?!!Bt(`${t[0][1]}`):!1},denyInboundConnection:async()=>!1,denyOutboundConnection:async()=>!1,denyInboundEncryptedConnection:async()=>!1,denyOutboundEncryptedConnection:async()=>!1,denyInboundUpgradedConnection:async()=>!1,denyOutboundUpgradedConnection:async()=>!1,filterMultiaddrForPeer:async()=>!0,...r}}function Lh(r){if(cl(r))return{peerId:r,multiaddrs:[]};Array.isArray(r)||(r=[r]);let e;if(r.length>0){let t=r[0].getPeerId();e=t==null?void 0:Re(t),r.forEach(n=>{if(!Bo(n))throw new hn("Invalid multiaddr");let o=n.getPeerId();if(o==null){if(e!=null)throw new C("Multiaddrs must all have the same peer id or have no peer id")}else{let i=Re(o);if(e?.equals(i)!==!0)throw new C("Multiaddrs must all have the same peer id or have no peer id")}})}return{peerId:e,multiaddrs:r}}var ZC=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function Tb(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??ZC;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}var kb="last-dial-failure",Cb="last-dial-success";var Dh=100,Nh=50;var Pb={maxConnections:Dh,allow:[]},Bh=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??Pb.maxConnections,this.allow=t.allow??Pb.allow,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),this.maybePruneConnections=this.maybePruneConnections.bind(this)}start(){this.events.addEventListener("connection:open",this.maybePruneConnections)}stop(){this.events.removeEventListener("connection:open",this.maybePruneConnections)}maybePruneConnections(){this._maybePruneConnections().catch(e=>{this.log.error("error while pruning connections %e",e)})}async _maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length;if(this.log("checking max connections limit %d/%d",t,this.maxConnections),t<=this.maxConnections)return;let n=new gt;for(let a of e){let c=a.remotePeer;if(!n.has(c)){n.set(c,0);try{let l=await this.peerStore.get(c);n.set(c,[...l.tags.values()].reduce((d,u)=>d+u.value,0))}catch(l){l.name!=="NotFoundError"&&this.log.error("error loading peer tags",l)}}}let o=this.sortConnections(e,n),i=Math.max(t-this.maxConnections,0),s=[];for(let a of o)if(this.log("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(l=>a.remoteAddr.toString().startsWith(l.toString()))||s.push(a),s.length===i)break;await Promise.all(s.map(async a=>{await Tb(a,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:s})}sortConnections(e,t){return e.sort((n,o)=>{let i=n.timeline.open,s=o.timeline.open;return i<s?1:i>s?-1:0}).sort((n,o)=>n.direction==="outbound"&&o.direction==="inbound"?1:n.direction==="inbound"&&o.direction==="outbound"?-1:0).sort((n,o)=>n.streams.length>o.streams.length?1:n.streams.length<o.streams.length?-1:0).sort((n,o)=>{let i=t.get(n.remotePeer)??0,s=t.get(o.remotePeer)??0;return i>s?1:i<s?-1:0})}};var Oh=class extends Mt{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};function Q3(r){try{let{address:e}=r.nodeAddress();return!!Bt(e)}catch{return!0}}function JC(r,e){let t=Vp.exactMatch(r.multiaddr),n=Vp.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=Ps.exactMatch(r.multiaddr),i=Ps.exactMatch(e.multiaddr);if(o&&!i)return-1;if(!o&&i)return 1;let s=Ec.exactMatch(r.multiaddr),a=Ec.exactMatch(e.multiaddr);if(s&&!a)return-1;if(!s&&a)return 1;let c=Sc.exactMatch(r.multiaddr),l=Sc.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let d=vc.exactMatch(r.multiaddr),u=vc.exactMatch(e.multiaddr);if(d&&!u)return-1;if(!d&&u)return 1;let f=Ei.exactMatch(r.multiaddr),h=Ei.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function eP(r,e){let t=Q3(r.multiaddr),n=Q3(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function tP(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function rP(r,e){let t=ir.exactMatch(r.multiaddr),n=ir.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Rb(r){return r.sort(JC).sort(tP).sort(rP).sort(eP)}async function Lb(r,e){let t=!1;for(let o of Ls.keys())if(t=r.protoNames().includes(o),t)break;if(!t)return[r];let n=await r.resolve(e);return e.log("resolved %s to",r,n.map(o=>o.toString())),n}var Mh={maxParallelDials:Nh,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:5e3,resolvers:{dnsaddr:Ni}},Uh=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??Mh.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??Mh.maxDialQueueLength,this.dialTimeout=t.dialTimeout??Mh.dialTimeout,this.connections=t.connections??new gt,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,$(1/0,this.shutDownController.signal);for(let[n,o]of Object.entries(t.resolvers??{}))Ls.set(n,o);this.queue=new Oh({concurrency:t.maxParallelDials??Mh.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{n.detail.name!==ht.name&&this.log.error("error in dial queue - %e",n.detail)})}start(){this.shutDownController=new AbortController,$(1/0,this.shutDownController.signal)}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=Lh(e),i=Array.from(this.connections.values()).flat().find(a=>t.force===!0?!1:a.remotePeer.equals(n)?!0:o.find(c=>c.equals(a.remoteAddr)));if(i?.status==="open")return this.log("already connected to %a",i.remoteAddr),t.onProgress?.(new H("dial-queue:already-connected")),i;let s=this.queue.queue.find(a=>{if(n?.equals(a.options.peerId)===!0)return!0;let c=a.options.multiaddrs;if(c==null)return!1;for(let l of o)if(c.has(l.toString()))return!0;return!1});if(s!=null){this.log("joining existing dial target for %p",n);for(let a of o)s.options.multiaddrs.add(a.toString());return t.onProgress?.(new H("dial-queue:already-in-dial-queue")),s.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new Dn("Dial queue is full");return this.log("creating dial target for %p",n,o.map(a=>a.toString())),t.onProgress?.(new H("dial-queue:add-to-dial-queue")),this.queue.add(async a=>{a?.onProgress?.(new H("dial-queue:start-dial"));let c=this.createDialAbortController(a?.signal),l;try{l=await this.calculateMultiaddrs(n,a?.multiaddrs,{...a,signal:c}),a?.onProgress?.(new H("dial-queue:calculated-addresses",l)),l.map(({multiaddr:d})=>d.toString()).forEach(d=>{a?.multiaddrs.add(d)})}catch(d){throw c.clear(),d}try{let d=0,u=[];for(let f of l){if(d===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",d,n),new Dn("Peer had more than maxPeerAddrsToDial");d++;try{let h=await this.components.transportManager.dial(f.multiaddr,{...a,signal:c});this.log("dial to %a succeeded",f.multiaddr);try{await this.components.peerStore.merge(h.remotePeer,{multiaddrs:[h.remoteAddr],metadata:{[Cb]:M(Date.now().toString())}})}catch(p){this.log.error("could not update last dial failure key for %p",n,p)}return h}catch(h){if(this.log.error("dial failed to %a",f.multiaddr,h),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[kb]:M(Date.now().toString())}})}catch(p){this.log.error("could not update last dial failure key for %p",n,p)}if(c.aborted)throw new Ur(h.message);u.push(h)}}throw u.length===1?u[0]:new AggregateError(u,"All multiaddr dials failed")}finally{c.clear()}},{peerId:n,priority:t.priority??Z3,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal,onProgress:t.onProgress})}createDialAbortController(e){let t=he([AbortSignal.timeout(this.dialTimeout),this.shutDownController.signal,e]);return $(1/0,t),t}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(u=>({multiaddr:Q(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Dn("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new nl("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let u=await this.components.peerStore.get(e);o.push(...u.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(u){if(u.name!=="NotFoundError")throw u}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let u=await this.components.peerRouting.findPeer(e);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:f})=>f.toString())),o.push(...u.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(u){u.name!=="NoPeerRoutersError"&&this.log.error("looking up multiaddrs for %p in the peer routing failed",e,u)}}}let i=(await Promise.all(o.map(async u=>{let f=await Lb(u.multiaddr,{dns:this.components.dns,...n,log:this.log});return f.length===1&&f[0].equals(u.multiaddr)?u:f.map(h=>({multiaddr:h,isCertified:!1}))}))).flat();if(e!=null){let u=`/p2p/${e.toString()}`;i=i.map(f=>f.multiaddr.protos().pop()?.path===!0?f:f.multiaddr.getPeerId()==null?{multiaddr:f.multiaddr.encapsulate(u),isCertified:f.isCertified}:f)}let s=i.filter(u=>{if(this.components.transportManager.dialTransportForMultiaddr(u.multiaddr)==null)return!1;let f=u.multiaddr.getPeerId();return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let u of s){let f=u.multiaddr.toString(),h=a.get(f);if(h!=null){h.isCertified=h.isCertified||u.isCertified||!1;continue}a.set(f,u)}let c=[...a.values()];if(c.length===0)throw new Bi("The dial request has no valid addresses");let l=[];for(let u of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(u.multiaddr)||l.push(u);let d=this.addressSorter==null?Rb(l):l.sort(this.addressSorter);if(d.length===0)throw new nl("The connection gater denied all addresses in the dial request");return this.log.trace("addresses for %p before filtering",e??"unknown peer",i.map(({multiaddr:u})=>u.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",d.map(({multiaddr:u})=>u.toString())),d}async isDialable(e,t={}){Array.isArray(e)||(e=[e]);try{let n=await this.calculateMultiaddrs(void 0,new Set(e.map(o=>o.toString())),t);return t.runOnLimitedConnection===!1?n.find(o=>!ir.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var Fb=fr(Mb(),1);var oP=Object.prototype.toString,iP=r=>oP.call(r)==="[object Error]",sP=new Set(["network error","Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Load failed","Network request failed","fetch failed","terminated"]);function J3(r){return r&&iP(r)&&r.name==="TypeError"&&typeof r.message=="string"?r.message==="Load failed"?r.stack===void 0:sP.has(r.message):!1}var e4=class extends Error{constructor(e){super(),e instanceof Error?(this.originalError=e,{message:e}=e):(this.originalError=new Error(e),this.originalError.stack=this.stack),this.name="AbortError",this.message=e}},Ub=(r,e,t)=>{let n=t.retries-(e-1);return r.attemptNumber=e,r.retriesLeft=n,r};async function t4(r,e){return new Promise((t,n)=>{e={onFailedAttempt(){},retries:10,shouldRetry:()=>!0,...e};let o=Fb.default.operation(e),i=()=>{o.stop(),n(e.signal?.reason)};e.signal&&!e.signal.aborted&&e.signal.addEventListener("abort",i,{once:!0});let s=()=>{e.signal?.removeEventListener("abort",i),o.stop()};o.attempt(async a=>{try{let c=await r(a);s(),t(c)}catch(c){try{if(!(c instanceof Error))throw new TypeError(`Non-error was thrown: "${c}". You should only throw errors.`);if(c instanceof e4)throw c.originalError;if(c instanceof TypeError&&!J3(c))throw c;if(Ub(c,a,e),await e.shouldRetry(c)||(o.stop(),n(c)),await e.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){Ub(l,a,e),s(),n(l)}}})})}var Fh=class{log;queue;started;peerStore;retries;retryInterval;backoffFactor;connectionManager;events;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:reconnect-queue"),this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.queue=new Ut({concurrency:t.maxParallelReconnects??5,metricName:"libp2p_reconnect_queue",metrics:e.metrics}),this.started=!1,this.retries=t.retries??5,this.backoffFactor=t.backoffFactor,this.retryInterval=t.retryInterval,this.events=e.events,e.events.addEventListener("peer:disconnect",n=>{this.maybeReconnect(n.detail).catch(o=>{this.log.error("failed to maybe reconnect to %p - %e",n.detail,o)})})}async maybeReconnect(e){if(!this.started)return;let t=await this.peerStore.get(e);$b(t)&&(this.queue.has(e)||this.queue.add(async n=>{await t4(async o=>{if(this.started)try{await this.connectionManager.openConnection(e,{signal:n?.signal})}catch(i){throw this.log("reconnecting to %p attempt %d of %d failed - %e",e,o,this.retries,i),i}},{signal:n?.signal,retries:this.retries,factor:this.backoffFactor,minTimeout:this.retryInterval})},{peerId:e}).catch(async n=>{this.log.error("failed to reconnect to %p - %e",e,n);let o={};[...t.tags.keys()].forEach(i=>{i.startsWith(so)&&(o[i]=void 0)}),await this.peerStore.merge(e,{tags:o}),this.events.safeDispatchEvent("peer:reconnect-failure",{detail:e})}).catch(async n=>{this.log.error("failed to remove keep-alive tag from %p - %e",e,n)}))}start(){this.started=!0}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>$b(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)})}stop(){this.started=!1,this.queue.abort()}};function $b(r){for(let e of r.tags.keys())if(e.startsWith(so))return!0;return!1}var Z3=50,r4={maxConnections:Dh,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},$h=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;outboundPendingConnections;maxConnections;dialQueue;reconnectQueue;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;peerId;constructor(e,t={}){if(this.maxConnections=t.maxConnections??r4.maxConnections,this.maxConnections<1)throw new C("Connection Manager maxConnections must be greater than 0");this.connections=new gt,this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.metrics=e.metrics,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager"),this.onConnect=this.onConnect.bind(this),this.onDisconnect=this.onDisconnect.bind(this),this.allow=(t.allow??[]).map(n=>Q(n)),this.deny=(t.deny??[]).map(n=>Q(n)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??r4.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new aa({points:t.inboundConnectionThreshold??r4.inboundConnectionThreshold,duration:1}),this.connectionPruner=new Bh({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:this.allow}),this.dialQueue=new Uh(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??Nh,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??5e3,resolvers:t.resolvers??{dnsaddr:Ni},connections:this.connections}),this.reconnectQueue=new Fh({events:e.events,peerStore:e.peerStore,logger:e.logger,connectionManager:this},{retries:t.reconnectRetries,retryInterval:t.reconnectRetryInterval,backoffFactor:t.reconnectBackoffFactor,maxParallelReconnects:t.maxParallelReconnects})}[Symbol.toStringTag]="@libp2p/connection-manager";async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,"inbound pending":this.incomingPendingConnections,outbound:0,"outbound pending":this.outboundPendingConnections};for(let t of this.connections.values())for(let n of t)e[n.direction]++;return e}}),this.metrics?.registerMetricGroup("libp2p_protocol_streams_total",{label:"protocol",calculate:()=>{let e={};for(let t of this.connections.values())for(let n of t)for(let o of n.streams){let i=`${o.direction} ${o.protocol??"unnegotiated"}`;e[i]=(e[i]??0)+1}return e}}),this.metrics?.registerMetricGroup("libp2p_connection_manager_protocol_streams_per_connection_90th_percentile",{label:"protocol",calculate:()=>{let e={};for(let n of this.connections.values())for(let o of n){let i={};for(let s of o.streams){let a=`${s.direction} ${s.protocol??"unnegotiated"}`;i[a]=(i[a]??0)+1}for(let[s,a]of Object.entries(i))e[s]=e[s]??[],e[s].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((s,a)=>s-a);let i=Math.floor(o.length*.9);t[n]=o[i]}return t}}),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),await wt(this.dialQueue,this.reconnectQueue,this.connectionPruner),this.started=!0,this.log("started")}async stop(){this.events.removeEventListener("connection:open",this.onConnect),this.events.removeEventListener("connection:close",this.onDisconnect),await Tt(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push((async()=>{try{await n.close()}catch(o){this.log.error(o)}})());this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}onConnect(e){this._onConnect(e).catch(t=>{this.log.error(t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}if(t.status!=="open")return;let n=t.remotePeer,o=!this.connections.has(n),i=this.connections.get(n)??[];i.push(t),this.connections.set(n,i),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),o&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e,n=t.remotePeer,i=(this.connections.get(n)??[]).filter(s=>s.id!==t.id);this.connections.set(n,i),i.length===0&&(this.log("onDisconnect remove all connections for peer %p",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:t.remotePeer}))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let t=[];for(let n of this.connections.values())t=t.concat(n);return t}getConnectionsMap(){return this.connections}async openConnection(e,t={}){if(!this.started)throw new Fr("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n}=Lh(e);if(this.peerId.equals(n))throw new Ki("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>c.limits==null);if(a!=null)return this.log("had an existing non-limited connection to %p",n),t.onProgress?.(new H("dial-queue:already-connected")),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??Z3});if(o.status!=="open")throw new $i("Remote closed connection during opening");let i=this.connections.get(o.remotePeer);i==null&&(i=[],this.connections.set(o.remotePeer,i));let s=!1;for(let a of i)if(a.id===o.id&&(s=!0),t.force!==!0&&a.id!==o.id&&a.remoteAddr.equals(o.remoteAddr))return o.abort(new hn("Duplicate multiaddr connection")),a;return s||i.push(o),o}finally{this.outboundPendingConnections--}}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await o.close(t)}catch(i){o.abort(i)}}))}async acceptIncomingConnection(e){if(this.deny.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let o=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(o,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>Q(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var lP=1e4,uP="1.0.0",dP="ping",fP="ipfs",Vb=32,hP=!0,Vh=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??fP}/${dP}/${uP}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??lP,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??hP,this.timeout=new cn({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[Ie]=["@libp2p/connection-monitor"];start(){this.abortController=new AbortController,$(1/0,this.abortController.signal),this.heartbeatInterval=setInterval(()=>{this.components.connectionManager.getConnections().forEach(e=>{Promise.resolve().then(async()=>{let t=Date.now();try{let n=this.timeout.getTimeoutSignal({signal:this.abortController?.signal}),o=await e.newStream(this.protocol,{signal:n,runOnLimitedConnection:!0}),i=Ai(o);t=Date.now(),await Promise.all([i.write(Kt(Vb),{signal:n}),i.read(Vb,{signal:n})]),e.rtt=Date.now()-t,await i.unwrap().close({signal:n})}catch(n){if(n.name!=="UnsupportedProtocolError")throw n;e.rtt=(Date.now()-t)/2}}).catch(t=>{this.log.error("error during heartbeat",t),this.abortConnectionOnPingFailure?(this.log.error("aborting connection due to ping failure"),e.abort(t)):this.log("connection ping failed, but not aborting due to abortConnectionOnPingFailure flag")})})},this.pingIntervalMs)}stop(){this.abortController?.abort(),this.heartbeatInterval!=null&&clearInterval(this.heartbeatInterval)}};var Kh=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e}[Symbol.toStringTag]="@libp2p/content-routing";isStarted(){return this.started}async start(){this.started=!0}async stop(){this.started=!1}async*findProviders(e,t={}){if(this.routers.length===0)throw new fa("No content routers available");let n=this,o=new nr;for await(let i of $t(...n.routers.map(s=>s.findProviders(e,t))))i!=null&&(i.multiaddrs.length>0&&await this.components.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id)&&(o.add(i.id),yield i))}async provide(e,t={}){if(this.routers.length===0)throw new fa("No content routers available");await Promise.all(this.routers.map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){if(this.routers.length===0)throw new fa("No content routers available");await Promise.all(this.routers.map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new Fr;await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new Fr;return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var Hh=class{log;peerId;peerStore;routers;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-routing"),this.peerId=e.peerId,this.peerStore=e.peerStore,this.routers=t.routers??[]}[Symbol.toStringTag]="@libp2p/peer-routing";async findPeer(e,t){if(this.routers.length===0)throw new rl("No peer routers available");if(e.toString()===this.peerId.toString())throw new _h("Should not try to find self");let n=this,o=$t(...this.routers.map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),i;throw new Oe}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new rl("No peer routers available");let n=this,o=Sn(1024);for await(let i of vr(async function*(){let s=$t(...n.routers.map(a=>a.getClosestPeers(e,t)));for await(let a of s)yield async()=>{if(a.multiaddrs.length===0)try{a=await n.findPeer(a.id,{...t,useCache:!1})}catch(c){n.log.error("could not find peer multiaddrs",c);return}return a}}()))i!=null&&(i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id.toMultihash().bytes)&&(o.add(i.id.toMultihash().bytes),yield i))}};var qh=class extends ge{peerRouting;log;walking;walkers;shutdownController;walkController;needNext;constructor(e){super(),this.log=e.logger.forComponent("libp2p:random-walk"),this.peerRouting=e.peerRouting,this.walkers=0,this.walking=!1,this.shutdownController=new AbortController,$(1/0,this.shutdownController.signal)}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,$(1/0,this.shutdownController.signal)}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=he([this.shutdownController.signal,e?.signal]);$(1/0,t);try{for(;;)this.needNext?.resolve(),this.needNext=J(),yield(await hr(this,"walk:peer",t,{errorEvent:"walk:error"})).detail}finally{t.clear(),this.walkers--,this.walkers===0&&(this.walkController?.abort(),this.walkController=void 0)}}startWalk(){this.walking=!0,this.walkController=new AbortController,$(1/0,this.walkController.signal);let e=he([this.walkController.signal,this.shutdownController.signal]);$(1/0,e);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=Kt(32),i=Date.now();for await(let s of this.peerRouting.getClosestPeers(o,{signal:e}))e.aborted&&this.log("aborting walk"),e.throwIfAborted(),this.log("found peer %p after %dms for %d walkers",s.id,Date.now()-i,this.walkers),n++,this.safeDispatchEvent("walk:peer",{detail:s}),this.walkers===1&&this.needNext!=null&&(this.log("wait for need next"),await Ce(this.needNext.promise,e)),i=Date.now();this.log("walk iteration for %b and %d walkers finished, found %d peers",o,this.walkers,n)}catch(o){this.log.error("randomwalk errored",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("randomwalk errored",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var n4=32,o4=64,Wh=class{log;topologies;handlers;components;constructor(e){this.log=e.logger.forComponent("libp2p:registrar"),this.topologies=new Map,this.handlers=new Map,this.components=e,this._onDisconnect=this._onDisconnect.bind(this),this._onPeerUpdate=this._onPeerUpdate.bind(this),this._onPeerIdentify=this._onPeerIdentify.bind(this),this.components.events.addEventListener("peer:disconnect",this._onDisconnect),this.components.events.addEventListener("peer:update",this._onPeerUpdate),this.components.events.addEventListener("peer:identify",this._onPeerIdentify)}[Symbol.toStringTag]="@libp2p/registrar";getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new Th(`No handler registered for protocol ${e}`);return t}getTopologies(e){let t=this.topologies.get(e);return t==null?[]:[...t.values()]}async handle(e,t,n){if(this.handlers.has(e))throw new kh(`Handler already registered for protocol ${e}`);let o=na.bind({ignoreUndefined:!0})({maxInboundStreams:n4,maxOutboundStreams:o4},n);this.handlers.set(e,{handler:t,options:o}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]})}async unhandle(e){(Array.isArray(e)?e:[e]).forEach(n=>{this.handlers.delete(n)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()})}async register(e,t){if(t==null)throw new C("invalid topology");let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,o=this.topologies.get(e);return o==null&&(o=new Map,this.topologies.set(e,o)),o.set(n,t),n}unregister(e){for(let[t,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(t))}_onDisconnect(e){let t=e.detail;this.components.peerStore.get(t).then(n=>{for(let o of n.protocols){let i=this.topologies.get(o);if(i!=null)for(let s of i.values())s.filter?.has(t)!==!1&&(s.filter?.remove(t),s.onDisconnect?.(t))}}).catch(n=>{n.name!=="NotFoundError"&&this.log.error("could not inform topologies of disconnecting peer %p",t,n)})}_onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(i=>!t.protocols.includes(i));for(let i of o){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())a.filter?.has(t.id)!==!1&&(a.filter?.remove(t.id),a.onDisconnect?.(t.id))}}_onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;for(let i of t){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),a.onConnect?.(o,n))}}};var zh=class{log;components;transports;listeners;faultTolerance;started;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:transports"),this.components=e,this.started=!1,this.transports=new Map,this.listeners=N1({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??ao.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new C("Transport must have a valid tag");if(this.transports.has(t))throw new C(`There is already a transport with the tag ${t}`);this.log("adding transport %s",t),this.transports.set(t,e),this.listeners.has(t)||this.listeners.set(t,[])}isStarted(){return this.started}start(){this.started=!0}async afterStart(){let e=this.components.addressManager.getListenAddrs();await this.listen(e)}async stop(){let e=[];for(let[t,n]of this.listeners)for(this.log("closing listeners for %s",t);n.length>0;){let o=n.pop();o!=null&&e.push(o.close())}await Promise.all(e),this.log("all listeners closed");for(let t of this.listeners.keys())this.listeners.set(t,[]);this.started=!1}async dial(e,t){let n=this.dialTransportForMultiaddr(e);if(n==null)throw new Rh(`No transport available for address ${String(e)}`);return t?.onProgress?.(new H("transport-manager:selected-transport",n[Symbol.toStringTag])),n.dial(e,{...t,upgrader:this.components.upgrader})}getAddrs(){let e=[];for(let t of this.listeners.values())for(let n of t)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}getListeners(){return Array.of(...this.listeners.values()).flat()}dialTransportForMultiaddr(e){for(let t of this.transports.values())if(t.dialFilter([e]).length>0)return t}listenTransportForMultiaddr(e){for(let t of this.transports.values())if(t.listenFilter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new Fr("Not started");if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t=[];for(let[n,o]of this.transports.entries()){let i=o.listenFilter(e),s=[];for(let l of i){this.log("creating listener for %s on %a",n,l);let d=o.createListener({upgrader:this.components.upgrader}),u=this.listeners.get(n)??[];u==null&&(u=[],this.listeners.set(n,u)),u.push(d),d.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:d})}),d.addEventListener("close",()=>{let f=u.findIndex(h=>h===d);u.splice(f,1),this.components.events.safeDispatchEvent("transport:close",{detail:d})}),s.push(d.listen(l))}if(s.length===0){t.push(n);continue}if((await Promise.allSettled(s)).find(l=>l.status==="fulfilled")==null&&this.faultTolerance!==ao.NO_FATAL)throw new Bi(`Transport (${n}) could not listen on any available address`)}if(t.length===this.transports.size){let n=`no valid addresses were provided for transports [${t.join(", ")}]`;if(this.faultTolerance===ao.FATAL_ALL)throw new Bi(n);this.log(`libp2p in dial mode only: ${n}`)}}async remove(e){let t=this.listeners.get(e)??[];this.log.trace("removing transport %s",e);let n=[];for(this.log.trace("closing listeners for %s",e);t.length>0;){let o=t.pop();o!=null&&n.push(o.close())}await Promise.all(n),this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let t of this.transports.keys())e.push(this.remove(t));await Promise.all(e)}};var _t="/multistream/1.0.0";var pP=M(`
39
+ `);async function Fi(r,e,t){await r.write(e,t)}async function Kb(r,e,t){await r.writeV(e,t)}async function mP(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==pP[0])throw e.log.error("Invalid mss message - missing newline",t),new de("Missing newline");return t.sublist(0,-1)}async function Go(r,e){let t=await mP(r,e);return V(t.subarray())}async function ol(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return gP(r,e[0],t);let n=Tn(r,{...t,maxDataLength:1024}),o=e.shift();if(o==null)throw new Error("At least one protocol must be specified");t.log.trace('select: write ["%s", "%s"]',_t,o);let i=M(`${_t}
40
+ `),s=M(`${o}
41
+ `);await Kb(n,[i,s],t),t.log.trace("select: reading multistream-select header");let a=await Go(n,t);if(t.log.trace('select: read "%s"',a),a===_t&&(t.log.trace("select: reading protocol response"),a=await Go(n,t),t.log.trace('select: read "%s"',a)),a===o)return{stream:n.unwrap(),protocol:o};for(let c of e){t.log.trace('select: write "%s"',c),await Fi(n,M(`${c}
42
+ `),t),t.log.trace("select: reading protocol response");let l=await Go(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new Ln("protocol selection failed")}function gP(r,e,t){let n=r.sink.bind(r),o=r.source,i=!1,s=!1,a=J(),c=!1,l=!1,d=J(),u=!1,f=!1,h=J(),p=Tn({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async b=>{let{sink:w}=p.unwrap();await w(async function*(){let x=!1;for await(let T of b){if(l&&await d.promise,c)yield T;else{l=!0,t.log.trace('optimistic: write ["%s", "%s", data(%d)] in sink',_t,e,T.byteLength);let k=`${e}
43
+ `;yield new le(Uint8Array.from([19]),M(`${_t}
44
+ `),Ke(k.length),M(k),T).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',_t,e,T.byteLength),c=!0,l=!1,d.resolve(),m().catch(v=>{t.log.error("could not finish optimistic protocol negotiation of %s",e,v)})}x=!0}x||await m()}())};async function m(){if(s){t.log.trace("optimistic: already negotiating %s stream",e),await a.promise;return}s=!0;try{c||(t.log.trace("optimistic: doing send protocol for %s stream",e),await g()),u||(t.log.trace("optimistic: doing read protocol for %s stream",e),await y())}finally{s=!1,i=!0,a.resolve()}}async function g(){if(l){await d.promise;return}l=!0;try{t.log.trace('optimistic: write ["%s", "%s", data] in source',_t,e),await p.writeV([M(`${_t}
45
+ `),M(`${e}
46
+ `)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',_t,e)}finally{c=!0,l=!1,d.resolve()}}async function y(){if(f){await h.promise;return}f=!0;try{t.log.trace("optimistic: reading multistream select header");let b=await Go(p,t);if(t.log.trace('optimistic: read multistream select header "%s"',b),b===_t&&(b=await Go(p,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',b,e),b!==e)throw new Ln("protocol selection failed")}finally{u=!0,f=!1,h.resolve()}}if(r.source=async function*(){await m(),t.log.trace('optimistic: reading data from "%s" stream',e),yield*p.unwrap().source}(),r.closeRead!=null){let b=r.closeRead.bind(r);r.closeRead=async w=>{i||await m().catch(x=>{t.log.error("could not negotiate protocol before close read",x)}),await b(w)}}if(r.closeWrite!=null){let b=r.closeWrite.bind(r);r.closeWrite=async w=>{i||await m().catch(x=>{t.log.error("could not negotiate protocol before close write",x)}),await b(w)}}if(r.close!=null){let b=r.close.bind(r);r.close=async w=>{let x=[];l&&x.push(d.promise),f&&x.push(h.promise),x.length>0?await Ce(Promise.all(x),w?.signal):(i=!0,s=!1,a.resolve()),await b(w)}}return{stream:r,protocol:e}}async function il(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=Tn(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await Go(n,t);if(t.log.trace('handle: read "%s"',o),o===_t){t.log.trace('handle: respond with "%s" for "%s"',_t,o),await Fi(n,M(`${_t}
47
+ `),t),t.log.trace('handle: responded with "%s" for "%s"',_t,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await Fi(n,M(`${o}
48
+ `),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let i=new le(...e.map(s=>Yt.single(M(`${s}
49
+ `))),M(`
50
+ `));t.log.trace('handle: respond with "%s" for %s',e,o),await Fi(n,i,t),t.log.trace('handle: responded with "%s" for %s',e,o);continue}t.log.trace('handle: respond with "na" for "%s"',o),await Fi(n,M(`na
51
+ `),t),t.log('handle: responded with "na" for "%s"',o)}}var wP=500,s4=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;limits;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:o,close:i,abort:s,getStreams:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=t,this.remotePeer=n,this.direction=e.direction,this.status="open",this.timeline=e.timeline,this.multiplexer=e.multiplexer,this.encryption=e.encryption,this.limits=e.limits,this.log=e.logger.forComponent(`libp2p:connection:${this.direction}:${this.id}`),this.remoteAddr.getPeerId()==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),this._newStream=o,this._close=i,this._abort=s,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[m4]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new dl("the connection is being closed");if(this.status==="closed")throw new $i("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new Hi("Cannot open protocol stream on limited connection");let n=await this._newStream(e,t);return n.direction="outbound",n}async close(e={}){if(!(this.status==="closed"||this.status==="closing")){if(this.log("closing connection to %a",this.remoteAddr),this.status="closing",e.signal==null){let t=AbortSignal.timeout(wP);$(1/0,t),e={...e,signal:t}}try{this.log.trace("closing underlying transport"),await this._close(e),this.log.trace("updating timeline with close time"),this.status="closed",this.timeline.close=Date.now()}catch(t){this.log.error("error encountered during graceful close of connection to %a",this.remoteAddr,t),this.abort(t)}}}abort(e){this.status!=="closed"&&(this.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this._abort(e),this.status="closed",this.timeline.close=Date.now())}};function qb(r){return new s4(r)}function EP(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return n4}function vP(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.name!=="UnhandledProtocolError")throw n}return t.maxOutboundStreams??o4}function Wb(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var Gh=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;outboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;constructor(e,t){this.components=e,this.connectionEncrypters=new Map,t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=new Map,t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??3e3,this.outboundUpgradeTimeout=t.outboundUpgradeTimeout??3e3,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??2e3,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??2e3,this.events=e.events,this.metrics={dials:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_total"),errors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dial_errors_total")}}[Symbol.toStringTag]="@libp2p/upgrader";async shouldBlockConnection(e,...t){let n=this.components.connectionGater[e];if(n==null)return;if(await n.apply(this.components.connectionGater,t)===!0)throw new Ch(`The multiaddr connection is blocked by gater.${e}`)}async upgradeInbound(e,t={}){let n=!1;try{if(this.metrics.dials?.increment({inbound:!0}),n=await this.components.connectionManager.acceptIncomingConnection(e),!n)throw new Ph("connection denied");return await this.shouldBlockConnection("denyInboundConnection",e),await this._performUpgrade(e,"inbound",t)}catch(o){throw this.metrics.errors?.increment({inbound:!0}),o}finally{n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t={}){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getPeerId(),o;return n!=null&&(o=Re(n),await this.shouldBlockConnection("denyOutboundConnection",o,e)),await this._performUpgrade(e,"outbound",t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),n}}async _performUpgrade(e,t,n){let o,i,s,a,c,l=AbortSignal.timeout(t==="inbound"?this.inboundUpgradeTimeout:this.outboundUpgradeTimeout),d=he([l,n.signal]);$(1/0,l,d),n.signal=d,this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t);let u=e;if(n?.skipProtection!==!0){let f=this.components.connectionProtector;f!=null&&(e.log("protecting the %s connection",t),u=await f.protect(e,n))}try{if(o=u,n?.skipEncryption!==!0){n?.onProgress?.(new H(`upgrader:encrypt-${t}-connection`)),{conn:o,remotePeer:i,protocol:c}=await(t==="inbound"?this._encryptInbound(u,{...n,signal:d}):this._encryptOutbound(u,{...n,signal:d}));let f={...u,...o};await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",i,f)}else{let f=e.remoteAddr.getPeerId();if(f==null)throw new hn(`${t} connection that skipped encryption must have a peer id`);let h=Re(f);c="native",i=h}if(i.equals(this.components.peerId)){let f=new Ki("Can not dial self");throw e.abort(f),f}if(s=o,n?.muxerFactory!=null)a=n.muxerFactory;else if(this.streamMuxers.size>0){n?.onProgress?.(new H(`upgrader:multiplex-${t}-connection`));let f=await(t==="inbound"?this._multiplexInbound({...u,...o},this.streamMuxers,n):this._multiplexOutbound({...u,...o},this.streamMuxers,n));a=f.muxerFactory,s=f.stream}}catch(f){throw e.log.error("failed to upgrade inbound connection %s %a - %e",t==="inbound"?"from":"to",e.remoteAddr,f),f}finally{d.clear()}return await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",i,e),e.log("successfully upgraded %s connection",t),this._createConnection({cryptoProtocol:c,direction:t,maConn:e,upgradedConn:s,muxerFactory:a,remotePeer:i,limits:n?.limits})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:i,remotePeer:s,muxerFactory:a,limits:c}=e,l,d,u;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:p=>{u!=null&&Promise.resolve().then(async()=>{let m=this.components.registrar.getProtocols(),g=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);$(1/0,g);let{stream:y,protocol:b}=await il(p,m,{signal:g,log:p.log,yieldBytes:!1});if(u==null)return;u.log("incoming stream opened on %s",b);let w=EP(b,this.components.registrar);if(Wb(b,"inbound",u)===w){let T=new ml(`Too many inbound protocol streams for protocol "${b}" - limit ${w}`);throw p.abort(T),T}p.source=y.source,p.sink=y.sink,p.protocol=b,y.closeWrite!=null&&(p.closeWrite=y.closeWrite),y.closeRead!=null&&(p.closeRead=y.closeRead),y.close!=null&&(p.close=y.close),await this.components.peerStore.merge(s,{protocols:[b]}),this.components.metrics?.trackProtocolStream(p,u),this._onStream({connection:u,stream:p,protocol:b})}).catch(async m=>{u.log.error("error handling incoming stream id %s - %e",p.id,m),p.timeline.close==null&&await p.close()})}}),d=async(p,m={})=>{if(l==null)throw new Oi("Connection is not multiplexed");u.log.trace("starting new stream for protocols %s",p);let g=await l.newStream();u.log.trace("started new stream %s for protocols %s",g.id,p);try{if(m.signal==null){g.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",p);let T=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);$(1/0,T),m={...m,signal:T}}g.log.trace("selecting protocol from protocols %s",p);let{stream:y,protocol:b}=await ol(g,p,{...m,log:g.log,yieldBytes:!0});g.log.trace("selected protocol %s",b);let w=vP(b,this.components.registrar,m),x=Wb(b,"outbound",u);if(x>=w){let T=new lo(`Too many outbound protocol streams for protocol "${b}" - ${x}/${w}`);throw g.abort(T),T}return await this.components.peerStore.merge(s,{protocols:[b]}),g.source=y.source,g.sink=y.sink,g.protocol=b,y.closeWrite!=null&&(g.closeWrite=y.closeWrite),y.closeRead!=null&&(g.closeRead=y.closeRead),y.close!=null&&(g.close=y.close),this.components.metrics?.trackProtocolStream(g,u),g}catch(y){throw u.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",n==="inbound"?"from":"to",e.maConn.remoteAddr,p,y),g.timeline.close==null&&g.abort(y),y}},Promise.all([l.sink(i.source),i.sink(l.source)]).catch(p=>{u.log.error("error piping data through muxer - %e",p)}));let f=o.timeline;o.timeline=new Proxy(f,{set:(...p)=>(p[1]==="close"&&p[2]!=null&&f.close==null&&(async()=>{try{u.status==="open"&&await u.close()}catch(m){u.log.error("error closing connection after timeline close %e",m)}finally{this.events.safeDispatchEvent("connection:close",{detail:u})}})().catch(m=>{u.log.error("error thrown while dispatching connection:close event %e",m)}),Reflect.set(...p))}),o.timeline.upgraded=Date.now();let h=()=>{throw new Oi("Connection is not multiplexed")};return u=qb({remoteAddr:o.remoteAddr,remotePeer:s,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,limits:c,logger:this.components.logger,newStream:d??h,getStreams:()=>l?.streams??[],close:async p=>{await l?.close(p),await o.close(p)},abort:p=>{o.abort(p),l?.abort(p)}}),this.events.safeDispatchEvent("connection:open",{detail:u}),u.__maConnTimeline=f,u}_onStream(e){let{connection:t,stream:n,protocol:o}=e,{handler:i,options:s}=this.components.registrar.getHandler(o);if(t.limits!=null&&s.runOnLimitedConnection!==!0)throw new Hi("Cannot open protocol stream on limited connection");i({connection:t,stream:n})}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let{stream:o,protocol:i}=await il(e,n,{...t,log:e.log}),s=this.connectionEncrypters.get(i);if(s==null)throw new Mi(`no crypto module found for ${i}`);return e.log("encrypting inbound connection to %a using %s",e.remoteAddr,i),{...await s.secureInbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting inbound connection from %a failed",e.remoteAddr,o),new Mi(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:i}=await ol(e,n,{...t,log:e.log,yieldBytes:!0}),s=this.connectionEncrypters.get(i);if(s==null)throw new Mi(`no crypto module found for ${i}`);return e.log("encrypting outbound connection to %a using %s",e.remoteAddr,i),{...await s.secureOutbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting outbound connection to %a failed",e.remoteAddr,o),new Mi(o.message)}}async _multiplexOutbound(e,t,n){let o=Array.from(t.keys());e.log("outbound selecting muxer %s",o);try{e.log.trace("selecting stream muxer from %s",o);let{stream:i,protocol:s}=await ol(e,o,{...n,log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing outbound connection",i),new Oi(String(i))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{let{stream:i,protocol:s}=await il(e,o,{...n,log:e.log}),a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing inbound connection",i),new Oi(String(i))}}};var Qh=class extends ge{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new ge,n=t.dispatchEvent.bind(t);t.dispatchEvent=a=>{let c=n(a),l=this.dispatchEvent(new CustomEvent(a.type,{detail:a.detail}));return c||l},$(1/0,t),this.peerId=e.peerId,this.logger=e.logger??ko(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=this.components=Ab({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:e.nodeInfo??{name:mh,version:ph},logger:this.logger,events:t,datastore:e.datastore??new Si,connectionGater:_b(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",Eb(o,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),o.events.addEventListener("peer:update",a=>{if(a.detail.previous==null){let c={id:a.detail.peer.id,multiaddrs:a.detail.peer.addresses.map(l=>l.multiaddr)};o.events.safeDispatchEvent("peer:discovery",{detail:c})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(o)),this.components.upgrader=new Gh(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((a,c)=>this.configureComponent(`connection-encryption-${c}`,a(this.components))),streamMuxers:(e.streamMuxers??[]).map((a,c)=>this.configureComponent(`stream-muxers-${c}`,a(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,outboundUpgradeTimeout:e.connectionManager?.outboundUpgradeTimeout}),this.configureComponent("transportManager",new zh(this.components,e.transportManager)),this.configureComponent("connectionManager",new $h(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new Vh(this.components,e.connectionMonitor)),this.configureComponent("registrar",new Wh(this.components)),this.configureComponent("addressManager",new Sh(this.components,e.addresses));let i=(e.peerRouters??[]).map((a,c)=>this.configureComponent(`peer-router-${c}`,a(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new Hh(this.components,{routers:i}));let s=(e.contentRouters??[]).map((a,c)=>this.configureComponent(`content-router-${c}`,a(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new Kh(this.components,{routers:s})),this.configureComponent("randomWalk",new qh(this.components)),(e.peerDiscovery??[]).forEach((a,c)=>{this.configureComponent(`peer-discovery-${c}`,a(this.components)).addEventListener("peer",d=>{this.#e(d)})}),e.transports?.forEach((a,c)=>{this.components.transportManager.add(this.configureComponent(`transport-${c}`,a(this.components)))}),e.services!=null)for(let a of Object.keys(e.services)){let c=e.services[a],l=c(this.components);if(l==null){this.log.error("service factory %s returned null or undefined instance",a);continue}this.services[a]=l,this.configureComponent(a,l),l[ln]!=null&&(this.log("registering service %s for content routing",a),s.push(l[ln])),l[un]!=null&&(this.log("registering service %s for peer routing",a),i.push(l[un])),l[Qo]!=null&&(this.log("registering service %s for peer discovery",a),l[Qo].addEventListener?.("peer",d=>{this.#e(d)}))}Ib(o)}configureComponent(e,t){return t==null&&this.log.error("component %s was null or undefined",e),this.components[e]=t,t}async start(){if(this.status==="stopped"){this.status="starting",this.log("libp2p is starting");try{await this.components.beforeStart?.(),await this.components.start(),await this.components.afterStart?.(),this.status="started",this.safeDispatchEvent("start",{detail:this}),this.log("libp2p has started")}catch(e){throw this.log.error("An error occurred starting libp2p",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new nr;for(let t of this.components.connectionManager.getConnections())e.add(t.remotePeer);return Array.from(e)}async dial(e,t={}){return this.components.connectionManager.openConnection(e,{priority:75,...t})}async dialProtocol(e,t,n={}){if(t==null)throw new C("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new C("no protocols were provided to open a stream");return(await this.dial(e,n)).newStream(t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){Bo(e)&&(e=Re(e.getPeerId()??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let s=await this.peerStore.get(e);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.name!=="NotFoundError")throw s}let n=Pe([M("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),i=rt(o);return await this.peerStore.patch(e,{publicKey:i}),i}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async o=>{await this.components.registrar.handle(o,t,n)}))}async unhandle(e){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async t=>{await this.components.registrar.unhandle(t)}))}async register(e,t){return this.components.registrar.register(e,t)}unregister(e){this.components.registrar.unregister(e)}async isDialable(e,t={}){return this.components.connectionManager.isDialable(e,t)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error("peer discovery mechanism discovered self");return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function zb(r={}){r.privateKey??=await Hu("Ed25519");let e=new Qh({...await gb(r),peerId:L8(r.privateKey)});return r.start!==!1&&await e.start(),e}async function Gb(r){let e=r.libp2p?.privateKey,t=r.logger??ko(),n=new De("/pkcs8/self"),o;if(e==null&&r.datastore!=null)if(o=zf(r.keychain)({datastore:r.datastore,logger:t}),r.libp2p=r.libp2p??{},await r.datastore.has(n))r.libp2p.privateKey=await o.exportKey("self");else{let a=await Hu("Ed25519");r.libp2p.privateKey=a,await o.importKey("self",a)}let i=gh(r);return i.datastore=i.datastore??r.datastore,r=r??{},await zb({...i,...r.libp2p,start:!1})}async function SP(r={}){let e=r.datastore??new Si,t=r.blockstore??new Cc,n;AP(r.libp2p)?n=r.libp2p:n=await Gb({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new fd({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[nm(),Dp()],routers:r.routers??[mm(n),hm()],metrics:n.metrics});return r.start!==!1&&await o.start(),o}function AP(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return ax(IP);})();
52
52
  /*! Bundled license information:
53
53
 
54
54
  pvtsutils/build/index.js: