helia 5.3.0-c0bf36e → 5.3.0-daaa511
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 +97 -32
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +5 -5
- package/src/version.ts +1 -1
package/dist/index.min.js
CHANGED
|
@@ -1,22 +1,28 @@
|
|
|
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
|
|
3
|
-
`,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return g;function g(S,A,F){var L=this;if(!(L instanceof g))return new g(S,A,F);L.time=+S||0,L.nano=+A||0,L.year=+F||0,m(L)}function m(S){var A,F,L,U=S.year,K=S.time,C=S.nano,k=((C<0||a<=C)&&(C-=(F=Math.floor(C/a))*a,K+=F,F=1),U%e);return(K<-i||i<K||k)&&((A=l(K/o))&&(U+=A*e,K-=A*o),(L=y(K)).setUTCFullYear(k+L.getUTCFullYear()),L=(K=+L)+(A=l((U-=k)/e))*o,A&&-i<=L&&L<=i&&(U-=A*e,K=L),F=1),F&&(S.year=U,S.time=K,S.nano=C),S}function y(S){var A=new Date(0);return A.setTime(S),A}function x(U,L){U=+U||0;var F=l((L=(L|0)*s)/n)+l(U/n),L=L%n+U%n,U=l(L/n);return U&&(F+=U,L-=U*n),new g(1e3*L,0,F*e)}function w(S,A,F,L,U,K){return function(k,v){var _=m(this);k=k||new Array(8),M(k,v|=0);var T=Math.floor(_.time/1e3),_=_.year*(t*r/e),E=l(_/s)+l(T/s),_=_%s+T%s,T=Math.floor(_/s);return T&&(E+=T,_-=T*s),C(k,v+U,E),C(k,v+K,_),k};function C(k,v,E){k[v+S]=E>>24&255,k[v+A]=E>>16&255,k[v+F]=E>>8&255,k[v+L]=255&E}}function I(S,A,F,L,U,K){return function(k,v){M(k,v|=0);var E=C(k,v+U);return x(C(k,v+K),E)};function C(k,v){return 16777216*k[v+S]+(k[v+A]<<16|k[v+F]<<8|k[v+L])}}function M(S,A){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<A+8)throw new RangeError("Out of range")}function D(S){return(9<S?"":"0")+(0|S)}function R(S,A){return(c+(0|S)).substr(-A)}}()});var Ky=Ct((ise,$y)=>{"use strict";$y.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var Qy=Ct((Wy,Gy)=>{"use strict";var hf=Ky(),{hasOwnProperty:qy}=Object.prototype,{propertyIsEnumerable:Tk}=Object,ia=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),_k=Wy,Hy={concatArrays:!1,ignoreUndefined:!1},pf=r=>{let e=[];for(let t in r)qy.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)Tk.call(r,n)&&e.push(n)}return e};function sa(r){return Array.isArray(r)?Ck(r):hf(r)?kk(r):r}function Ck(r){let e=r.slice(0,0);return pf(r).forEach(t=>{ia(e,t,sa(r[t]))}),e}function kk(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return pf(r).forEach(t=>{ia(e,t,sa(r[t]))}),e}var zy=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?ia(r,o,$3(r[o],e[o],n)):ia(r,o,sa(e[o])))}),r),Pk=(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++)qy.call(i,a)&&(s.push(String(a)),i===r?ia(n,o++,i[a]):ia(n,o++,sa(i[a])));n=zy(n,i,pf(i).filter(a=>!s.includes(a)),t)}),n};function $3(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?Pk(r,e,t):!hf(e)||!hf(r)?sa(e):zy(r,e,pf(e),t)}Gy.exports=function(...r){let e=$3(sa(Hy),this!==_k&&this||{},Hy),t={_:{}};for(let n of r)if(n!==void 0){if(!hf(n))throw new TypeError("`"+n+"` is not an Option Object");t=$3(t,{_:n},e)}return t._}});var Zy=Ct((ase,Xy)=>{"use strict";function Rk(r){return r>=55296&&r<=56319}function Dk(r){return r>=56320&&r<=57343}Xy.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],Rk(s)&&Dk(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=Ct((cse,jy)=>{"use strict";function Lk(r){return r>=55296&&r<=56319}function Nk(r){return r>=56320&&r<=57343}jy.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),Nk(o)?i!=null&&Lk(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 tw=Ct((lse,ew)=>{"use strict";var Ok=Zy(),Mk=Jy();ew.exports=Ok.bind(null,Mk)});var ow=Ct((use,nw)=>{"use strict";var Bk=tw(),Uk=/[\/\?<>\\:\*\|"]/g,Fk=/[\x00-\x1f\x80-\x9f]/g,Vk=/^\.+$/,$k=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,Kk=/[\. ]+$/;function rw(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(Uk,e).replace(Fk,e).replace(Vk,e).replace($k,e).replace(Kk,e);return Bk(t,255)}nw.exports=function(r,e){var t=e&&e.replacement||"",n=rw(r,t);return t===""?n:rw(n,"")}});var iw=Ct(la=>{"use strict";var qk="[object ArrayBuffer]",Zn=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===qk}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}},K3="string",zk=/^[0-9a-f\s]+$/i,Wk=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,Gk=/^[a-zA-Z0-9-_]+$/,gf=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=Zn.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return decodeURIComponent(escape(n))}},Nr=class{static toString(e,t=!1){let n=Zn.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}},yf=class r{static isHex(e){return typeof e===K3&&zk.test(e)}static isBase64(e){return typeof e===K3&&Wk.test(e)}static isBase64Url(e){return typeof e===K3&&Gk.test(e)}static ToString(e,t="utf8"){let n=Zn.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 Nr.toString(n,!0);case"utf16":case"utf16be":return Nr.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 Nr.fromString(e,!0);case"utf16":case"utf16be":return Nr.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Zn.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 gf.fromString(e);case"utf16":case"utf16be":return Nr.fromString(e);case"utf16le":case"usc2":return Nr.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 gf.toString(e);case"utf16":case"utf16be":return Nr.toString(e);case"utf16le":case"usc2":return Nr.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=Zn.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Zn.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 Nr.toString(e,t)}static FromUtf16String(e,t=!1){return Nr.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,"")||""}};yf.DEFAULT_UTF8_ENCODING="utf8";function Qk(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 Yk(...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 Xk(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}la.BufferSourceConverter=Zn;la.Convert=yf;la.assign=Qk;la.combine=Yk;la.isEqual=Xk});var Kb=Ct(Th=>{"use strict";Object.defineProperty(Th,"__esModule",{value:!0});var p4=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}))}}},Ih=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new p4;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)}};Th.EventIterator=Ih;Th.default=Ih});var Hb=Ct(rl=>{"use strict";Object.defineProperty(rl,"__esModule",{value:!0});var m4=Kb();rl.EventIterator=m4.EventIterator;function $P(r,e,t){return new m4.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}rl.subscribe=$P;rl.default=m4.EventIterator});var Nx=Ct((vfe,Lx)=>{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))}Lx.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 Ox=Ct(Yi=>{var TR=Nx();Yi.operation=function(r){var e=Yi.timeouts(r);return new TR(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};Yi.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};Yi.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};Yi.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=Yi.operation(e),u=Array.prototype.slice.call(arguments,1),d=u.pop();u.push(function(f){l.retry(f)||(f&&(arguments[0]=l.mainError()),d.apply(this,arguments))}),l.attempt(function(){c.apply(r,u)})}.bind(r,s),r[i].options=e}}});var Bx=Ct((Afe,Mx)=>{Mx.exports=Ox()});var GR={};Xe(GR,{DEFAULT_SESSION_MAX_PROVIDERS:()=>Tp,DEFAULT_SESSION_MIN_PROVIDERS:()=>Ip,InsufficientProvidersError:()=>cc,NoRoutersAvailableError:()=>Po,UnknownCodecError:()=>uc,UnknownHashAlgorithmError:()=>lc,createHelia:()=>zR,libp2pDefaults:()=>Ph});var Z4=Symbol.for("@libp2p/connection");var hn=Symbol.for("@libp2p/content-routing");var Xo=Symbol.for("@libp2p/peer-discovery");var ul=Symbol.for("@libp2p/peer-id");function dl(r){return!!r?.[ul]}var pn=Symbol.for("@libp2p/peer-routing");var io="keep-alive";var so=Symbol.for("@libp2p/transport");var Zo;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Zo||(Zo={}));var Kt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},fl=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}};var P=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"}},wa=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}};var hl=class extends Error{static name="ConnectionClosingError";constructor(e="The connection is closing"){super(e),this.name="ConnectionClosingError"}},Zi=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},ji=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},mn=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},pl=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}},jo=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Ce=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},Ji=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},ao=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},ml=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"}},Pn=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},he=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},gl=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},gn=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},Ur=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Rn=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},Jo=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},es=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},yl=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"}},Fr=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var me=class extends EventTarget{#e=new Map;constructor(){super()}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 wl(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function mt(...r){let e=[];for(let t of r)wl(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 kt(...r){let e=[];for(let t of r)wl(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 Ae=Symbol.for("@libp2p/service-capabilities"),dr=Symbol.for("@libp2p/service-dependencies");function le(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 bl=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||(e-1&e)!==0)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}},ts=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new bl(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 bl(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 w0=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 cE(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 cE(r,e){e=e??{};let t=e.onEnd,n=new ts,o,i,s,a=J(),c=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((m,y)=>{i=x=>{i=null,n.push(x);try{m(r(n))}catch(w){y(w)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=J()})}},l=m=>i!=null?i(m):(n.push(m),o),u=m=>(n=new ts,i!=null?i({error:m}):(n.push({error:m}),o)),d=m=>{if(s)return o;if(e?.objectMode!==!0&&m?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:m})},f=m=>s?o:(s=!0,m!=null?u(m):l({done:!0})),h=()=>(n=new ts,f(),{done:!0}),p=m=>(f(m),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:h,throw:p,push:d,end:f,get readableLength(){return n.size},onEmpty:async m=>{let y=m?.signal;if(y?.throwIfAborted(),n.isEmpty())return;let x,w;y!=null&&(x=new Promise((I,M)=>{w=()=>{M(new w0)},y.addEventListener("abort",w)}));try{await Promise.race([a.promise,x])}finally{w!=null&&y!=null&&y?.removeEventListener("abort",w)}}},t==null)return o;let g=o;return o={[Symbol.asyncIterator](){return this},next(){return g.next()},throw(m){return g.throw(m),t!=null&&(t(m),t=void 0),{done:!0}},return(){return g.return(),t!=null&&(t(),t=void 0),{done:!0}},push:d,end(m){return g.end(m),t!=null&&(t(m),t=void 0),o},get readableLength(){return g.readableLength},onEmpty:m=>g.onEmpty(m)},o}var b0=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 lt(r,e,t,n){let o=new b0(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((i,s)=>{function a(){t?.removeEventListener("abort",u),r.removeEventListener(e,c),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let c=d=>{try{if(n?.filter?.(d)===!1)return}catch(f){a(),s(f);return}a(),i(d)},l=d=>{a(),s(d.detail)},u=()=>{a(),s(o)};t?.addEventListener("abort",u),r.addEventListener(e,c),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}var xl=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}},El=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var vl=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 et(r,e,t){if(e==null)return r;if(e.aborted)return r.catch(()=>{}),Promise.reject(new vl(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new vl(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 Sl=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 Kt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function lE(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var Al=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=lE(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,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 Kt),this.cleanup())}async join(e={}){let t=new Sl(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 et(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 Ht=class extends me{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 El;let n=new Al(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 Kt)}),this.clear()}async onEmpty(e){this.size!==0&&await lt(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await lt(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await lt(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 Kt("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 gt=class extends Ht{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function uE(r){return r[Symbol.asyncIterator]!=null}function dE(r){if(uE(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Rt=dE;function ae(r=0){return new Uint8Array(r)}function Be(r=0){return new Uint8Array(r)}var fE=Math.pow(2,7),hE=Math.pow(2,14),pE=Math.pow(2,21),x0=Math.pow(2,28),E0=Math.pow(2,35),v0=Math.pow(2,42),S0=Math.pow(2,49),_e=128,Dt=127;function ue(r){if(r<fE)return 1;if(r<hE)return 2;if(r<pE)return 3;if(r<x0)return 4;if(r<E0)return 5;if(r<v0)return 6;if(r<S0)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function A0(r,e,t=0){switch(ue(r)){case 8:e[t++]=r&255|_e,r/=128;case 7:e[t++]=r&255|_e,r/=128;case 6:e[t++]=r&255|_e,r/=128;case 5:e[t++]=r&255|_e,r/=128;case 4:e[t++]=r&255|_e,r>>>=7;case 3:e[t++]=r&255|_e,r>>>=7;case 2:e[t++]=r&255|_e,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function mE(r,e,t=0){switch(ue(r)){case 8:e.set(t++,r&255|_e),r/=128;case 7:e.set(t++,r&255|_e),r/=128;case 6:e.set(t++,r&255|_e),r/=128;case 5:e.set(t++,r&255|_e),r/=128;case 4:e.set(t++,r&255|_e),r>>>=7;case 3:e.set(t++,r&255|_e),r>>>=7;case 2:e.set(t++,r&255|_e),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function I0(r,e){let t=r[e],n=0;if(n+=t&Dt,t<_e||(t=r[e+1],n+=(t&Dt)<<7,t<_e)||(t=r[e+2],n+=(t&Dt)<<14,t<_e)||(t=r[e+3],n+=(t&Dt)<<21,t<_e)||(t=r[e+4],n+=(t&Dt)*x0,t<_e)||(t=r[e+5],n+=(t&Dt)*E0,t<_e)||(t=r[e+6],n+=(t&Dt)*v0,t<_e)||(t=r[e+7],n+=(t&Dt)*S0,t<_e))return n;throw new RangeError("Could not decode varint")}function gE(r,e){let t=r.get(e),n=0;if(n+=t&Dt,t<_e||(t=r.get(e+1),n+=(t&Dt)<<7,t<_e)||(t=r.get(e+2),n+=(t&Dt)<<14,t<_e)||(t=r.get(e+3),n+=(t&Dt)<<21,t<_e)||(t=r.get(e+4),n+=(t&Dt)*x0,t<_e)||(t=r.get(e+5),n+=(t&Dt)*E0,t<_e)||(t=r.get(e+6),n+=(t&Dt)*v0,t<_e)||(t=r.get(e+7),n+=(t&Dt)*S0,t<_e))return n;throw new RangeError("Could not decode varint")}function De(r,e,t=0){return e==null&&(e=Be(ue(r))),e instanceof Uint8Array?A0(r,e,t):mE(r,e,t)}function yt(r,e=0){return r instanceof Uint8Array?I0(r,e):gE(r,e)}function ke(r,e){e==null&&(e=r.reduce((o,i)=>o+i.length,0));let t=Be(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}function j(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 J4=Symbol.for("@achingbrain/uint8arraylist");function j4(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 rs(r){return!!r?.[J4]}var ee=class r{bufs;length;[J4]=!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(rs(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(rs(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=j4(this.bufs,e);return t.buf[t.index]}set(e,t){let n=j4(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(rs(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 ke(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:ke(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,u=t>a&&t<=c;if(l&&u){if(e===a&&t===c){n.push(s);break}let d=e-a;n.push(s.subarray(d,d+(t-e)));break}if(l){if(e===0){n.push(s);continue}n.push(s.subarray(e-a));continue}if(u){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(!rs(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 d=0;d<i;d++)s[d]=-1;for(let d=0;d<o;d++)s[n[d]]=d;let a=s,c=this.byteLength-n.byteLength,l=n.byteLength-1,u;for(let d=t;d<=c;d+=u){u=0;for(let f=l;f>=0;f--){let h=this.get(d+f);if(n[f]!==h){u=Math.max(1,f-a[h]);break}}if(u===0)return d}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=Be(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=ae(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=ae(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=ae(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=Be(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=ae(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=ae(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=ae(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=ae(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=ae(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(!j(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}};var Il=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},ns=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Tl=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},ba=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function _l(r){return r[Symbol.asyncIterator]!=null}function eg(r,e){if(r.byteLength>e)throw new ns("Message length too long")}var kl=r=>{let e=ue(r),t=Be(e);return De(r,t),kl.bytes=e,t};kl.bytes=0;function Vr(r,e){e=e??{};let t=e.lengthEncoder??kl,n=e?.maxDataLength??4194304;function*o(i){eg(i,n);let s=t(i.byteLength);s instanceof Uint8Array?yield s:yield*s,i instanceof Uint8Array?yield i:yield*i}return _l(r)?async function*(){for await(let i of r)yield*o(i)}():function*(){for(let i of r)yield*o(i)}()}Vr.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??kl,n=e?.maxDataLength??4194304;return eg(r,n),new ee(t(r.byteLength),r)};var ei;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(ei||(ei={}));var T0=r=>{let e=yt(r);return T0.bytes=ue(e),e};T0.bytes=0;function Dn(r,e){let t=new ee,n=ei.LENGTH,o=-1,i=e?.lengthDecoder??T0,s=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===ei.LENGTH)try{if(o=i(t),o<0)throw new Il("Invalid message length");if(o>a)throw new ns("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=ei.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new Tl("Message length length too long");break}throw l}if(n===ei.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=ei.LENGTH}}}return _l(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new ba("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new ba("Unexpected end of input")}()}Dn.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 Dn(n,{...e??{},onLength:i=>{t=i}})};function bE(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 os=bE;function xE(r){return r[Symbol.asyncIterator]!=null}function EE(r,e){let t=0;if(xE(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=os(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=EE;function vE(r){return r[Symbol.asyncIterator]!=null}async function SE(r,e){try{await Promise.all(r.map(async t=>{for await(let n of t)e.push(n)})),e.end()}catch(t){e.end(t)}}async function*AE(r){let e=Pt({objectMode:!0});SE(r,e).catch(()=>{}),yield*e}function*IE(r){for(let e of r)yield*e}function TE(...r){let e=[];for(let t of r)vE(t)||e.push(t);return e.length===r.length?IE(e):AE(r)}var qt=TE;function ut(r,...e){if(r==null)throw new Error("Empty pipeline");if(C0(r)){let n=r;r=()=>n.source}else if(rg(r)||tg(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&C0(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++)C0(t[n])&&(t[n]=CE(t[n]));return _E(...t)}var _E=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},tg=r=>r?.[Symbol.asyncIterator]!=null,rg=r=>r?.[Symbol.iterator]!=null,C0=r=>r==null?!1:r.sink!=null&&r.source!=null,CE=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(tg(i))o=async function*(){yield*i,n.end()};else if(rg(i))o=function*(){yield*i,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return qt(n,o())}return r.source};function kE(r){return r[Symbol.asyncIterator]!=null}function PE(r,e){return kE(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=PE;var W=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var xa="/ipfs/bitswap/1.2.0";var k0=new Float32Array([-0]),fo=new Uint8Array(k0.buffer);function ng(r,e,t){k0[0]=r,e[t]=fo[0],e[t+1]=fo[1],e[t+2]=fo[2],e[t+3]=fo[3]}function og(r,e){return fo[0]=r[e],fo[1]=r[e+1],fo[2]=r[e+2],fo[3]=r[e+3],k0[0]}var P0=new Float64Array([-0]),Lt=new Uint8Array(P0.buffer);function ig(r,e,t){P0[0]=r,e[t]=Lt[0],e[t+1]=Lt[1],e[t+2]=Lt[2],e[t+3]=Lt[3],e[t+4]=Lt[4],e[t+5]=Lt[5],e[t+6]=Lt[6],e[t+7]=Lt[7]}function sg(r,e){return Lt[0]=r[e],Lt[1]=r[e+1],Lt[2]=r[e+2],Lt[3]=r[e+3],Lt[4]=r[e+4],Lt[5]=r[e+5],Lt[6]=r[e+6],Lt[7]=r[e+7],P0[0]}var RE=BigInt(Number.MAX_SAFE_INTEGER),DE=BigInt(Number.MIN_SAFE_INTEGER),fr=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 ti;if(e<RE&&e>DE)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>ag&&(o=0n,++n>ag&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return ti;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):ti}},ti=new fr(0,0);ti.toBigInt=function(){return 0n};ti.zzEncode=ti.zzDecode=function(){return this};ti.length=function(){return 1};var ag=4294967296n;function cg(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 lg(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 R0(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 $r(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 D0=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,$r(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 $r(this,4);return Pl(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw $r(this,4);return Pl(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw $r(this,4);let e=og(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw $r(this,4);let e=sg(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 $r(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return lg(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw $r(this,e);this.pos+=e}else do if(this.pos>=this.len)throw $r(this);while((this.buf[this.pos++]&128)!==0);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 fr(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 $r(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 $r(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 $r(this,8);let e=Pl(this.buf,this.pos+=4),t=Pl(this.buf,this.pos+=4);return new fr(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=I0(this.buf,this.pos);return this.pos+=ue(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 L0(r){return new D0(r instanceof Uint8Array?r:r.subarray())}function te(r,e,t){let n=L0(r);return e.decode(n,void 0,t)}var F0={};Xe(F0,{base10:()=>UE});var qL=new Uint8Array(0);function dg(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 Kr(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 fg(r){return new TextEncoder().encode(r)}function hg(r){return new TextDecoder().decode(r)}function LE(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),u=Math.log(256)/Math.log(a);function d(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 g=0,m=0,y=0,x=p.length;y!==x&&p[y]===0;)y++,g++;for(var w=(x-y)*u+1>>>0,I=new Uint8Array(w);y!==x;){for(var M=p[y],D=0,R=w-1;(M!==0||D<m)&&R!==-1;R--,D++)M+=256*I[R]>>>0,I[R]=M%a>>>0,M=M/a>>>0;if(M!==0)throw new Error("Non-zero carry");m=D,y++}for(var S=w-m;S!==w&&I[S]===0;)S++;for(var A=c.repeat(g);S<w;++S)A+=r.charAt(I[S]);return A}function f(p){if(typeof p!="string")throw new TypeError("Expected String");if(p.length===0)return new Uint8Array;var g=0;if(p[g]!==" "){for(var m=0,y=0;p[g]===c;)m++,g++;for(var x=(p.length-g)*l+1>>>0,w=new Uint8Array(x);p[g];){var I=t[p.charCodeAt(g)];if(I===255)return;for(var M=0,D=x-1;(I!==0||M<y)&&D!==-1;D--,M++)I+=a*w[D]>>>0,w[D]=I%256>>>0,I=I/256>>>0;if(I!==0)throw new Error("Non-zero carry");y=M,g++}if(p[g]!==" "){for(var R=x-y;R!==x&&w[R]===0;)R++;for(var S=new Uint8Array(m+(x-R)),A=m;R!==x;)S[A++]=w[R++];return S}}}function h(p){var g=f(p);if(g)return g;throw new Error(`Non-${e} character`)}return{encode:d,decodeUnsafe:f,decode:h}}var NE=LE,OE=NE,pg=OE;var O0=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")}},M0=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 mg(this,e)}},B0=class{decoders;constructor(e){this.decoders=e}or(e){return mg(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 mg(r,e){return new B0({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var U0=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 O0(e,t,n),this.decoder=new M0(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function is({name:r,prefix:e,encode:t,decode:n}){return new U0(r,e,t,n)}function ho({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=pg(t,r);return is({prefix:e,name:r,encode:n,decode:i=>Kr(o(i))})}function ME(r,e,t,n){let o={};for(let u=0;u<e.length;++u)o[e[u]]=u;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 u=0;u<i;++u){let d=o[r[u]];if(d===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|d,a+=t,a>=8&&(a-=8,s[l++]=255&c>>a)}if(a>=t||(255&c<<8-a)!==0)throw new SyntaxError("Unexpected end of data");return s}function BE(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)!==0;)i+="=";return i}function je({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return is({prefix:e,name:r,encode(o){return BE(o,n,t)},decode(o){return ME(o,n,t,r)}})}var UE=ho({prefix:"9",name:"base10",alphabet:"0123456789"});var V0={};Xe(V0,{base16:()=>FE,base16upper:()=>VE});var FE=je({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),VE=je({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var $0={};Xe($0,{base2:()=>$E});var $E=je({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var K0={};Xe(K0,{base256emoji:()=>WE});var gg=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}"),KE=gg.reduce((r,e,t)=>(r[t]=e,r),[]),HE=gg.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function qE(r){return r.reduce((e,t)=>(e+=KE[t],e),"")}function zE(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=HE[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var WE=is({prefix:"\u{1F680}",name:"base256emoji",encode:qE,decode:zE});var H0={};Xe(H0,{base32:()=>at,base32hex:()=>XE,base32hexpad:()=>jE,base32hexpadupper:()=>JE,base32hexupper:()=>ZE,base32pad:()=>QE,base32padupper:()=>YE,base32upper:()=>GE,base32z:()=>ev});var at=je({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),GE=je({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),QE=je({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),YE=je({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),XE=je({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),ZE=je({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),jE=je({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),JE=je({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),ev=je({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var q0={};Xe(q0,{base36:()=>yn,base36upper:()=>tv});var yn=ho({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),tv=ho({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var z0={};Xe(z0,{base58btc:()=>be,base58flickr:()=>rv});var be=ho({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),rv=ho({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var W0={};Xe(W0,{base64:()=>ot,base64pad:()=>nv,base64url:()=>Ea,base64urlpad:()=>ov});var ot=je({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),nv=je({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Ea=je({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),ov=je({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var G0={};Xe(G0,{base8:()=>iv});var iv=je({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Q0={};Xe(Q0,{identity:()=>sv});var sv=is({prefix:"\0",name:"identity",encode:r=>hg(r),decode:r=>fg(r)});var Rl={};Xe(Rl,{code:()=>Y0,decode:()=>dv,encode:()=>uv,name:()=>lv});var av=new TextEncoder,cv=new TextDecoder,lv="json",Y0=512;function uv(r){return av.encode(JSON.stringify(r))}function dv(r){return JSON.parse(cv.decode(r))}var ss={};Xe(ss,{code:()=>ri,decode:()=>pv,encode:()=>hv,name:()=>fv});var fv="raw",ri=85;function hv(r){return Kr(r)}function pv(r){return Kr(r)}var j0={};Xe(j0,{identity:()=>Jt});var He={};Xe(He,{Digest:()=>ni,create:()=>Nt,decode:()=>ve,equals:()=>Z0,hasCode:()=>Lv});var mv=bg,yg=128,gv=127,yv=~gv,wv=Math.pow(2,31);function bg(r,e,t){e=e||[],t=t||0;for(var n=t;r>=wv;)e[t++]=r&255|yg,r/=128;for(;r&yv;)e[t++]=r&255|yg,r>>>=7;return e[t]=r|0,bg.bytes=t-n+1,e}var bv=X0,xv=128,wg=127;function X0(r,n){var t=0,n=n||0,o=0,i=n,s,a=r.length;do{if(i>=a)throw X0.bytes=0,new RangeError("Could not decode varint");s=r[i++],t+=o<28?(s&wg)<<o:(s&wg)*Math.pow(2,o),o+=7}while(s>=xv);return X0.bytes=i-n,t}var Ev=Math.pow(2,7),vv=Math.pow(2,14),Sv=Math.pow(2,21),Av=Math.pow(2,28),Iv=Math.pow(2,35),Tv=Math.pow(2,42),_v=Math.pow(2,49),Cv=Math.pow(2,56),kv=Math.pow(2,63),Pv=function(r){return r<Ev?1:r<vv?2:r<Sv?3:r<Av?4:r<Iv?5:r<Tv?6:r<_v?7:r<Cv?8:r<kv?9:10},Rv={encode:mv,decode:bv,encodingLength:Pv},Dv=Rv,va=Dv;function Sa(r,e=0){return[va.decode(r,e),va.decode.bytes]}function as(r,e,t=0){return va.encode(r,e,t),e}function cs(r){return va.encodingLength(r)}function Nt(r,e){let t=e.byteLength,n=cs(r),o=n+cs(t),i=new Uint8Array(o+t);return as(r,i,0),as(t,i,n),i.set(e,o),new ni(r,t,e,i)}function ve(r){let e=Kr(r),[t,n]=Sa(e),[o,i]=Sa(e.subarray(n)),s=e.subarray(n+i);if(s.byteLength!==o)throw new Error("Incorrect length");return new ni(t,o,s,e)}function Z0(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&dg(r.bytes,t.bytes)}}var ni=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function Lv(r,e){return r.code===e}var xg=0,Nv="identity",Eg=Kr;function Ov(r){return Nt(xg,Eg(r))}var Jt={code:xg,name:Nv,encode:Eg,digest:Ov};var t2={};Xe(t2,{sha256:()=>Qe,sha512:()=>Ll});function e2({name:r,code:e,encode:t}){return new J0(r,e,t)}var J0=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?Nt(this.code,t):t.then(n=>Nt(this.code,n))}else throw Error("Unknown type, must be binary type")}};function Sg(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var Qe=e2({name:"sha2-256",code:18,encode:Sg("SHA-256")}),Ll=e2({name:"sha2-512",code:19,encode:Sg("SHA-512")});function Ag(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return Bv(t,r2(r),e??be.encoder);default:return Uv(t,r2(r),e??at.encoder)}}var Ig=new WeakMap;function r2(r){let e=Ig.get(r);if(e==null){let t=new Map;return Ig.set(r,t),t}return e}var Q=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!==Aa)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==Fv)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=Nt(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&&Z0(e.multihash,n.multihash)}toString(e){return Ag(this,e)}toJSON(){return{"/":Ag(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??Tg(n,o,i.bytes))}else if(t[Vv]===!0){let{version:n,multihash:o,code:i}=t,s=ve(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!==Aa)throw new Error(`Version 0 CID must use dag-pb (code: ${Aa}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=Tg(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,Aa,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=Kr(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 ni(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[d,f]=Sa(e.subarray(t));return t+=f,d},o=n(),i=Aa;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,u=l-s;return{version:o,codec:i,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,o]=Mv(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 r2(i).set(n,e),i}};function Mv(r,e){switch(r[0]){case"Q":{let t=e??be;return[be.prefix,t.decode(`${be.prefix}${r}`)]}case be.prefix:{let t=e??be;return[be.prefix,t.decode(r)]}case at.prefix:{let t=e??at;return[at.prefix,t.decode(r)]}case yn.prefix:{let t=e??yn;return[yn.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 Bv(r,e,t){let{prefix:n}=t;if(n!==be.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 Uv(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 Aa=112,Fv=18;function Tg(r,e,t){let n=cs(r),o=n+cs(e),i=new Uint8Array(o+t.byteLength);return as(r,i,0),as(e,i,n),i.set(t,o),i}var Vv=Symbol.for("@ipld/js-cid/CID");var oi={...Q0,...$0,...G0,...F0,...V0,...H0,...q0,...z0,...W0,...K0},_N={...t2,...j0};function Cg(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var _g=Cg("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),n2=Cg("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=Be(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),$v={utf8:_g,"utf-8":_g,hex:oi.base16,latin1:n2,ascii:n2,binary:n2,...oi},Nl=$v;function N(r,e="utf8"){let t=Nl[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function o2(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return Be(s);o+s>e&&(n=Be(e),o=0);let a=n.subarray(o,o+=s);return(o&7)!==0&&(o=(o|7)+1),a}}var ii=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function i2(){}var a2=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},Kv=o2();function Hv(r){return globalThis.Buffer!=null?Be(r):Kv(r)}var Ta=class{len;head;tail;states;constructor(){this.len=0,this.head=new ii(i2,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new ii(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new c2((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(Ol,10,fr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=fr.fromBigInt(e);return this._push(Ol,t.length(),t)}uint64Number(e){return this._push(A0,ue(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=fr.fromBigInt(e).zzEncode();return this._push(Ol,t.length(),t)}sint64Number(e){let t=fr.fromNumber(e).zzEncode();return this._push(Ol,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(s2,1,e?1:0)}fixed32(e){return this._push(Ia,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=fr.fromBigInt(e);return this._push(Ia,4,t.lo)._push(Ia,4,t.hi)}fixed64Number(e){let t=fr.fromNumber(e);return this._push(Ia,4,t.lo)._push(Ia,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(ng,4,e)}double(e){return this._push(ig,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(s2,1,0):this.uint32(t)._push(zv,t,e)}string(e){let t=cg(e);return t!==0?this.uint32(t)._push(R0,t,e):this._push(s2,1,0)}fork(){return this.states=new a2(this),this.head=this.tail=new ii(i2,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 ii(i2,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=Hv(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function s2(r,e,t){e[t]=r&255}function qv(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var c2=class extends ii{next;constructor(e,t){super(qv,e,t),this.next=void 0}};function Ol(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 Ia(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 zv(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Ta.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(Wv,e,r),this},Ta.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(Gv,e,r),this});function Wv(r,e,t){e.set(r,t)}function Gv(r,e,t){r.length<40?R0(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(N(r),t)}function l2(){return new Ta}function re(r,e){let t=l2();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var ls;(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"})(ls||(ls={}));function Ml(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function qe(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 Ml("enum",ls.VARINT,t,n)}function ne(r,e){return Ml("message",ls.LENGTH_DELIMITED,r,e)}var Ue=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},_a=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var tt;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(tt||(tt={}));var u2;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(u2||(u2={}));(function(r){r.codec=()=>qe(u2)})(tt||(tt={}));var us;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),tt.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:ae(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=tt.codec().decode(t);break}case 5:{i.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(us||(us={}));var Bl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let i of t.entries)n.uint32(10),us.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(us.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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Bl||(Bl={}));var ds;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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:ae(0),data:ae(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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(ds||(ds={}));var Sr;(function(r){r.HaveBlock="HaveBlock",r.DoNotHaveBlock="DoNotHaveBlock"})(Sr||(Sr={}));var Ul;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DoNotHaveBlock=1]="DoNotHaveBlock"})(Ul||(Ul={}));(function(r){r.codec=()=>qe(Ul)})(Sr||(Sr={}));var fs;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),Sr.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:ae(0),type:Sr.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=Sr.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(fs||(fs={}));var si;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),Bl.codec().encode(t.wantlist,n)),t.blocks!=null)for(let i of t.blocks)n.uint32(26),ds.codec().encode(i,n);if(t.blockPresences!=null)for(let i of t.blockPresences)n.uint32(34),fs.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=Bl.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(ds.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(fs.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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(si||(si={}));function kg(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 Qv=4193648,Yv=Qv+16;function*Pg(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},u=si.encode(l).byteLength,{added:d,hasMore:f,newSize:h}=d2(o,l.blocks,a,e,u,Xv);a+=d,u=h;let p=f;({added:d,hasMore:f,newSize:h}=d2(n,l.blockPresences,s,e,u,Zv)),s+=d,u=h;let g=f;if({added:d,hasMore:f,newSize:h}=d2(t,l.wantlist.entries,i,e,u,jv),i+=d,u=h,c=!p&&!g&&!f,c||(l.wantlist.full=!1),yield si.encode(l),c)break}}function d2(r,e,t,n,o,i){let s=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],u=i(l);if(u>Yv)throw new Fl("Cannot send block as after encoding it is over the max message size");let d=o+u;if(d>n){a=!0;break}e.push(l),s++,o=d}return{hasMore:a,added:s,newSize:o}}function Xv(r){return f2(3,ds.encode(r))}function Zv(r){return f2(4,fs.encode(r))}function jv(r){return f2(1,us.encode(r))}function f2(r,e){let t=ue(r),n=ue(e.byteLength);return t+n+e.byteLength}var Vl=class extends me{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??[xa],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 gt({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 gn(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",t.status)},i=AbortSignal.timeout(this.messageReceiveTimeout);i.addEventListener("abort",o),await t.closeWrite(),await ut(t,s=>Dn(s,{maxDataLength:this.maxIncomingMessageSize}),async s=>{for await(let a of s)try{let c=si.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),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 W("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 Rt(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=kg(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 P("No message to send");this.log("sendMessage to %p",e),i?.onProgress?.(new W("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,xa,i);await a.closeRead();try{await ut(Pg(s,this.maxOutgoingMessageSize),c=>Vr(c),a),await a.close(i)}catch(c){i?.onProgress?.(new W("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 Ur("Network isn't running");t?.onProgress?.(new W("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),lt(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(xa))return!0;throw new Pn(`${e} did not support ${xa}`)}})]);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, got "+r)}function aS(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function hs(r,...e){if(!aS(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function ai(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 ps(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 Rg(r,e){hs(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}var ci=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function li(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function Hr(r,e){return r<<32-e|r>>>e}function $l(r,e){return r<<e|r>>>32-e>>>0}var cS=async()=>{};async function Dg(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 cS(),n+=i)}}function Lg(r){if(typeof r!="string")throw new Error("utf8ToBytes expected string, got "+typeof r);return new Uint8Array(new TextEncoder().encode(r))}function qr(r){return typeof r=="string"&&(r=Lg(r)),hs(r),r}function h2(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];hs(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 ms=class{clone(){return this._cloneInto()}};function Ng(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function gs(r){let e=n=>r().update(qr(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function ui(r=32){if(ci&&typeof ci.getRandomValues=="function")return ci.getRandomValues(new Uint8Array(r));if(ci&&typeof ci.randomBytes=="function")return ci.randomBytes(r);throw new Error("crypto.getRandomValues must be defined")}function lS(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 Kl(r,e,t){return r&e^~r&t}function Hl(r,e,t){return r&e^r&t^e&t}var mo=class extends ms{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=li(this.buffer)}update(e){ps(this);let{view:t,buffer:n,blockLen:o}=this;e=qr(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=li(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){ps(this),Rg(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 d=s;d<o;d++)t[d]=0;lS(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=li(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,u=this.get();if(l>u.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d<l;d++)a.setUint32(4*d,u[d],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),p2=BigInt(32);function Og(r,e=!1){return e?{h:Number(r&ql),l:Number(r>>p2&ql)}:{h:Number(r>>p2&ql)|0,l:Number(r&ql)|0}}function uS(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}=Og(r[o],e);[t[o],n[o]]=[i,s]}return[t,n]}var dS=(r,e)=>BigInt(r>>>0)<<p2|BigInt(e>>>0),fS=(r,e,t)=>r>>>t,hS=(r,e,t)=>r<<32-t|e>>>t,pS=(r,e,t)=>r>>>t|e<<32-t,mS=(r,e,t)=>r<<32-t|e>>>t,gS=(r,e,t)=>r<<64-t|e>>>t-32,yS=(r,e,t)=>r>>>t-32|e<<64-t,wS=(r,e)=>e,bS=(r,e)=>r,xS=(r,e,t)=>r<<t|e>>>32-t,ES=(r,e,t)=>e<<t|r>>>32-t,vS=(r,e,t)=>e<<t-32|r>>>64-t,SS=(r,e,t)=>r<<t-32|e>>>64-t;function AS(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var IS=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),TS=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,_S=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),CS=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,kS=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),PS=(r,e,t,n,o,i)=>e+t+n+o+i+(r/2**32|0)|0;var RS={fromBig:Og,split:uS,toBig:dS,shrSH:fS,shrSL:hS,rotrSH:pS,rotrSL:mS,rotrBH:gS,rotrBL:yS,rotr32H:wS,rotr32L:bS,rotlSH:xS,rotlSL:ES,rotlBH:vS,rotlBL:SS,add:AS,add3L:IS,add3H:TS,add4L:_S,add4H:CS,add5H:PS,add5L:kS},de=RS;var[DS,LS]=de.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),m2=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:u,Fh:d,Fl:f,Gh:h,Gl:p,Hh:g,Hl:m}=this;return[e,t,n,o,i,s,a,c,l,u,d,f,h,p,g,m]}set(e,t,n,o,i,s,a,c,l,u,d,f,h,p,g,m){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=u|0,this.Fh=d|0,this.Fl=f|0,this.Gh=h|0,this.Gl=p|0,this.Hh=g|0,this.Hl=m|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 I=go[w-15]|0,M=yo[w-15]|0,D=de.rotrSH(I,M,1)^de.rotrSH(I,M,8)^de.shrSH(I,M,7),R=de.rotrSL(I,M,1)^de.rotrSL(I,M,8)^de.shrSL(I,M,7),S=go[w-2]|0,A=yo[w-2]|0,F=de.rotrSH(S,A,19)^de.rotrBH(S,A,61)^de.shrSH(S,A,6),L=de.rotrSL(S,A,19)^de.rotrBL(S,A,61)^de.shrSL(S,A,6),U=de.add4L(R,L,yo[w-7],yo[w-16]),K=de.add4H(U,D,F,go[w-7],go[w-16]);go[w]=K|0,yo[w]=U|0}let{Ah:n,Al:o,Bh:i,Bl:s,Ch:a,Cl:c,Dh:l,Dl:u,Eh:d,El:f,Fh:h,Fl:p,Gh:g,Gl:m,Hh:y,Hl:x}=this;for(let w=0;w<80;w++){let I=de.rotrSH(d,f,14)^de.rotrSH(d,f,18)^de.rotrBH(d,f,41),M=de.rotrSL(d,f,14)^de.rotrSL(d,f,18)^de.rotrBL(d,f,41),D=d&h^~d&g,R=f&p^~f&m,S=de.add5L(x,M,R,LS[w],yo[w]),A=de.add5H(S,y,I,D,DS[w],go[w]),F=S|0,L=de.rotrSH(n,o,28)^de.rotrBH(n,o,34)^de.rotrBH(n,o,39),U=de.rotrSL(n,o,28)^de.rotrBL(n,o,34)^de.rotrBL(n,o,39),K=n&i^n&a^i&a,C=o&s^o&c^s&c;y=g|0,x=m|0,g=h|0,m=p|0,h=d|0,p=f|0,{h:d,l:f}=de.add(l|0,u|0,A|0,F|0),l=a|0,u=c|0,a=i|0,c=s|0,i=n|0,s=o|0;let k=de.add3L(F,U,C);n=de.add3H(k,A,L,K),o=k|0}({h:n,l:o}=de.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:i,l:s}=de.add(this.Bh|0,this.Bl|0,i|0,s|0),{h:a,l:c}=de.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=de.add(this.Dh|0,this.Dl|0,l|0,u|0),{h:d,l:f}=de.add(this.Eh|0,this.El|0,d|0,f|0),{h,l:p}=de.add(this.Fh|0,this.Fl|0,h|0,p|0),{h:g,l:m}=de.add(this.Gh|0,this.Gl|0,g|0,m|0),{h:y,l:x}=de.add(this.Hh|0,this.Hl|0,y|0,x|0),this.set(n,o,i,s,a,c,l,u,d,f,h,p,g,m,y,x)}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=gs(()=>new m2);var Gl={};Xe(Gl,{aInRange:()=>wt,abool:()=>zr,abytes:()=>ys,bitGet:()=>FS,bitLen:()=>b2,bitMask:()=>ka,bitSet:()=>VS,bytesToHex:()=>Nn,bytesToNumberBE:()=>On,bytesToNumberLE:()=>Wr,concatBytes:()=>Bn,createHmacDrbg:()=>x2,ensureBytes:()=>Le,equalBytes:()=>BS,hexToBytes:()=>fi,hexToNumber:()=>w2,inRange:()=>Ca,isBytes:()=>bo,memoized:()=>hi,notImplemented:()=>KS,numberToBytesBE:()=>xo,numberToBytesLE:()=>Mn,numberToHexUnpadded:()=>di,numberToVarBytesBE:()=>MS,utf8ToBytes:()=>US,validateObject:()=>Ar});var zl=BigInt(0),Wl=BigInt(1),NS=BigInt(2);function bo(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function ys(r){if(!bo(r))throw new Error("Uint8Array expected")}function zr(r,e){if(typeof e!="boolean")throw new Error(r+" boolean expected, got "+e)}var OS=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Nn(r){ys(r);let e="";for(let t=0;t<r.length;t++)e+=OS[r[t]];return e}function di(r){let e=r.toString(16);return e.length&1?"0"+e:e}function w2(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?zl:BigInt("0x"+r)}var Ln={_0:48,_9:57,A:65,F:70,a:97,f:102};function Mg(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 fi(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("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=Mg(r.charCodeAt(i)),a=Mg(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 On(r){return w2(Nn(r))}function Wr(r){return ys(r),w2(Nn(Uint8Array.from(r).reverse()))}function xo(r,e){return fi(r.toString(16).padStart(e*2,"0"))}function Mn(r,e){return xo(r,e).reverse()}function MS(r){return fi(di(r))}function Le(r,e,t){let n;if(typeof e=="string")try{n=fi(e)}catch(i){throw new Error(r+" must be hex string or Uint8Array, 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+" of length "+t+" expected, got "+o);return n}function Bn(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];ys(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 BS(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 US(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}var g2=r=>typeof r=="bigint"&&zl<=r;function Ca(r,e,t){return g2(r)&&g2(e)&&g2(t)&&e<=r&&r<t}function wt(r,e,t,n){if(!Ca(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function b2(r){let e;for(e=0;r>zl;r>>=Wl,e+=1);return e}function FS(r,e){return r>>BigInt(e)&Wl}function VS(r,e,t){return r|(t?Wl:zl)<<BigInt(e)}var ka=r=>(NS<<BigInt(r-1))-Wl,y2=r=>new Uint8Array(r),Bg=r=>Uint8Array.from(r);function x2(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=y2(r),o=y2(r),i=0,s=()=>{n.fill(1),o.fill(0),i=0},a=(...d)=>t(o,n,...d),c=(d=y2())=>{o=a(Bg([0]),d),n=a(),d.length!==0&&(o=a(Bg([1]),d),n=a())},l=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let d=0,f=[];for(;d<e;){n=a();let h=n.slice();f.push(h),d+=n.length}return Bn(...f)};return(d,f)=>{s(),c(d);let h;for(;!(h=f(l()));)c();return s(),h}}var $S={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 Ar(r,e,t={}){let n=(o,i,s)=>{let a=$S[i];if(typeof a!="function")throw new Error("invalid validator function");let c=r[o];if(!(s&&c===void 0)&&!a(c,r))throw new Error("param "+String(o)+" is invalid. Expected "+i+", got "+c)};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 KS=()=>{throw new Error("not implemented")};function hi(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 ct=BigInt(0),ze=BigInt(1),pi=BigInt(2),HS=BigInt(3),E2=BigInt(4),Ug=BigInt(5),Fg=BigInt(8),qS=BigInt(9),zS=BigInt(16);function Ie(r,e){let t=r%e;return t>=ct?t:e+t}function v2(r,e,t){if(e<ct)throw new Error("invalid exponent, negatives unsupported");if(t<=ct)throw new Error("invalid modulus");if(t===ze)return ct;let n=ze;for(;e>ct;)e&ze&&(n=n*r%t),r=r*r%t,e>>=ze;return n}function Fe(r,e,t){let n=r;for(;e-- >ct;)n*=n,n%=t;return n}function Ql(r,e){if(r===ct)throw new Error("invert: expected non-zero number");if(e<=ct)throw new Error("invert: expected positive modulus, got "+e);let t=Ie(r,e),n=e,o=ct,i=ze,s=ze,a=ct;for(;t!==ct;){let l=n/t,u=n%t,d=o-s*l,f=i-a*l;n=t,t=u,o=s,i=a,s=d,a=f}if(n!==ze)throw new Error("invert: does not exist");return Ie(o,e)}function WS(r){let e=(r-ze)/pi,t,n,o;for(t=r-ze,n=0;t%pi===ct;t/=pi,n++);for(o=pi;o<r&&v2(o,e,r)!==r-ze;o++)if(o>1e3)throw new Error("Cannot find square root: likely non-prime P");if(n===1){let s=(r+ze)/E2;return function(c,l){let u=c.pow(l,s);if(!c.eql(c.sqr(u),l))throw new Error("Cannot find square root");return u}}let i=(t+ze)/pi;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,u=a.pow(a.mul(a.ONE,o),t),d=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 g=a.sqr(f);h<l&&!a.eql(g,a.ONE);h++)g=a.sqr(g);let p=a.pow(u,ze<<BigInt(l-h-1));u=a.sqr(p),d=a.mul(d,p),f=a.mul(f,u),l=h}return d}}function GS(r){if(r%E2===HS){let e=(r+ze)/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%Fg===Ug){let e=(r-Ug)/Fg;return function(n,o){let i=n.mul(o,pi),s=n.pow(i,e),a=n.mul(o,s),c=n.mul(n.mul(a,pi),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%zS,WS(r)}var Vg=(r,e)=>(Ie(r,e)&ze)===ze,QS=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function S2(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=QS.reduce((n,o)=>(n[o]="function",n),e);return Ar(r,t)}function YS(r,e,t){if(t<ct)throw new Error("invalid exponent, negatives unsupported");if(t===ct)return r.ONE;if(t===ze)return e;let n=r.ONE,o=e;for(;t>ct;)t&ze&&(n=r.mul(n,o)),o=r.sqr(o),t>>=ze;return n}function XS(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 A2(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<=ct)throw new Error("invalid field: expected ORDER > 0, got "+r);let{nBitLength:o,nByteLength:i}=A2(r,e);if(i>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let s,a=Object.freeze({ORDER:r,isLE:t,BITS:o,BYTES:i,MASK:ka(o),ZERO:ct,ONE:ze,create:c=>Ie(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof c);return ct<=c&&c<r},is0:c=>c===ct,isOdd:c=>(c&ze)===ze,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)=>YS(a,c,l),div:(c,l)=>Ie(c*Ql(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>Ql(c,r),sqrt:n.sqrt||(c=>(s||(s=GS(r)),s(a,c))),invertBatch:c=>XS(a,c),cmov:(c,l,u)=>u?l:c,toBytes:c=>t?Mn(c,i):xo(c,i),fromBytes:c=>{if(c.length!==i)throw new Error("Field.fromBytes: expected "+i+" bytes, got "+c.length);return t?Wr(c):On(c)}});return Object.freeze(a)}function $g(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 I2(r){let e=$g(r);return e+Math.ceil(e/2)}function Kg(r,e,t=!1){let n=r.length,o=$g(e),i=I2(e);if(n<16||n<i||n>1024)throw new Error("expected "+i+"-1024 bytes of input, got "+n);let s=t?Wr(r):On(r),a=Ie(s,e-ze)+ze;return t?Mn(a,o):xo(a,o)}var Hg=BigInt(0),Yl=BigInt(1);function T2(r,e){let t=e.negate();return r?t:e}function qg(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function _2(r,e){qg(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1);return{windows:t,windowSize:n}}function ZS(r,e){if(!Array.isArray(r))throw new Error("array expected");r.forEach((t,n)=>{if(!(t instanceof e))throw new Error("invalid point at index "+n)})}function jS(r,e){if(!Array.isArray(r))throw new Error("array of scalars expected");r.forEach((t,n)=>{if(!e.isValid(t))throw new Error("invalid scalar at index "+n)})}var C2=new WeakMap,zg=new WeakMap;function k2(r){return zg.get(r)||1}function Xl(r,e){return{constTimeNegate:T2,hasPrecomputes(t){return k2(t)!==1},unsafeLadder(t,n,o=r.ZERO){let i=t;for(;n>Hg;)n&Yl&&(o=o.add(i)),i=i.double(),n>>=Yl;return o},precomputeWindow(t,n){let{windows:o,windowSize:i}=_2(n,e),s=[],a=t,c=a;for(let l=0;l<o;l++){c=a,s.push(c);for(let u=1;u<i;u++)c=c.add(a),s.push(c);a=c.double()}return s},wNAF(t,n,o){let{windows:i,windowSize:s}=_2(t,e),a=r.ZERO,c=r.BASE,l=BigInt(2**t-1),u=2**t,d=BigInt(t);for(let f=0;f<i;f++){let h=f*s,p=Number(o&l);o>>=d,p>s&&(p-=u,o+=Yl);let g=h,m=h+Math.abs(p)-1,y=f%2!==0,x=p<0;p===0?c=c.add(T2(y,n[g])):a=a.add(T2(x,n[m]))}return{p:a,f:c}},wNAFUnsafe(t,n,o,i=r.ZERO){let{windows:s,windowSize:a}=_2(t,e),c=BigInt(2**t-1),l=2**t,u=BigInt(t);for(let d=0;d<s;d++){let f=d*a;if(o===Hg)break;let h=Number(o&c);if(o>>=u,h>a&&(h-=l,o+=Yl),h===0)continue;let p=n[f+Math.abs(h)-1];h<0&&(p=p.negate()),i=i.add(p)}return i},getPrecomputes(t,n,o){let i=C2.get(n);return i||(i=this.precomputeWindow(n,t),t!==1&&C2.set(n,o(i))),i},wNAFCached(t,n,o){let i=k2(t);return this.wNAF(i,this.getPrecomputes(i,t,o),n)},wNAFCachedUnsafe(t,n,o,i){let s=k2(t);return s===1?this.unsafeLadder(t,n,i):this.wNAFUnsafe(s,this.getPrecomputes(s,t,o),n,i)},setWindowSize(t,n){qg(n,e),zg.set(t,n),C2.delete(t)}}}function Zl(r,e,t,n){if(ZS(t,r),jS(n,e),t.length!==n.length)throw new Error("arrays of points and scalars must have equal length");let o=r.ZERO,i=b2(BigInt(t.length)),s=i>12?i-3:i>4?i-2:i?2:1,a=(1<<s)-1,c=new Array(a+1).fill(o),l=Math.floor((e.BITS-1)/s)*s,u=o;for(let d=l;d>=0;d-=s){c.fill(o);for(let h=0;h<n.length;h++){let p=n[h],g=Number(p>>BigInt(d)&BigInt(a));c[g]=c[g].add(t[h])}let f=o;for(let h=c.length-1,p=o;h>0;h--)p=p.add(c[h]),f=f.add(p);if(u=u.add(f),d!==0)for(let h=0;h<s;h++)u=u.double()}return u}function Pa(r){return S2(r.Fp),Ar(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...A2(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Gr=BigInt(0),er=BigInt(1),jl=BigInt(2),JS=BigInt(8),eA={zip215:!0};function tA(r){let e=Pa(r);return Ar(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function Wg(r){let e=tA(r),{Fp:t,n,prehash:o,hash:i,randomBytes:s,nByteLength:a,h:c}=e,l=jl<<BigInt(a*8)-er,u=t.create,d=Eo(e.n,e.nBitLength),f=e.uvRatio||((v,E)=>{try{return{isValid:!0,value:t.sqrt(v*t.inv(E))}}catch{return{isValid:!1,value:Gr}}}),h=e.adjustScalarBytes||(v=>v),p=e.domain||((v,E,_)=>{if(zr("phflag",_),E.length||_)throw new Error("Contexts/pre-hash are not supported");return v});function g(v,E){wt("coordinate "+v,E,Gr,l)}function m(v){if(!(v instanceof w))throw new Error("ExtendedPoint expected")}let y=hi((v,E)=>{let{ex:_,ey:T,ez:H}=v,q=v.is0();E==null&&(E=q?JS:t.inv(H));let X=u(_*E),ce=u(T*E),se=u(H*E);if(q)return{x:Gr,y:er};if(se!==er)throw new Error("invZ was invalid");return{x:X,y:ce}}),x=hi(v=>{let{a:E,d:_}=e;if(v.is0())throw new Error("bad point: ZERO");let{ex:T,ey:H,ez:q,et:X}=v,ce=u(T*T),se=u(H*H),fe=u(q*q),Ee=u(fe*fe),Oe=u(ce*E),Me=u(fe*u(Oe+se)),Ke=u(Ee+u(_*u(ce*se)));if(Me!==Ke)throw new Error("bad point: equation left != right (1)");let _t=u(T*H),Zt=u(q*X);if(_t!==Zt)throw new Error("bad point: equation left != right (2)");return!0});class w{constructor(E,_,T,H){this.ex=E,this.ey=_,this.ez=T,this.et=H,g("x",E),g("y",_),g("z",T),g("t",H),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(E){if(E instanceof w)throw new Error("extended point not allowed");let{x:_,y:T}=E||{};return g("x",_),g("y",T),new w(_,T,er,u(_*T))}static normalizeZ(E){let _=t.invertBatch(E.map(T=>T.ez));return E.map((T,H)=>T.toAffine(_[H])).map(w.fromAffine)}static msm(E,_){return Zl(w,d,E,_)}_setWindowSize(E){D.setWindowSize(this,E)}assertValidity(){x(this)}equals(E){m(E);let{ex:_,ey:T,ez:H}=this,{ex:q,ey:X,ez:ce}=E,se=u(_*ce),fe=u(q*H),Ee=u(T*ce),Oe=u(X*H);return se===fe&&Ee===Oe}is0(){return this.equals(w.ZERO)}negate(){return new w(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:E}=e,{ex:_,ey:T,ez:H}=this,q=u(_*_),X=u(T*T),ce=u(jl*u(H*H)),se=u(E*q),fe=_+T,Ee=u(u(fe*fe)-q-X),Oe=se+X,Me=Oe-ce,Ke=se-X,_t=u(Ee*Me),Zt=u(Oe*Ke),$t=u(Ee*Ke),fn=u(Me*Oe);return new w(_t,Zt,fn,$t)}add(E){m(E);let{a:_,d:T}=e,{ex:H,ey:q,ez:X,et:ce}=this,{ex:se,ey:fe,ez:Ee,et:Oe}=E;if(_===BigInt(-1)){let H4=u((q-H)*(fe+se)),q4=u((q+H)*(fe-se)),y0=u(q4-H4);if(y0===Gr)return this.double();let z4=u(X*jl*Oe),W4=u(ce*jl*Ee),G4=W4+z4,Q4=q4+H4,Y4=W4-z4,jx=u(G4*y0),Jx=u(Q4*Y4),eE=u(G4*Y4),tE=u(y0*Q4);return new w(jx,Jx,tE,eE)}let Me=u(H*se),Ke=u(q*fe),_t=u(ce*T*Oe),Zt=u(X*Ee),$t=u((H+q)*(se+fe)-Me-Ke),fn=Zt-_t,Cn=Zt+_t,ya=u(Ke-_*Me),Qx=u($t*fn),Yx=u(Cn*ya),Xx=u($t*ya),Zx=u(fn*Cn);return new w(Qx,Yx,Zx,Xx)}subtract(E){return this.add(E.negate())}wNAF(E){return D.wNAFCached(this,E,w.normalizeZ)}multiply(E){let _=E;wt("scalar",_,er,n);let{p:T,f:H}=this.wNAF(_);return w.normalizeZ([T,H])[0]}multiplyUnsafe(E,_=w.ZERO){let T=E;return wt("scalar",T,Gr,n),T===Gr?M:this.is0()||T===er?this:D.wNAFCachedUnsafe(this,T,w.normalizeZ,_)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return D.unsafeLadder(this,n).is0()}toAffine(E){return y(this,E)}clearCofactor(){let{h:E}=e;return E===er?this:this.multiplyUnsafe(E)}static fromHex(E,_=!1){let{d:T,a:H}=e,q=t.BYTES;E=Le("pointHex",E,q),zr("zip215",_);let X=E.slice(),ce=E[q-1];X[q-1]=ce&-129;let se=Wr(X),fe=_?l:t.ORDER;wt("pointHex.y",se,Gr,fe);let Ee=u(se*se),Oe=u(Ee-er),Me=u(T*Ee-H),{isValid:Ke,value:_t}=f(Oe,Me);if(!Ke)throw new Error("Point.fromHex: invalid y coordinate");let Zt=(_t&er)===er,$t=(ce&128)!==0;if(!_&&_t===Gr&&$t)throw new Error("Point.fromHex: x=0 and x_0=1");return $t!==Zt&&(_t=u(-_t)),w.fromAffine({x:_t,y:se})}static fromPrivateKey(E){return A(E).point}toRawBytes(){let{x:E,y:_}=this.toAffine(),T=Mn(_,t.BYTES);return T[T.length-1]|=E&er?128:0,T}toHex(){return Nn(this.toRawBytes())}}w.BASE=new w(e.Gx,e.Gy,er,u(e.Gx*e.Gy)),w.ZERO=new w(Gr,er,er,Gr);let{BASE:I,ZERO:M}=w,D=Xl(w,a*8);function R(v){return Ie(v,n)}function S(v){return R(Wr(v))}function A(v){let E=t.BYTES;v=Le("private key",v,E);let _=Le("hashed private key",i(v),2*E),T=h(_.slice(0,E)),H=_.slice(E,2*E),q=S(T),X=I.multiply(q),ce=X.toRawBytes();return{head:T,prefix:H,scalar:q,point:X,pointBytes:ce}}function F(v){return A(v).pointBytes}function L(v=new Uint8Array,...E){let _=Bn(...E);return S(i(p(_,Le("context",v),!!o)))}function U(v,E,_={}){v=Le("message",v),o&&(v=o(v));let{prefix:T,scalar:H,pointBytes:q}=A(E),X=L(_.context,T,v),ce=I.multiply(X).toRawBytes(),se=L(_.context,ce,q,v),fe=R(X+se*H);wt("signature.s",fe,Gr,n);let Ee=Bn(ce,Mn(fe,t.BYTES));return Le("result",Ee,t.BYTES*2)}let K=eA;function C(v,E,_,T=K){let{context:H,zip215:q}=T,X=t.BYTES;v=Le("signature",v,2*X),E=Le("message",E),_=Le("publicKey",_,X),q!==void 0&&zr("zip215",q),o&&(E=o(E));let ce=Wr(v.slice(X,2*X)),se,fe,Ee;try{se=w.fromHex(_,q),fe=w.fromHex(v.slice(0,X),q),Ee=I.multiplyUnsafe(ce)}catch{return!1}if(!q&&se.isSmallOrder())return!1;let Oe=L(H,fe.toRawBytes(),se.toRawBytes(),E);return fe.add(se.multiplyUnsafe(Oe)).subtract(Ee).clearCofactor().equals(w.ZERO)}return I._setWindowSize(8),{CURVE:e,getPublicKey:F,sign:U,verify:C,ExtendedPoint:w,utils:{getExtendedPublicKey:A,randomPrivateKey:()=>s(t.BYTES),precompute(v=8,E=w.BASE){return E._setWindowSize(v),E.multiply(BigInt(3)),E}}}}var ws=BigInt(0),P2=BigInt(1);function rA(r){return Ar(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function Gg(r){let e=rA(r),{P:t}=e,n=x=>Ie(x,t),o=e.montgomeryBits,i=Math.ceil(o/8),s=e.nByteLength,a=e.adjustScalarBytes||(x=>x),c=e.powPminus2||(x=>v2(x,t-BigInt(2),t));function l(x,w,I){let M=n(x*(w-I));return w=n(w-M),I=n(I+M),[w,I]}let u=(e.a-BigInt(2))/BigInt(4);function d(x,w){wt("u",x,ws,t),wt("scalar",w,ws,t);let I=w,M=x,D=P2,R=ws,S=x,A=P2,F=ws,L;for(let K=BigInt(o-1);K>=ws;K--){let C=I>>K&P2;F^=C,L=l(F,D,S),D=L[0],S=L[1],L=l(F,R,A),R=L[0],A=L[1],F=C;let k=D+R,v=n(k*k),E=D-R,_=n(E*E),T=v-_,H=S+A,q=S-A,X=n(q*k),ce=n(H*E),se=X+ce,fe=X-ce;S=n(se*se),A=n(M*n(fe*fe)),D=n(v*_),R=n(T*(v+n(u*T)))}L=l(F,D,S),D=L[0],S=L[1],L=l(F,R,A),R=L[0],A=L[1];let U=c(R);return n(D*U)}function f(x){return Mn(n(x),i)}function h(x){let w=Le("u coordinate",x,i);return s===32&&(w[31]&=127),Wr(w)}function p(x){let w=Le("scalar",x),I=w.length;if(I!==i&&I!==s){let M=""+i+" or "+s;throw new Error("invalid scalar, expected "+M+" bytes, got "+I)}return Wr(a(w))}function g(x,w){let I=h(w),M=p(x),D=d(I,M);if(D===ws)throw new Error("invalid private or public key received");return f(D)}let m=f(e.Gu);function y(x){return g(x,m)}return{scalarMult:g,scalarMultBase:y,getSharedSecret:(x,w)=>g(x,w),getPublicKey:x=>y(x),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:m}}var Ra=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),Qg=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),rM=BigInt(0),nA=BigInt(1),Yg=BigInt(2),oA=BigInt(3),iA=BigInt(5),sA=BigInt(8);function Xg(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),i=Ra,a=r*r%i*r%i,c=Fe(a,Yg,i)*a%i,l=Fe(c,nA,i)*r%i,u=Fe(l,iA,i)*l%i,d=Fe(u,e,i)*u%i,f=Fe(d,t,i)*d%i,h=Fe(f,n,i)*f%i,p=Fe(h,o,i)*h%i,g=Fe(p,o,i)*h%i,m=Fe(g,e,i)*u%i;return{pow_p_5_8:Fe(m,Yg,i)*r%i,b2:a}}function Zg(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function aA(r,e){let t=Ra,n=Ie(e*e*e,t),o=Ie(n*n*e,t),i=Xg(r*o).pow_p_5_8,s=Ie(r*n*i,t),a=Ie(e*s*s,t),c=s,l=Ie(s*Qg,t),u=a===r,d=a===Ie(-r,t),f=a===Ie(-r*Qg,t);return u&&(s=c),(d||f)&&(s=l),Vg(s,t)&&(s=Ie(-s,t)),{isValid:u||d,value:s}}var cA=Eo(Ra,void 0,!0),lA={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:cA,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:sA,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:wo,randomBytes:ui,adjustScalarBytes:Zg,uvRatio:aA},Da=Wg(lA);var La=Gg({P:Ra,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=Ra,{pow_p_5_8:t,b2:n}=Xg(r);return Ie(Fe(t,oA,e)*n,e)},adjustScalarBytes:Zg,randomBytes:ui});var bs=32,wn=64,R2=32;function jg(){let r=Da.utils.randomPrivateKey(),e=Da.getPublicKey(r);return{privateKey:uA(r,e),publicKey:e}}function Jg(r,e){let t=r.subarray(0,R2);return Da.sign(e instanceof Uint8Array?e:e.subarray(),t)}function e6(r,e,t){return Da.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function uA(r,e){let t=new Uint8Array(wn);for(let n=0;n<R2;n++)t[n]=r[n],t[R2+n]=e[n];return t}var Na=class{type="Ed25519";raw;constructor(e){this.raw=Es(e,bs)}toMultihash(){return Jt.digest(Ot(this))}toCID(){return Q.createV1(114,this.toMultihash())}toString(){return be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}verify(e,t){return e6(this.raw,t,e)}},xs=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=Es(e,wn),this.publicKey=new Na(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}sign(e){return Jg(this.raw,e)}};function D2(r){if(r.length>wn){r=Es(r,wn+bs);let n=r.subarray(0,wn),o=r.subarray(wn,r.length);return new xs(n,o)}r=Es(r,wn);let e=r.subarray(0,wn),t=r.subarray(bs);return new xs(e,t)}function L2(r){return r=Es(r,bs),new Na(r)}async function r6(){let{privateKey:r,publicKey:e}=jg();return new xs(r,e)}function Es(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new P(`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 N2;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1"})(N2||(N2={}));(function(r){r.codec=()=>qe(N2)})(Ye||(Ye={}));var bn;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(bn||(bn={}));var Oa;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Oa||(Oa={}));var Fa={};Xe(Fa,{MAX_RSA_KEY_SIZE:()=>F2,generateRSAKeyPair:()=>H2,jwkToJWKKeyPair:()=>p6,jwkToPkcs1:()=>vA,jwkToPkix:()=>$2,jwkToRSAPrivateKey:()=>h6,pkcs1ToJwk:()=>d6,pkcs1ToRSAPrivateKey:()=>ru,pkixToJwk:()=>f6,pkixToRSAPublicKey:()=>K2});var dA=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),O2=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 d=0;d<16;d++,t+=4)So[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let f=So[d-15],h=So[d-2],p=Hr(f,7)^Hr(f,18)^f>>>3,g=Hr(h,17)^Hr(h,19)^h>>>10;So[d]=g+So[d-7]+p+So[d-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:l,H:u}=this;for(let d=0;d<64;d++){let f=Hr(a,6)^Hr(a,11)^Hr(a,25),h=u+f+Kl(a,c,l)+dA[d]+So[d]|0,g=(Hr(n,2)^Hr(n,13)^Hr(n,22))+Hl(n,o,i)|0;u=l,l=c,c=a,a=s+h|0,s=i,i=o,o=n,n=h+g|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,u=u+this.H|0,this.set(n,o,i,s,a,c,l,u)}roundClean(){So.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Ir=gs(()=>new O2);function O(r,e="utf8"){let t=Nl[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var fA=parseInt("11111",2),B2=parseInt("10000000",2),hA=parseInt("01111111",2),o6={2:pA,3:yA,5:gA,6:mA,16:M2,22:M2,48:M2};function Ma(r,e={offset:0}){let t=r[e.offset]&fA;if(e.offset++,o6[t]!=null)return o6[t](r,e);throw new Error("No decoder for tag "+t)}function Jl(r,e){let t=0;if((r[e.offset]&B2)===B2){let n=r[e.offset]&hA,o="0x";e.offset++;for(let i=0;i<n;i++,e.offset++)o+=r[e.offset].toString(16).padStart(2,"0");t=parseInt(o,16)}else t=r[e.offset],e.offset++;return t}function M2(r,e){Jl(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=Ma(r,e);if(n===null)break;t.push(n)}return t}function pA(r,e){let t=Jl(r,e),n=e.offset,o=e.offset+t,i=[];for(let s=n;s<o;s++)s===n&&r[s]===0||i.push(r[s]);return e.offset+=t,Uint8Array.from(i)}function mA(r,e){let t=Jl(r,e);return e.offset+=t,["oid-unimplemented"]}function gA(r,e){return e.offset++,null}function yA(r,e){let t=Jl(r,e),n=r[e.offset];e.offset++;let o=r.subarray(e.offset,e.offset+t);if(e.offset+=t,n!==0)throw new Error("Unused bits in bit string is unimplemented");return Ma(o,{offset:0})}function wA(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new ee;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function U2(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=wA(r.byteLength);return new ee(Uint8Array.from([e.byteLength|B2]),e)}function Tr(r){let e=new ee,t=parseInt("10000000",2);return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new ee(Uint8Array.from([2]),U2(e),e)}function i6(r){let e=Uint8Array.from([0]),t=new ee(e,r);return new ee(Uint8Array.from([3]),U2(t),t)}function eu(r){let e=new ee;for(let t of r)e.append(t);return new ee(Uint8Array.from([48]),U2(e),e)}function zt(r){if(isNaN(r)||r<=0)throw new P("random bytes length must be a Number bigger than 0");return ui(r)}var Ba=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},Ua=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},tu=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var s6={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new tu("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 tr=s6;async function a6(r){let e=await tr.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 bA(e);return{privateKey:t[0],publicKey:t[1]}}async function c6(r,e){let t=await tr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await tr.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function l6(r,e,t){let n=await tr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return tr.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function bA(r){if(r.privateKey==null||r.publicKey==null)throw new P("Private and public key are required");return Promise.all([tr.get().subtle.exportKey("jwk",r.privateKey),tr.get().subtle.exportKey("jwk",r.publicKey)])}function u6(r){if(r.kty!=="RSA")throw new P("invalid key type");if(r.n==null)throw new P("invalid key modulus");return N(r.n,"base64url").length*8}var vs=class{type="RSA";_key;_raw;_multihash;constructor(e,t){this._key=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=Fa.jwkToPkix(this._key)),this._raw}toMultihash(){return this._multihash}toCID(){return Q.createV1(114,this._multihash)}toString(){return be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}verify(e,t){return l6(this._key,t,e)}},Va=class{type="RSA";_key;_raw;publicKey;constructor(e,t){this._key=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=Fa.jwkToPkcs1(this._key)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}sign(e){return c6(this._key,e)}};var F2=8192,V2=18,xA=1062,EA=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function d6(r){let e=Ma(r);return{n:O(e[1],"base64url"),e:O(e[2],"base64url"),d:O(e[3],"base64url"),p:O(e[4],"base64url"),q:O(e[5],"base64url"),dp:O(e[6],"base64url"),dq:O(e[7],"base64url"),qi:O(e[8],"base64url"),kty:"RSA"}}function vA(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 P("JWK was missing components");return eu([Tr(Uint8Array.from([0])),Tr(N(r.n,"base64url")),Tr(N(r.e,"base64url")),Tr(N(r.d,"base64url")),Tr(N(r.p,"base64url")),Tr(N(r.q,"base64url")),Tr(N(r.dp,"base64url")),Tr(N(r.dq,"base64url")),Tr(N(r.qi,"base64url"))]).subarray()}function f6(r){let e=Ma(r,{offset:0});return{kty:"RSA",n:O(e[1][0],"base64url"),e:O(e[1][1],"base64url")}}function $2(r){if(r.n==null||r.e==null)throw new P("JWK was missing components");return eu([EA,i6(eu([Tr(N(r.n,"base64url")),Tr(N(r.e,"base64url"))]))]).subarray()}function ru(r){let e=d6(r);return h6(e)}function K2(r,e){if(r.byteLength>=xA)throw new kn("Key size is too large");let t=f6(r);if(e==null){let n=Ir(bn.encode({Type:Ye.RSA,Data:r}));e=Nt(V2,n)}return new vs(t,e)}function h6(r){if(u6(r)>F2)throw new P("Key size is too large");let e=p6(r),t=Ir(bn.encode({Type:Ye.RSA,Data:$2(e.publicKey)})),n=Nt(V2,t);return new Va(e.privateKey,new vs(e.publicKey,n))}async function H2(r){if(r>F2)throw new P("Key size is too large");let e=await a6(r),t=Ir(bn.encode({Type:Ye.RSA,Data:$2(e.publicKey)})),n=Nt(V2,t);return new Va(e.privateKey,new vs(e.publicKey,n))}function p6(r){if(r==null)throw new P("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}var nu=class extends ms{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,ai(e);let n=qr(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 ps(this),this.iHash.update(e),this}digestInto(e){ps(this),hs(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()}},Ao=(r,e,t)=>new nu(r,e).update(t).digest();Ao.create=(r,e)=>new nu(r,e);function m6(r){r.lowS!==void 0&&zr("lowS",r.lowS),r.prehash!==void 0&&zr("prehash",r.prehash)}function SA(r){let e=Pa(r);Ar(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("invalid 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("invalid endomorphism, expected beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:AA,hexToBytes:IA}=Gl,q2=class extends Error{constructor(e=""){super(e)}},Un={Err:q2,_tlv:{encode:(r,e)=>{let{Err:t}=Un;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=di(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let i=n>127?di(o.length/2|128):"";return di(r)+i+o+e},decode(r,e){let{Err:t}=Un,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 u of l)s=s<<8|u;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}=Un;if(r<Fn)throw new e("integer: negative integers are not allowed");let t=di(r);if(Number.parseInt(t[0],16)&8&&(t="00"+t),t.length&1)throw new e("unexpected DER parsing assertion: unpadded hex");return t},decode(r){let{Err:e}=Un;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 AA(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Un,o=typeof r=="string"?IA(r):r;ys(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:u}=n.decode(2,c);if(u.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}=Un,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),i=n+o;return e.encode(48,i)}},Fn=BigInt(0),dt=BigInt(1),nB=BigInt(2),g6=BigInt(3),oB=BigInt(4);function TA(r){let e=SA(r),{Fp:t}=e,n=Eo(e.n,e.nBitLength),o=e.toBytes||((g,m,y)=>{let x=m.toAffine();return Bn(Uint8Array.from([4]),t.toBytes(x.x),t.toBytes(x.y))}),i=e.fromBytes||(g=>{let m=g.subarray(1),y=t.fromBytes(m.subarray(0,t.BYTES)),x=t.fromBytes(m.subarray(t.BYTES,2*t.BYTES));return{x:y,y:x}});function s(g){let{a:m,b:y}=e,x=t.sqr(g),w=t.mul(x,g);return t.add(t.add(w,t.mul(g,m)),y)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function a(g){return Ca(g,dt,e.n)}function c(g){let{allowedPrivateKeyLengths:m,nByteLength:y,wrapPrivateKey:x,n:w}=e;if(m&&typeof g!="bigint"){if(bo(g)&&(g=Nn(g)),typeof g!="string"||!m.includes(g.length))throw new Error("invalid private key");g=g.padStart(y*2,"0")}let I;try{I=typeof g=="bigint"?g:On(Le("private key",g,y))}catch{throw new Error("invalid private key, expected hex or "+y+" bytes, got "+typeof g)}return x&&(I=Ie(I,w)),wt("private key",I,dt,w),I}function l(g){if(!(g instanceof f))throw new Error("ProjectivePoint expected")}let u=hi((g,m)=>{let{px:y,py:x,pz:w}=g;if(t.eql(w,t.ONE))return{x:y,y:x};let I=g.is0();m==null&&(m=I?t.ONE:t.inv(w));let M=t.mul(y,m),D=t.mul(x,m),R=t.mul(w,m);if(I)return{x:t.ZERO,y:t.ZERO};if(!t.eql(R,t.ONE))throw new Error("invZ was invalid");return{x:M,y:D}}),d=hi(g=>{if(g.is0()){if(e.allowInfinityPoint&&!t.is0(g.py))return;throw new Error("bad point: ZERO")}let{x:m,y}=g.toAffine();if(!t.isValid(m)||!t.isValid(y))throw new Error("bad point: x or y not FE");let x=t.sqr(y),w=s(m);if(!t.eql(x,w))throw new Error("bad point: equation left != right");if(!g.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class f{constructor(m,y,x){if(this.px=m,this.py=y,this.pz=x,m==null||!t.isValid(m))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(x==null||!t.isValid(x))throw new Error("z required");Object.freeze(this)}static fromAffine(m){let{x:y,y:x}=m||{};if(!m||!t.isValid(y)||!t.isValid(x))throw new Error("invalid affine point");if(m instanceof f)throw new Error("projective point not allowed");let w=I=>t.eql(I,t.ZERO);return w(y)&&w(x)?f.ZERO:new f(y,x,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(m){let y=t.invertBatch(m.map(x=>x.pz));return m.map((x,w)=>x.toAffine(y[w])).map(f.fromAffine)}static fromHex(m){let y=f.fromAffine(i(Le("pointHex",m)));return y.assertValidity(),y}static fromPrivateKey(m){return f.BASE.multiply(c(m))}static msm(m,y){return Zl(f,n,m,y)}_setWindowSize(m){p.setWindowSize(this,m)}assertValidity(){d(this)}hasEvenY(){let{y:m}=this.toAffine();if(t.isOdd)return!t.isOdd(m);throw new Error("Field doesn't support isOdd")}equals(m){l(m);let{px:y,py:x,pz:w}=this,{px:I,py:M,pz:D}=m,R=t.eql(t.mul(y,D),t.mul(I,w)),S=t.eql(t.mul(x,D),t.mul(M,w));return R&&S}negate(){return new f(this.px,t.neg(this.py),this.pz)}double(){let{a:m,b:y}=e,x=t.mul(y,g6),{px:w,py:I,pz:M}=this,D=t.ZERO,R=t.ZERO,S=t.ZERO,A=t.mul(w,w),F=t.mul(I,I),L=t.mul(M,M),U=t.mul(w,I);return U=t.add(U,U),S=t.mul(w,M),S=t.add(S,S),D=t.mul(m,S),R=t.mul(x,L),R=t.add(D,R),D=t.sub(F,R),R=t.add(F,R),R=t.mul(D,R),D=t.mul(U,D),S=t.mul(x,S),L=t.mul(m,L),U=t.sub(A,L),U=t.mul(m,U),U=t.add(U,S),S=t.add(A,A),A=t.add(S,A),A=t.add(A,L),A=t.mul(A,U),R=t.add(R,A),L=t.mul(I,M),L=t.add(L,L),A=t.mul(L,U),D=t.sub(D,A),S=t.mul(L,F),S=t.add(S,S),S=t.add(S,S),new f(D,R,S)}add(m){l(m);let{px:y,py:x,pz:w}=this,{px:I,py:M,pz:D}=m,R=t.ZERO,S=t.ZERO,A=t.ZERO,F=e.a,L=t.mul(e.b,g6),U=t.mul(y,I),K=t.mul(x,M),C=t.mul(w,D),k=t.add(y,x),v=t.add(I,M);k=t.mul(k,v),v=t.add(U,K),k=t.sub(k,v),v=t.add(y,w);let E=t.add(I,D);return v=t.mul(v,E),E=t.add(U,C),v=t.sub(v,E),E=t.add(x,w),R=t.add(M,D),E=t.mul(E,R),R=t.add(K,C),E=t.sub(E,R),A=t.mul(F,v),R=t.mul(L,C),A=t.add(R,A),R=t.sub(K,A),A=t.add(K,A),S=t.mul(R,A),K=t.add(U,U),K=t.add(K,U),C=t.mul(F,C),v=t.mul(L,v),K=t.add(K,C),C=t.sub(U,C),C=t.mul(F,C),v=t.add(v,C),U=t.mul(K,v),S=t.add(S,U),U=t.mul(E,v),R=t.mul(k,R),R=t.sub(R,U),U=t.mul(k,K),A=t.mul(E,A),A=t.add(A,U),new f(R,S,A)}subtract(m){return this.add(m.negate())}is0(){return this.equals(f.ZERO)}wNAF(m){return p.wNAFCached(this,m,f.normalizeZ)}multiplyUnsafe(m){let{endo:y,n:x}=e;wt("scalar",m,Fn,x);let w=f.ZERO;if(m===Fn)return w;if(this.is0()||m===dt)return this;if(!y||p.hasPrecomputes(this))return p.wNAFCachedUnsafe(this,m,f.normalizeZ);let{k1neg:I,k1:M,k2neg:D,k2:R}=y.splitScalar(m),S=w,A=w,F=this;for(;M>Fn||R>Fn;)M&dt&&(S=S.add(F)),R&dt&&(A=A.add(F)),F=F.double(),M>>=dt,R>>=dt;return I&&(S=S.negate()),D&&(A=A.negate()),A=new f(t.mul(A.px,y.beta),A.py,A.pz),S.add(A)}multiply(m){let{endo:y,n:x}=e;wt("scalar",m,dt,x);let w,I;if(y){let{k1neg:M,k1:D,k2neg:R,k2:S}=y.splitScalar(m),{p:A,f:F}=this.wNAF(D),{p:L,f:U}=this.wNAF(S);A=p.constTimeNegate(M,A),L=p.constTimeNegate(R,L),L=new f(t.mul(L.px,y.beta),L.py,L.pz),w=A.add(L),I=F.add(U)}else{let{p:M,f:D}=this.wNAF(m);w=M,I=D}return f.normalizeZ([w,I])[0]}multiplyAndAddUnsafe(m,y,x){let w=f.BASE,I=(D,R)=>R===Fn||R===dt||!D.equals(w)?D.multiplyUnsafe(R):D.multiply(R),M=I(this,y).add(I(m,x));return M.is0()?void 0:M}toAffine(m){return u(this,m)}isTorsionFree(){let{h:m,isTorsionFree:y}=e;if(m===dt)return!0;if(y)return y(f,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:m,clearCofactor:y}=e;return m===dt?this:y?y(f,this):this.multiplyUnsafe(e.h)}toRawBytes(m=!0){return zr("isCompressed",m),this.assertValidity(),o(f,this,m)}toHex(m=!0){return zr("isCompressed",m),Nn(this.toRawBytes(m))}}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=Xl(f,e.endo?Math.ceil(h/2):h);return{CURVE:e,ProjectivePoint:f,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:a}}function _A(r){let e=Pa(r);return Ar(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function y6(r){let e=_A(r),{Fp:t,n}=e,o=t.BYTES+1,i=2*t.BYTES+1;function s(C){return Ie(C,n)}function a(C){return Ql(C,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:u,isWithinCurveOrder:d}=TA({...e,toBytes(C,k,v){let E=k.toAffine(),_=t.toBytes(E.x),T=Bn;return zr("isCompressed",v),v?T(Uint8Array.from([k.hasEvenY()?2:3]),_):T(Uint8Array.from([4]),_,t.toBytes(E.y))},fromBytes(C){let k=C.length,v=C[0],E=C.subarray(1);if(k===o&&(v===2||v===3)){let _=On(E);if(!Ca(_,dt,t.ORDER))throw new Error("Point is not on curve");let T=u(_),H;try{H=t.sqrt(T)}catch(ce){let se=ce instanceof Error?": "+ce.message:"";throw new Error("Point is not on curve"+se)}let q=(H&dt)===dt;return(v&1)===1!==q&&(H=t.neg(H)),{x:_,y:H}}else if(k===i&&v===4){let _=t.fromBytes(E.subarray(0,t.BYTES)),T=t.fromBytes(E.subarray(t.BYTES,2*t.BYTES));return{x:_,y:T}}else{let _=o,T=i;throw new Error("invalid Point, expected length of "+_+", or uncompressed "+T+", got "+k)}}}),f=C=>Nn(xo(C,e.nByteLength));function h(C){let k=n>>dt;return C>k}function p(C){return h(C)?s(-C):C}let g=(C,k,v)=>On(C.slice(k,v));class m{constructor(k,v,E){this.r=k,this.s=v,this.recovery=E,this.assertValidity()}static fromCompact(k){let v=e.nByteLength;return k=Le("compactSignature",k,v*2),new m(g(k,0,v),g(k,v,2*v))}static fromDER(k){let{r:v,s:E}=Un.toSig(Le("DER",k));return new m(v,E)}assertValidity(){wt("r",this.r,dt,n),wt("s",this.s,dt,n)}addRecoveryBit(k){return new m(this.r,this.s,k)}recoverPublicKey(k){let{r:v,s:E,recovery:_}=this,T=D(Le("msgHash",k));if(_==null||![0,1,2,3].includes(_))throw new Error("recovery id invalid");let H=_===2||_===3?v+e.n:v;if(H>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let q=(_&1)===0?"02":"03",X=c.fromHex(q+f(H)),ce=a(H),se=s(-T*ce),fe=s(E*ce),Ee=c.BASE.multiplyAndAddUnsafe(X,se,fe);if(!Ee)throw new Error("point at infinify");return Ee.assertValidity(),Ee}hasHighS(){return h(this.s)}normalizeS(){return this.hasHighS()?new m(this.r,s(-this.s),this.recovery):this}toDERRawBytes(){return fi(this.toDERHex())}toDERHex(){return Un.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return fi(this.toCompactHex())}toCompactHex(){return f(this.r)+f(this.s)}}let y={isValidPrivateKey(C){try{return l(C),!0}catch{return!1}},normPrivateKeyToScalar:l,randomPrivateKey:()=>{let C=I2(e.n);return Kg(e.randomBytes(C),e.n)},precompute(C=8,k=c.BASE){return k._setWindowSize(C),k.multiply(BigInt(3)),k}};function x(C,k=!0){return c.fromPrivateKey(C).toRawBytes(k)}function w(C){let k=bo(C),v=typeof C=="string",E=(k||v)&&C.length;return k?E===o||E===i:v?E===2*o||E===2*i:C instanceof c}function I(C,k,v=!0){if(w(C))throw new Error("first arg must be private key");if(!w(k))throw new Error("second arg must be public key");return c.fromHex(k).multiply(l(C)).toRawBytes(v)}let M=e.bits2int||function(C){if(C.length>8192)throw new Error("input is too large");let k=On(C),v=C.length*8-e.nBitLength;return v>0?k>>BigInt(v):k},D=e.bits2int_modN||function(C){return s(M(C))},R=ka(e.nBitLength);function S(C){return wt("num < 2^"+e.nBitLength,C,Fn,R),xo(C,e.nByteLength)}function A(C,k,v=F){if(["recovered","canonical"].some(Me=>Me in v))throw new Error("sign() legacy options not supported");let{hash:E,randomBytes:_}=e,{lowS:T,prehash:H,extraEntropy:q}=v;T==null&&(T=!0),C=Le("msgHash",C),m6(v),H&&(C=Le("prehashed msgHash",E(C)));let X=D(C),ce=l(k),se=[S(ce),S(X)];if(q!=null&&q!==!1){let Me=q===!0?_(t.BYTES):q;se.push(Le("extraEntropy",Me))}let fe=Bn(...se),Ee=X;function Oe(Me){let Ke=M(Me);if(!d(Ke))return;let _t=a(Ke),Zt=c.BASE.multiply(Ke).toAffine(),$t=s(Zt.x);if($t===Fn)return;let fn=s(_t*s(Ee+$t*ce));if(fn===Fn)return;let Cn=(Zt.x===$t?0:2)|Number(Zt.y&dt),ya=fn;return T&&h(fn)&&(ya=p(fn),Cn^=1),new m($t,ya,Cn)}return{seed:fe,k2sig:Oe}}let F={lowS:e.lowS,prehash:!1},L={lowS:e.lowS,prehash:!1};function U(C,k,v=F){let{seed:E,k2sig:_}=A(C,k,v),T=e;return x2(T.hash.outputLen,T.nByteLength,T.hmac)(E,_)}c.BASE._setWindowSize(8);function K(C,k,v,E=L){let _=C;k=Le("msgHash",k),v=Le("publicKey",v);let{lowS:T,prehash:H,format:q}=E;if(m6(E),"strict"in E)throw new Error("options.strict was renamed to lowS");if(q!==void 0&&q!=="compact"&&q!=="der")throw new Error("format must be compact or der");let X=typeof _=="string"||bo(_),ce=!X&&!q&&typeof _=="object"&&_!==null&&typeof _.r=="bigint"&&typeof _.s=="bigint";if(!X&&!ce)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");let se,fe;try{if(ce&&(se=new m(_.r,_.s)),X){try{q!=="compact"&&(se=m.fromDER(_))}catch(Cn){if(!(Cn instanceof Un.Err))throw Cn}!se&&q!=="der"&&(se=m.fromCompact(_))}fe=c.fromHex(v)}catch{return!1}if(!se||T&&se.hasHighS())return!1;H&&(k=e.hash(k));let{r:Ee,s:Oe}=se,Me=D(k),Ke=a(Oe),_t=s(Me*Ke),Zt=s(Ee*Ke),$t=c.BASE.multiplyAndAddUnsafe(fe,_t,Zt)?.toAffine();return $t?s($t.x)===Ee:!1}return{CURVE:e,getPublicKey:x,getSharedSecret:I,sign:U,verify:K,ProjectivePoint:c,Signature:m,utils:y}}function CA(r){return{hash:r,hmac:(e,...t)=>Ao(r,e,h2(...t)),randomBytes:ui}}function w6(r,e){let t=n=>y6({...r,...CA(n)});return{...t(e),create:t}}var E6=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),b6=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),kA=BigInt(1),z2=BigInt(2),x6=(r,e)=>(r+e/z2)/e;function PA(r){let e=E6,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,u=l*l*r%e,d=Fe(u,t,e)*u%e,f=Fe(d,t,e)*u%e,h=Fe(f,z2,e)*l%e,p=Fe(h,o,e)*h%e,g=Fe(p,i,e)*p%e,m=Fe(g,a,e)*g%e,y=Fe(m,c,e)*m%e,x=Fe(y,a,e)*g%e,w=Fe(x,t,e)*u%e,I=Fe(w,s,e)*p%e,M=Fe(I,n,e)*l%e,D=Fe(M,z2,e);if(!W2.eql(W2.sqr(D),r))throw new Error("Cannot find square root");return D}var W2=Eo(E6,void 0,void 0,{sqrt:PA}),_r=w6({a:BigInt(0),b:BigInt(7),Fp:W2,n:b6,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=b6,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-kA*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=t,s=BigInt("0x100000000000000000000000000000000"),a=x6(i*r,e),c=x6(-n*r,e),l=Ie(r-a*t-c*o,e),u=Ie(-a*n-c*i,e),d=l>s,f=u>s;if(d&&(l=e-l),f&&(u=e-u),l>s||u>s)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:d,k1:l,k2neg:f,k2:u}}}},Ir),hB=BigInt(0);var pB=_r.ProjectivePoint;function G2(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function v6(r,e){let t=Qe.digest(e instanceof Uint8Array?e:e.subarray());if(G2(t))return t.then(({digest:n})=>_r.sign(n,r).toDERRawBytes()).catch(n=>{throw new Ba(String(n))});try{return _r.sign(t.digest,r).toDERRawBytes()}catch(n){throw new Ba(String(n))}}function S6(r,e,t){let n=Qe.digest(t instanceof Uint8Array?t:t.subarray());if(G2(n))return n.then(({digest:o})=>_r.verify(e,o,r)).catch(o=>{throw new Ua(String(o))});try{return _r.verify(e,n.digest,r)}catch(o){throw new Ua(String(o))}}var $a=class{type="secp256k1";raw;_key;constructor(e){this._key=T6(e),this.raw=A6(this._key)}toMultihash(){return Jt.digest(Ot(this))}toCID(){return Q.createV1(114,this.toMultihash())}toString(){return be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}verify(e,t){return S6(this._key,t,e)}},Ka=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=I6(e),this.publicKey=new $a(t??_6(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}sign(e){return v6(this.raw,e)}};function Q2(r){return new Ka(r)}function Y2(r){return new $a(r)}async function C6(){let r=RA();return new Ka(r)}function A6(r){return _r.ProjectivePoint.fromHex(r).toRawBytes(!0)}function I6(r){try{return _r.getPublicKey(r,!0),r}catch(e){throw new wa(String(e))}}function T6(r){try{return _r.ProjectivePoint.fromHex(r),r}catch(e){throw new kn(String(e))}}function _6(r){try{return _r.getPublicKey(r,!0)}catch(e){throw new wa(String(e))}}function RA(){return _r.utils.randomPrivateKey()}async function ou(r,e){if(r==="Ed25519")return r6();if(r==="secp256k1")return C6();if(r==="RSA")return H2(e??2048);throw new Fr}function rt(r,e){let{Type:t,Data:n}=bn.decode(r),o=n??new Uint8Array;switch(t){case Ye.RSA:return K2(o,e);case Ye.Ed25519:return L2(o);case Ye.secp256k1:return Y2(o);default:throw new Fr}}function iu(r){let{Type:e,Data:t}=bn.decode(r.digest),n=t??new Uint8Array;switch(e){case Ye.Ed25519:return L2(n);case Ye.secp256k1:return Y2(n);default:throw new Fr}}function Ot(r){return bn.encode({Type:Ye[r.type],Data:r.raw})}function k6(r){let e=Oa.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Ye.RSA:return ru(t);case Ye.Ed25519:return D2(t);case Ye.secp256k1:return Q2(t);default:throw new Fr}}function P6(r){return r.byteLength===64?D2(r):r.byteLength===32?Q2(r):ru(r)}function Ss(r){return Oa.encode({Type:Ye[r.type],Data:r.raw})}var R6=Symbol.for("nodejs.util.inspect.custom"),DA=114,Ha=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()})`}[ul]=!0;toString(){return this.string==null&&(this.string=be.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return Q.createV1(DA,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return j(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return j(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[R6](){return`PeerId(${this.toString()})`}},qa=class extends Ha{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},za=class extends Ha{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},Wa=class extends Ha{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},LA=2336,Ga=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Jt.digest(N(this.url))}[R6](){return`PeerId(${this.url})`}[ul]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return Q.createV1(LA,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=O(e)),e.toString()===this.toString())}};var NA=114,D6=2336;function Ve(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=ve(be.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Qr(Q.parse(r));if(e==null)throw new P('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=ve(e.decode(r))}return it(t)}function xn(r){if(r.type==="Ed25519")return new za({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 qa({multihash:r.toCID().multihash,publicKey:r});throw new Fr}function L6(r){return xn(r.publicKey)}function it(r){if(MA(r))return new qa({multihash:r});if(OA(r))try{let e=iu(r);if(e.type==="Ed25519")return new za({multihash:r,publicKey:e});if(e.type==="secp256k1")return new Wa({multihash:r,publicKey:e})}catch{let t=O(r.digest);return new Ga(new URL(t))}throw new co("Supplied PeerID Multihash is invalid")}function Qr(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==NA&&r.code!==D6)throw new ml("Supplied PeerID CID is invalid");if(r.code===D6){let e=O(r.multihash.digest);return new Ga(new URL(e))}return it(r.multihash)}function OA(r){return r.code===Jt.code}function MA(r){return r.code===Qe.code}function mi(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 su(r){let e=ve(be.decode(`z${r}`));return it(e)}var ft=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 mi(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 mi(this.map.values(),e=>e.key)}values(){return mi(this.map.values(),e=>e.value)}get size(){return this.map.size}};var Wt=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 mi(this.set.entries(),e=>{let t=su(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=su(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return mi(this.set.values(),e=>su(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 X2(){return new Wt}function N6(r,e,t,n){ai(r);let o=Ng({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=qr(e),l=qr(t),u=new Uint8Array(s),d=Ao.create(r,c),f=d._cloneInto().update(l);return{c:i,dkLen:s,asyncTick:a,DK:u,PRF:d,PRFSalt:f}}function O6(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function M6(r,e,t,n){let{c:o,dkLen:i,DK:s,PRF:a,PRFSalt:c}=N6(r,e,t,n),l,u=new Uint8Array(4),d=li(u),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<i;h++,p+=a.outputLen){let g=s.subarray(p,p+a.outputLen);d.setInt32(0,h,!1),(l=c._cloneInto(l)).update(u).digestInto(f),g.set(f.subarray(0,g.length));for(let m=1;m<o;m++){a._cloneInto(l).update(f).digestInto(f);for(let y=0;y<g.length;y++)g[y]^=f[y]}}return O6(a,c,s,l,f)}async function au(r,e,t,n){let{c:o,dkLen:i,asyncTick:s,DK:a,PRF:c,PRFSalt:l}=N6(r,e,t,n),u,d=new Uint8Array(4),f=li(d),h=new Uint8Array(c.outputLen);for(let p=1,g=0;g<i;p++,g+=c.outputLen){let m=a.subarray(g,g+c.outputLen);f.setInt32(0,p,!1),(u=l._cloneInto(u)).update(d).digestInto(h),m.set(h.subarray(0,m.length)),await Dg(o-1,s,()=>{c._cloneInto(u).update(h).digestInto(h);for(let y=0;y<m.length;y++)m[y]^=h[y]})}return O6(c,l,a,u,h)}var Qa=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),Io=new Uint32Array(80),Z2=class extends mo{constructor(){super(64,20,8,!1),this.A=Qa[0]|0,this.B=Qa[1]|0,this.C=Qa[2]|0,this.D=Qa[3]|0,this.E=Qa[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,u;c<20?(l=Kl(o,i,s),u=1518500249):c<40?(l=o^i^s,u=1859775393):c<60?(l=Hl(o,i,s),u=2400959708):(l=o^i^s,u=3395469782);let d=$l(n,5)+l+a+u+Io[c]|0;a=s,s=i,i=$l(o,30),o=n,n=d}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)}},B6=gs(()=>new Z2);var U6={sha1:B6,"sha2-256":Ir,"sha2-512":wo};function Ya(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(U6).join(" / ");throw new P(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let i=U6[o],s=M6(i,r,e,{c:t,dkLen:n});return ot.encode(s).substring(1)}var j2={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},F6={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},V6=new globalThis.TextEncoder;function BA(r,e){let t=j2[e],n=F6[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function UA(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=j2[e],o=F6[e],i=r;for(;i.length>0;){let s=V6.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 J2(r,{size:e=32,utf8Buffer:t}={}){if(!j2[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 UA(r,e,t);r=V6.encode(r)}return BA(r,e)}var Xa={hash:r=>Number(J2(r,{size:32})),hashV:(r,e)=>FA(Xa.hash(r,e))};function FA(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),N(e,"base16")}var ep=64,Yr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>ep)throw new TypeError("Invalid Fingerprint Size");let i=t.hashV(e,n),s=ae(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?j(this.fp,e.fp):!1}};function gi(r,e){return Math.floor(Math.random()*(e-r))+r}var yi=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Yr))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Yr))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 Yr))throw new TypeError("Invalid Fingerprint");let t=gi(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Yr))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var VA=500,Za=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??gi(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=N(e));let t=new Yr(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 yi(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new yi(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let i=[n,o],s=i[gi(0,i.length-1)];this.buckets[s]==null&&(this.buckets[s]=new yi(this.bucketSize));for(let a=0;a<VA;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 yi(this.bucketSize)),this.buckets[s].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=N(e));let t=new Yr(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=N(e));let t=new Yr(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}},$A={1:.5,2:.84,4:.95,8:.98};function KA(r=.001){return r>.002?2:r>1e-5?4:8}function $6(r,e=.001){let t=KA(e),n=$A[t],o=Math.round(r/n),i=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),ep);return{filterSize:o,bucketSize:t,fingerprintSize:i}}var cu=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??gi(0,Math.pow(2,10)),this.filterSeries=[new Za({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=N(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 Za({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=N(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=N(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 rr(r,e=.001,t){return new cu({...$6(r,e),...t??{}})}var lu=class{filter;constructor(e,t){this.filter=rr(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 tp(r,e=.001){return new lu(r,e)}var rp=class extends ft{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 rp({name:e,metrics:t}):n=new ft,n}var Vn=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=ot.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=ot.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=ot.encode(e.multihash.bytes);this.blocks.set(n,t)}};function HA(r){let e=new Uint8Array(r.reduce((n,o)=>n+ue(o),0)),t=0;for(let n of r)e=De(n,e,t),t+=ue(n);return e}var K6=HA;function np(r){return K6([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var uu=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 Vn,n=new Set;for(let[o,i]of this.wants.entries())try{let s=await this.blockstore.get(i.cid,e);i.wantType===tt.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:np(i.cid)})):(this.log("sending have for %c",i.cid),t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Sr.HaveBlock})):(this.log("sending block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:np(i.cid)}))}catch(s){if(s.name!=="NotFoundError")throw s;if(this.log("do not have block for %c",i.cid),!i.sendDontHave||i.sentDoNotHave===!0)continue;i.sentDoNotHave=!0,t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Sr.DoNotHaveBlock})}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 du=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 uu({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=Q.decode(o.cid),s=O(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===tt.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??tt.WantBlock,sendDontHave:o.sendDontHave??!1}))}}this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=O(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 qA(r,e){try{if(typeof r=="string"&&r.length>0)return zA(r);if(typeof r=="number"&&isFinite(r))return e?.long?GA(r):WA(r);throw new Error("Value is not a string or number.")}catch(t){let n=QA(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function zA(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 hu=qA;function WA(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 GA(r){let e=Math.abs(r);return e>=864e5?fu(r,e,864e5,"day"):e>=36e5?fu(r,e,36e5,"hour"):e>=6e4?fu(r,e,6e4,"minute"):e>=1e3?fu(r,e,1e3,"second"):`${r} ms`}function fu(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function QA(r){return typeof r=="object"&&r!==null&&"message"in r}function op(r){t.debug=t,t.default=t,t.coerce=c,t.disable=i,t.enable=o,t.enabled=s,t.humanize=hu,t.destroy=l,Object.keys(r).forEach(u=>{t[u]=r[u]}),t.names=[],t.skips=[],t.formatters={};function e(u){let d=0;for(let f=0;f<u.length;f++)d=(d<<5)-d+u.charCodeAt(f),d|=0;return t.colors[Math.abs(d)%t.colors.length]}t.selectColor=e;function t(u){let d,f=null,h,p;function g(...m){if(!g.enabled)return;let y=g,x=Number(new Date),w=x-(d||x);y.diff=w,y.prev=d,y.curr=x,d=x,m[0]=t.coerce(m[0]),typeof m[0]!="string"&&m.unshift("%O");let I=0;m[0]=m[0].replace(/%([a-zA-Z%])/g,(D,R)=>{if(D==="%%")return"%";I++;let S=t.formatters[R];if(typeof S=="function"){let A=m[I];D=S.call(y,A),m.splice(I,1),I--}return D}),t.formatArgs.call(y,m),(y.log||t.log).apply(y,m)}return g.namespace=u,g.useColors=t.useColors(),g.color=t.selectColor(u),g.extend=n,g.destroy=t.destroy,Object.defineProperty(g,"enabled",{enumerable:!0,configurable:!1,get:()=>f!==null?f:(h!==t.namespaces&&(h=t.namespaces,p=t.enabled(u)),p),set:m=>{f=m}}),typeof t.init=="function"&&t.init(g),g}function n(u,d){let f=t(this.namespace+(typeof d>"u"?":":d)+u);return f.log=this.log,f}function o(u){t.save(u),t.namespaces=u,t.names=[],t.skips=[];let d,f=(typeof u=="string"?u:"").split(/[\s,]+/),h=f.length;for(d=0;d<h;d++)f[d]&&(u=f[d].replace(/\*/g,".*?"),u[0]==="-"?t.skips.push(new RegExp("^"+u.substr(1)+"$")):t.names.push(new RegExp("^"+u+"$")))}function i(){let u=[...t.names.map(a),...t.skips.map(a).map(d=>"-"+d)].join(",");return t.enable(""),u}function s(u){if(u[u.length-1]==="*")return!0;let d,f;for(d=0,f=t.skips.length;d<f;d++)if(t.skips[d].test(u))return!1;for(d=0,f=t.names.length;d<f;d++)if(t.names[d].test(u))return!0;return!1}function a(u){return u.toString().substring(2,u.toString().length-2).replace(/\.\*\?$/,"*")}function c(u){return u instanceof Error?u.stack??u.message:u}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 pu=tI(),YA=["#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 XA(){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 ZA(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+hu(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 jA=console.debug??console.log??(()=>{});function JA(r){try{r?pu?.setItem("debug",r):pu?.removeItem("debug")}catch{}}function eI(){let r;try{r=pu?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function tI(){try{return localStorage}catch{}}function rI(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var H6=op({formatArgs:ZA,save:JA,load:eI,useColors:XA,setupFormatters:rI,colors:YA,storage:pu,log:jA});var nr=H6;nr.formatters.b=r=>r==null?"undefined":be.baseEncode(r);nr.formatters.t=r=>r==null?"undefined":at.baseEncode(r);nr.formatters.m=r=>r==null?"undefined":ot.baseEncode(r);nr.formatters.p=r=>r==null?"undefined":r.toString();nr.formatters.c=r=>r==null?"undefined":r.toString();nr.formatters.k=r=>r==null?"undefined":r.toString();nr.formatters.a=r=>r==null?"undefined":r.toString();nr.formatters.e=r=>r==null?"undefined":q6(r.stack)??q6(r.message)??r.toString();function nI(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 hr(r)}}}function hr(r){let e=nI(`${r}:trace`);return nr.enabled(`${r}:trace`)&&nr.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=nr(`${r}:trace`)),Object.assign(nr(r),{error:nr(`${r}:error`),trace:e})}function q6(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var sp=Br(W6(),1);var ec=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},ap=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},G6=r=>globalThis.DOMException===void 0?new ap(r):new DOMException(r),Q6=r=>{let e=r.reason===void 0?G6("This operation was aborted."):r.reason;return e instanceof Error?e:G6(e)};function Xr(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((u,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:h}=e;h.aborted&&d(Q6(h)),a=()=>{d(Q6(h))},h.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(u,d);return}let f=new ec;s=i.setTimeout.call(void 0,()=>{if(n){try{u(n())}catch(h){d(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?u():o instanceof Error?d(o):(f.message=o??`Promise timed out after ${t} milliseconds`,d(f))},t),(async()=>{try{u(await r)}catch(h){d(h)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}function cp(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,id:t.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=cp(this.#e,n,(i,s)=>s.priority-i.priority);this.#e.splice(o,0,n)}setPriority(e,t){let n=this.#e.findIndex(i=>i.id===e);if(n===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[o]=this.#e.splice(n,1);this.enqueue(o.run,{priority:t,id:e})}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 En=class extends sp.default{#e;#t;#r=0;#o;#a;#l=0;#i;#u;#n;#m;#s=0;#d;#c;#g;#b=1n;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#x(){return this.#t||this.#r<this.#o}get#E(){return this.#s<this.#d}#v(){this.#s--,this.#f(),this.emit("next")}#S(){this.#w(),this.#y(),this.#u=void 0}get#A(){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.#S()},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.#A;if(this.#x&&this.#E){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#I(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}setPriority(e,t){this.#n.setPriority(e,t)}async add(e,t={}){return t.id??=(this.#b++).toString(),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=Xr(Promise.resolve(i),{milliseconds:t.timeout})),t.signal&&(i=Promise.race([i,this.#I(t.signal)]));let s=await i;n(s),this.emit("completed",s)}catch(i){if(i instanceof ec&&!t.throwOnTimeout){n();return}o(i),this.emit("error",i)}finally{this.#v()}},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 gu(r){let e=[pr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var lp=60;function yu(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:pr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:pr[e.type],TTL:e.TTL??e.ttl??lp,data:e.data instanceof Uint8Array?O(e.data):e.data}))}}var sI=4;function up(r,e={}){let t=new En({concurrency:e.queryConcurrency??sI});return async(n,o={})=>{let i=new URLSearchParams;i.set("name",n),gu(o.types).forEach(a=>{i.append("type",pr[a])}),o.onProgress?.(new W("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=yu(await a.json());return o.onProgress?.(new W("dns:response",{detail:c})),c},{signal:o.signal});if(s==null)throw new Error("No DNS response received");return s}}function Y6(){return[up("https://cloudflare-dns.com/dns-query"),up("https://dns.google/resolve")]}var j6=Br(Z6(),1);var dp=class{lru;constructor(e){this.lru=(0,j6.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 yu({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:pr[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??lp)*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 J6(r){return new dp(r)}var aI=1e3,wu=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=J6(e.cacheSize??aI),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["."]=Y6())}async query(e,t={}){let n=gu(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new W("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 u of l.Answer)this.cache.add(e,u);return l}catch(l){a.push(l),t.onProgress?.(new W("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var pr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(pr||(pr={}));function bu(r={}){return new wu(r)}var cI=["string","number","bigint","symbol"],lI=["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 e8(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(cI.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(uI(r))return"Buffer";let t=dI(r);return t||"Object"}function uI(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function dI(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(lI.includes(e))return e}var b=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}};b.uint=new b(0,"uint",!0);b.negint=new b(1,"negint",!0);b.bytes=new b(2,"bytes",!0);b.string=new b(3,"string",!0);b.array=new b(4,"array",!1);b.map=new b(5,"map",!1);b.tag=new b(6,"tag",!1);b.float=new b(7,"float",!0);b.false=new b(7,"false",!0);b.true=new b(7,"true",!0);b.null=new b(7,"null",!0);b.undefined=new b(7,"undefined",!0);b.break=new b(7,"break",!0);var B=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 As=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",fI=new TextDecoder,hI=new TextEncoder;function xu(r){return As&&globalThis.Buffer.isBuffer(r)}function rc(r){return r instanceof Uint8Array?xu(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var o8=As?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):r8(r,e,t):(r,e,t)=>t-e>64?fI.decode(r.subarray(e,t)):r8(r,e,t),Eu=As?r=>r.length>64?globalThis.Buffer.from(r):t8(r):r=>r.length>64?hI.encode(r):t8(r),vn=r=>Uint8Array.from(r),Is=As?(r,e,t)=>xu(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),i8=As?(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},s8=As?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function a8(r,e){if(xu(r)&&xu(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 t8(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 r8(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,u;switch(s){case 1:o<128&&(i=o);break;case 2:a=r[e+1],(a&192)===128&&(u=(o&31)<<6|a&63,u>127&&(i=u));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(u=(o&15)<<12|(a&63)<<6|c&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(u=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,u>65535&&u<1114112&&(i=u))}}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 fp(n)}var n8=4096;function fp(r){let e=r.length;if(e<=n8)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=n8));return t}var pI=256,nc=class{constructor(e=pI){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=s8(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=Is(n,0,this.cursor)}else t=i8(this.chunks,this.cursor);return e&&this.reset(),t}};var Z="CBOR decode error:",$n="CBOR encode error:",oc=[];oc[23]=1;oc[24]=2;oc[25]=3;oc[26]=5;oc[27]=9;function Kn(r,e,t){if(r.length-e<t)throw new Error(`${Z} not enough data for type`)}var ht=[24,256,65536,4294967296,BigInt("18446744073709551616")];function mr(r,e,t){Kn(r,e,1);let n=r[e];if(t.strict===!0&&n<ht[0])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);return n}function gr(r,e,t){Kn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<ht[1])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);return n}function yr(r,e,t){Kn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<ht[2])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);return n}function wr(r,e,t){Kn(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<ht[3])throw new Error(`${Z} 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(`${Z} integers outside of the safe integer range are not supported`)}function c8(r,e,t,n){return new B(b.uint,mr(r,e+1,n),2)}function l8(r,e,t,n){return new B(b.uint,gr(r,e+1,n),3)}function u8(r,e,t,n){return new B(b.uint,yr(r,e+1,n),5)}function d8(r,e,t,n){return new B(b.uint,wr(r,e+1,n),9)}function Cr(r,e){return bt(r,0,e.value)}function bt(r,e,t){if(t<ht[0]){let n=Number(t);r.push([e|n])}else if(t<ht[1]){let n=Number(t);r.push([e|24,n])}else if(t<ht[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<ht[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<ht[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(`${Z} encountered BigInt larger than allowable range`)}}Cr.encodedSize=function(e){return bt.encodedSize(e.value)};bt.encodedSize=function(e){return e<ht[0]?1:e<ht[1]?2:e<ht[2]?3:e<ht[3]?5:9};Cr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function f8(r,e,t,n){return new B(b.negint,-1-mr(r,e+1,n),2)}function h8(r,e,t,n){return new B(b.negint,-1-gr(r,e+1,n),3)}function p8(r,e,t,n){return new B(b.negint,-1-yr(r,e+1,n),5)}var hp=BigInt(-1),m8=BigInt(1);function g8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new B(b.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${Z} integers outside of the safe integer range are not supported`);return new B(b.negint,hp-BigInt(o),9)}function vu(r,e){let t=e.value,n=typeof t=="bigint"?t*hp-m8:t*-1-1;bt(r,e.type.majorEncoded,n)}vu.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*hp-m8:t*-1-1;return n<ht[0]?1:n<ht[1]?2:n<ht[2]?3:n<ht[3]?5:9};vu.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function ic(r,e,t,n){Kn(r,e,t+n);let o=Is(r,e+t,e+t+n);return new B(b.bytes,o,t+n)}function y8(r,e,t,n){return ic(r,e,1,t)}function w8(r,e,t,n){return ic(r,e,2,mr(r,e+1,n))}function b8(r,e,t,n){return ic(r,e,3,gr(r,e+1,n))}function x8(r,e,t,n){return ic(r,e,5,yr(r,e+1,n))}function E8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer bytes lengths not supported`);return ic(r,e,9,o)}function Su(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===b.string?Eu(r.value):r.value),r.encodedBytes}function Ts(r,e){let t=Su(e);bt(r,e.type.majorEncoded,t.length),r.push(t)}Ts.encodedSize=function(e){let t=Su(e);return bt.encodedSize(t.length)+t.length};Ts.compareTokens=function(e,t){return gI(Su(e),Su(t))};function gI(r,e){return r.length<e.length?-1:r.length>e.length?1:a8(r,e)}function sc(r,e,t,n,o){let i=t+n;Kn(r,e,i);let s=new B(b.string,o8(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=Is(r,e+t,e+i)),s}function v8(r,e,t,n){return sc(r,e,1,t,n)}function S8(r,e,t,n){return sc(r,e,2,mr(r,e+1,n),n)}function A8(r,e,t,n){return sc(r,e,3,gr(r,e+1,n),n)}function I8(r,e,t,n){return sc(r,e,5,yr(r,e+1,n),n)}function T8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer string lengths not supported`);return sc(r,e,9,o,n)}var _8=Ts;function _s(r,e,t,n){return new B(b.array,n,t)}function C8(r,e,t,n){return _s(r,e,1,t)}function k8(r,e,t,n){return _s(r,e,2,mr(r,e+1,n))}function P8(r,e,t,n){return _s(r,e,3,gr(r,e+1,n))}function R8(r,e,t,n){return _s(r,e,5,yr(r,e+1,n))}function D8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer array lengths not supported`);return _s(r,e,9,o)}function L8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Z} indefinite length items not allowed`);return _s(r,e,1,1/0)}function Au(r,e){bt(r,b.array.majorEncoded,e.value)}Au.compareTokens=Cr.compareTokens;Au.encodedSize=function(e){return bt.encodedSize(e.value)};function Cs(r,e,t,n){return new B(b.map,n,t)}function N8(r,e,t,n){return Cs(r,e,1,t)}function O8(r,e,t,n){return Cs(r,e,2,mr(r,e+1,n))}function M8(r,e,t,n){return Cs(r,e,3,gr(r,e+1,n))}function B8(r,e,t,n){return Cs(r,e,5,yr(r,e+1,n))}function U8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer map lengths not supported`);return Cs(r,e,9,o)}function F8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Z} indefinite length items not allowed`);return Cs(r,e,1,1/0)}function Iu(r,e){bt(r,b.map.majorEncoded,e.value)}Iu.compareTokens=Cr.compareTokens;Iu.encodedSize=function(e){return bt.encodedSize(e.value)};function V8(r,e,t,n){return new B(b.tag,t,1)}function $8(r,e,t,n){return new B(b.tag,mr(r,e+1,n),2)}function K8(r,e,t,n){return new B(b.tag,gr(r,e+1,n),3)}function H8(r,e,t,n){return new B(b.tag,yr(r,e+1,n),5)}function q8(r,e,t,n){return new B(b.tag,wr(r,e+1,n),9)}function Tu(r,e){bt(r,b.tag.majorEncoded,e.value)}Tu.compareTokens=Cr.compareTokens;Tu.encodedSize=function(e){return bt.encodedSize(e.value)};var vI=20,SI=21,AI=22,II=23;function z8(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${Z} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new B(b.null,null,1):new B(b.undefined,void 0,1)}function W8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Z} indefinite length items not allowed`);return new B(b.break,void 0,1)}function pp(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${Z} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${Z} Infinity values are not supported`)}return new B(b.float,r,e)}function G8(r,e,t,n){return pp(mp(r,e+1),3,n)}function Q8(r,e,t,n){return pp(gp(r,e+1),5,n)}function Y8(r,e,t,n){return pp(J8(r,e+1),9,n)}function _u(r,e,t){let n=e.value;if(n===!1)r.push([b.float.majorEncoded|vI]);else if(n===!0)r.push([b.float.majorEncoded|SI]);else if(n===null)r.push([b.float.majorEncoded|AI]);else if(n===void 0)r.push([b.float.majorEncoded|II]);else{let o,i=!1;(!t||t.float64!==!0)&&(Z8(n),o=mp(Zr,1),n===o||Number.isNaN(n)?(Zr[0]=249,r.push(Zr.slice(0,3)),i=!0):(j8(n),o=gp(Zr,1),n===o&&(Zr[0]=250,r.push(Zr.slice(0,5)),i=!0))),i||(TI(n),o=J8(Zr,1),Zr[0]=251,r.push(Zr.slice(0,9)))}}_u.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){Z8(n);let o=mp(Zr,1);if(n===o||Number.isNaN(n))return 3;if(j8(n),o=gp(Zr,1),n===o)return 5}return 9};var X8=new ArrayBuffer(9),kr=new DataView(X8,1),Zr=new Uint8Array(X8,0);function Z8(r){if(r===1/0)kr.setUint16(0,31744,!1);else if(r===-1/0)kr.setUint16(0,64512,!1);else if(Number.isNaN(r))kr.setUint16(0,32256,!1);else{kr.setFloat32(0,r);let e=kr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)kr.setUint16(0,31744,!1);else if(t===0)kr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?kr.setUint16(0,0):o<-14?kr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):kr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function mp(r,e){if(r.length-e<2)throw new Error(`${Z} 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 j8(r){kr.setFloat32(0,r,!1)}function gp(r,e){if(r.length-e<4)throw new Error(`${Z} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function TI(r){kr.setFloat64(0,r,!1)}function J8(r,e){if(r.length-e<8)throw new Error(`${Z} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}_u.compareTokens=Cr.compareTokens;function Se(r,e,t){throw new Error(`${Z} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function Cu(r){return()=>{throw new Error(`${Z} ${r}`)}}var V=[];for(let r=0;r<=23;r++)V[r]=Se;V[24]=c8;V[25]=l8;V[26]=u8;V[27]=d8;V[28]=Se;V[29]=Se;V[30]=Se;V[31]=Se;for(let r=32;r<=55;r++)V[r]=Se;V[56]=f8;V[57]=h8;V[58]=p8;V[59]=g8;V[60]=Se;V[61]=Se;V[62]=Se;V[63]=Se;for(let r=64;r<=87;r++)V[r]=y8;V[88]=w8;V[89]=b8;V[90]=x8;V[91]=E8;V[92]=Se;V[93]=Se;V[94]=Se;V[95]=Cu("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)V[r]=v8;V[120]=S8;V[121]=A8;V[122]=I8;V[123]=T8;V[124]=Se;V[125]=Se;V[126]=Se;V[127]=Cu("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)V[r]=C8;V[152]=k8;V[153]=P8;V[154]=R8;V[155]=D8;V[156]=Se;V[157]=Se;V[158]=Se;V[159]=L8;for(let r=160;r<=183;r++)V[r]=N8;V[184]=O8;V[185]=M8;V[186]=B8;V[187]=U8;V[188]=Se;V[189]=Se;V[190]=Se;V[191]=F8;for(let r=192;r<=215;r++)V[r]=V8;V[216]=$8;V[217]=K8;V[218]=H8;V[219]=q8;V[220]=Se;V[221]=Se;V[222]=Se;V[223]=Se;for(let r=224;r<=243;r++)V[r]=Cu("simple values are not supported");V[244]=Se;V[245]=Se;V[246]=Se;V[247]=z8;V[248]=Cu("simple values are not supported");V[249]=G8;V[250]=Q8;V[251]=Y8;V[252]=Se;V[253]=Se;V[254]=Se;V[255]=W8;var jr=[];for(let r=0;r<24;r++)jr[r]=new B(b.uint,r,1);for(let r=-1;r>=-24;r--)jr[31-r]=new B(b.negint,r,1);jr[64]=new B(b.bytes,new Uint8Array(0),1);jr[96]=new B(b.string,"",1);jr[128]=new B(b.array,0,1);jr[160]=new B(b.map,0,1);jr[244]=new B(b.false,!1,1);jr[245]=new B(b.true,!0,1);jr[246]=new B(b.null,null,1);function e5(r){switch(r.type){case b.false:return vn([244]);case b.true:return vn([245]);case b.null:return vn([246]);case b.bytes:return r.value.length?void 0:vn([64]);case b.string:return r.value===""?vn([96]):void 0;case b.array:return r.value===0?vn([128]):void 0;case b.map:return r.value===0?vn([160]):void 0;case b.uint:return r.value<24?vn([Number(r.value)]):void 0;case b.negint:if(r.value>=-24)return vn([31-Number(r.value)])}}var CI={float64:!1,mapSorter:RI,quickEncodeToken:e5};function kI(){let r=[];return r[b.uint.major]=Cr,r[b.negint.major]=vu,r[b.bytes.major]=Ts,r[b.string.major]=_8,r[b.array.major]=Au,r[b.map.major]=Iu,r[b.tag.major]=Tu,r[b.float.major]=_u,r}var t5=kI(),yp=new nc,Pu=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(`${$n} object contains circular references`);return new r(t,e)}},_o={null:new B(b.null,null),undefined:new B(b.undefined,void 0),true:new B(b.true,!0),false:new B(b.false,!1),emptyArray:new B(b.array,0),emptyMap:new B(b.map,0)},Co={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new B(b.float,r):r>=0?new B(b.uint,r):new B(b.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new B(b.uint,r):new B(b.negint,r)},Uint8Array(r,e,t,n){return new B(b.bytes,r)},string(r,e,t,n){return new B(b.string,r)},boolean(r,e,t,n){return r?_o.true:_o.false},null(r,e,t,n){return _o.null},undefined(r,e,t,n){return _o.undefined},ArrayBuffer(r,e,t,n){return new B(b.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new B(b.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[_o.emptyArray,new B(b.break)]:_o.emptyArray;n=Pu.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=ku(s,t,n);return t.addBreakTokens?[new B(b.array,r.length),o,new B(b.break)]:[new B(b.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?[_o.emptyMap,new B(b.break)]:_o.emptyMap;n=Pu.createCheck(n,r);let a=[],c=0;for(let l of i)a[c++]=[ku(l,t,n),ku(o?r.get(l):r[l],t,n)];return PI(a,t),t.addBreakTokens?[new B(b.map,s),a,new B(b.break)]:[new B(b.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 ku(r,e={},t){let n=e8(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(`${$n} unsupported type: ${n}`);return i(r,n,e,t)}function PI(r,e){e.mapSorter&&r.sort(e.mapSorter)}function RI(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=t5[o].compareTokens(t,n);return i===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),i}function r5(r,e,t,n){if(Array.isArray(e))for(let o of e)r5(r,o,t,n);else t[e.type.major](r,e,n)}function wp(r,e,t){let n=ku(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 yp.reset(),r5(yp,n,e,t),yp.toBytes(!0)}function ko(r,e){return e=Object.assign({},CI,e),wp(r,t5,e)}var DI={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Ru=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=V[e];if(!n)throw new Error(`${Z} 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"),Du=Symbol.for("BREAK");function LI(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=ks(e,t);if(i===Du){if(r.value===1/0)break;throw new Error(`${Z} got unexpected break to lengthed array`)}if(i===ac)throw new Error(`${Z} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function NI(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=ks(e,t);if(a===Du){if(r.value===1/0)break;throw new Error(`${Z} got unexpected break to lengthed map`)}if(a===ac)throw new Error(`${Z} found map but not enough entries (got ${s} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${Z} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&i.has(a)||!n&&a in o))throw new Error(`${Z} found repeat map key "${a}"`);let c=ks(e,t);if(c===ac)throw new Error(`${Z} 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 ks(r,e){if(r.done())return ac;let t=r.next();if(t.type===b.break)return Du;if(t.type.terminal)return t.value;if(t.type===b.array)return LI(t,r,e);if(t.type===b.map)return NI(t,r,e);if(t.type===b.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=ks(r,e);return e.tags[t.value](n)}throw new Error(`${Z} tag not supported (${t.value})`)}throw new Error("unsupported")}function bp(r,e){if(!(r instanceof Uint8Array))throw new Error(`${Z} data to decode must be a Uint8Array`);e=Object.assign({},DI,e);let t=e.tokenizer||new Ru(r,e),n=ks(t,e);if(n===ac)throw new Error(`${Z} did not find any content to decode`);if(n===Du)throw new Error(`${Z} got unexpected break`);return[n,r.subarray(t.pos())]}function br(r,e){let[t,n]=bp(r,e);if(n.length>0)throw new Error(`${Z} too many terminals, data makes no sense`);return t}var Hn="/",n5=new TextEncoder().encode(Hn),Lu=n5[0],Ne=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=N(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]!==Lu)throw new Error("Invalid key")}toString(e="utf8"){return O(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Hn))}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=n5),this._buf[0]!==Lu){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Lu,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Lu;)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(Hn).slice(1)}type(){return OI(this.baseNamespace())}name(){return MI(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Hn)||(e+=Hn),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Hn):new r(e.slice(0,-1).join(Hn))}child(e){return this.toString()===Hn?e:e.toString()===Hn?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(),...BI(e.map(t=>t.namespaces()))])}};function OI(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function MI(r){let e=r.split(":");return e[e.length-1]}function BI(r){return[].concat(...r)}function Nu({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*UI(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],i=Q.asCID(n);i!=null?yield[o.join("/"),i]:typeof n=="object"&&(yield*Ep(n,o))}else{let t=Q.asCID(e);t!=null?yield[r.join("/"),t]:yield*Ep(e,r)}}function*Ep(r,e){if(r==null||r instanceof Uint8Array)return;let t=Q.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let i=[...e,n];yield*UI(i,o)}}function*FI(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&Q.asCID(n)==null&&(yield*vp(n,o))}else yield*vp(e,r)}function*vp(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"&&Q.asCID(n)==null&&(yield*FI(o,n))}}function VI(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=Q.asCID(t);if(i!=null)return{value:i,remaining:e.slice(n+1).join("/")}}return{value:t}}var Sp=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:Nu(),bytes:Nu(),value:Nu(),asBlock:Nu()})}links(){return Ep(this.value,[])}tree(){return vp(this.value,[])}get(e="/"){return VI(this.value,e.split("/").filter(Boolean))}};function o5({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 Sp({cid:e,bytes:r,value:o})}var a5="/pin/",i5="/pinned-block/",Ap=yn,s5=1;function Ou(r){return r.version===0&&(r=r.toV1()),new Ne(`${a5}${r.toString(Ap)}`)}var Mu=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=Ou(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 Ht({concurrency:s5});for await(let a of this.#e(e,i,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>j(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,ko(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=o5({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 Ne(`${i5}${Ap.encode(e.multihash.bytes)}`),i={pinCount:0,pinnedBy:[]};try{i=br(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,ko(i),n),n.onProgress?.(new W("helia:pin:add",e))}}async*rm(e,t={}){let n=Ou(e),o=await this.datastore.get(n,t),i=br(o);await this.datastore.delete(n,t);let s=new Ht({concurrency:s5});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=>j(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:a5+(e.cid!=null?`${e.cid.toString(yn)}`:"")},e)){let o=Q.parse(t.toString().substring(5),yn),i=br(n);yield{cid:o,...i}}}async isPinned(e,t={}){let n=new Ne(`${i5}${Ap.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=Ou(e),o=await this.datastore.get(n,t);return br(o)}async setMetadata(e,t,n){let o=Ou(e),i=await this.datastore.get(o,n),s=br(i);s.metadata=t??{},await this.datastore.put(o,ko(s),n)}};var Ip=1,Tp=5;var cc=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Po=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 $I=5,Bu=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??$I,this.findProviders=e.metrics?.traceFunction("helia.routing.findProviders",this.findProviders.bind(this),{optionsIndex:1})??this.findProviders,this.provide=e.metrics?.traceFunction("helia.routing.provide",this.provide.bind(this),{optionsIndex:1})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("helia.routing.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1})??this.cancelReprovide,this.put=e.metrics?.traceFunction("helia.routing.put",this.put.bind(this),{optionsIndex:2})??this.put,this.get=e.metrics?.traceFunction("helia.routing.get",this.get.bind(this),{optionsIndex:1})??this.get,this.findPeer=e.metrics?.traceFunction("helia.routing.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("helia.routing.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async start(){await mt(...this.routers)}async stop(){await kt(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Po("No content routers available");let n=new gt({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let o of qt(n.toGenerator(),...bi(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 Po("No content routers available");await Promise.all(bi(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){await Promise.all(bi(this.routers,"cancelReprovide").map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){await Promise.all(bi(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(bi(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new Po("No peer routers available");let n=this,o=qt(...bi(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 Ce("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Po("No peer routers available");for await(let n of qt(...bi(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function bi(r,e){return r.filter(t=>t[e]!=null)}var Ro={},Ps=r=>{r.addEventListener("message",e=>{Ps.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{Ps.dispatchEvent("message",r,e)})};Ps.addEventListener=(r,e)=>{Ro[r]==null&&(Ro[r]=[]),Ro[r].push(e)};Ps.removeEventListener=(r,e)=>{Ro[r]!=null&&(Ro[r]=Ro[r].filter(t=>t===e))};Ps.dispatchEvent=function(r,e,t){Ro[r]!=null&&Ro[r].forEach(n=>n(e,t))};var _p=Ps;var Cp="lock:worker:request-read",kp="lock:worker:release-read",Pp="lock:master:grant-read",Rp="lock:worker:request-write",Dp="lock:worker:release-write",Lp="lock:master:grant-write";var c5=(r=21)=>Math.random().toString().substring(2);var l5=(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=u=>{if(u?.data==null)return;let d={type:u.data.type,name:u.data.name,identifier:u.data.identifier};d.type===n&&d.identifier===a.identifier&&(i.removeEventListener("message",l),c())};i.addEventListener("message",l)})}}}))},u5=(r,e,t,n)=>async()=>{let o=c5();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)})},KI={singleProcess:!1},d5=r=>{if(r=Object.assign({},KI,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return _p.addEventListener("message",l5(t,"requestReadLock",Cp,kp,Pp)),_p.addEventListener("message",l5(t,"requestWriteLock",Rp,Dp,Lp)),t}return{isWorker:!0,readLock:t=>u5(t,Cp,Pp,kp),writeLock:t=>u5(t,Rp,Lp,Dp)}};var xi={},Do;async function Np(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>Xr((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var HI=(r,e)=>{if(Do.isWorker===!0)return{readLock:Do.readLock(r,e),writeLock:Do.writeLock(r,e)};let t=new En({concurrency:1}),n;return{async readLock(){if(n!=null)return Np(n,e);n=new En({concurrency:e.concurrency,autoStart:!1});let o=n,i=Np(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),i},async writeLock(){return n=null,Np(t,e)}}},qI={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function Ei(r){let e=Object.assign({},qI,r);return Do==null&&(Do=d5(e),Do.isWorker!==!0&&(Do.addEventListener("requestReadLock",t=>{xi[t.data.name]!=null&&xi[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),Do.addEventListener("requestWriteLock",async t=>{xi[t.data.name]!=null&&xi[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),xi[e.name]==null&&(xi[e.name]=HI(e.name,e)),xi[e.name]}var Uu=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=Ei({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await mt(this.child),this.started=!0}async stop(){await kt(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 Op=new Ne("/version"),f5=1;async function h5(r){if(!await r.has(Op)){await r.put(Op,N(`${f5}`));return}let e=await r.get(Op),t=O(e);if(parseInt(t,10)!==f5)throw new Error("Unknown datastore version, a datastore migration may be required")}var Up={};Xe(Up,{code:()=>Bp,decode:()=>JI,decodeOptions:()=>XI,encode:()=>jI,encodeOptions:()=>QI,name:()=>ZI,toByteView:()=>m5});var p5=42;function m5(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function zI(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=Q.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new B(b.tag,p5),new B(b.bytes,t)]}function WI(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function GI(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 Mp={float64:!0,typeEncoders:{Object:zI,undefined:WI,number:GI}},QI={...Mp,typeEncoders:{...Mp.typeEncoders}};function YI(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return Q.decode(r.subarray(1))}var Fu={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Fu.tags[p5]=YI;var XI={...Fu,tags:Fu.tags.slice()},ZI="dag-cbor",Bp=113,jI=r=>ko(r,Mp),JI=r=>br(m5(r),Fu);var zp={};Xe(zp,{code:()=>qp,decode:()=>y5,encode:()=>g5,format:()=>uT,name:()=>lT,parse:()=>fT,stringify:()=>uT});var Fp=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===b.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===b.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[b.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)}[b.negint.major](e,t){this[b.uint.major](e,t)}[b.bytes.major](e,t){throw new Error(`${$n} unsupported type: Uint8Array`)}[b.string.major](e,t){this.prefix(e);let n=Eu(JSON.stringify(t.value));e.push(n.length>32?rc(n):n)}[b.array.major](e,t){this.prefix(e),this.inRecursive.push({type:b.array,elements:0}),e.push([91])}[b.map.major](e,t){this.prefix(e),this.inRecursive.push({type:b.map,elements:0}),e.push([123])}[b.tag.major](e,t){}[b.float.major](e,t){if(t.type.name==="break"){let s=this.inRecursive.pop();if(s){if(s.type===b.array)e.push([93]);else if(s.type===b.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(`${$n} 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 eT(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${$n} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==b.string||n.type!==b.string)throw new Error(`${$n} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${$n} unexpected duplicate map keys, this is not supported`)}var tT={addBreakTokens:!0,mapSorter:eT};function Vp(r,e){return e=Object.assign({},tT,e),wp(r,new Fp,e)}var Rs=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(`${Z} 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(`${Z} 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 B(b.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(`${Z} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${Z} 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 B(b.float,s,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(s)?new B(s>=0?b.uint:b.negint,s,this._pos-e):new B(s>=0?b.uint:b.negint,BigInt(i),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${Z} 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 B(b.string,c,s)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${Z} 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(`${Z} 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(`${Z} unexpected unicode sequence at position ${this._pos}`);let c,l,u,d;switch(a){case 1:i<128&&(s=i);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(d=(i&31)<<6|c&63,d>127&&(s=d));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(d=(i&15)<<12|(c&63)<<6|l&63,d>2047&&(d<55296||d>57343)&&(s=d));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],u=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(u&192)===128&&(d=(i&15)<<18|(c&63)<<12|(l&63)<<6|u&63,d>65535&&d<1114112&&(s=d))}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(`${Z} 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(`${Z} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new B(b.string,fp(t),this._pos-e);default:if(i<32)throw new Error(`${Z} invalid control character at position ${this._pos}`);i<128?(t.push(i),this._pos++):o()}}throw new Error(`${Z} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new B(b.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new B(b.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new B(b.null,null,4);case 102:return this.expect([102,97,108,115,101]),new B(b.false,!1,5);case 116:return this.expect([116,114,117,101]),new B(b.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(`${Z} 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 B(b.break,void 0,1);if(this.ch()!==44)throw new Error(`${Z} 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 B(b.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 B(b.break,void 0,1);if(this.ch()!==44)throw new Error(`${Z} 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 B(b.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${Z} 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(`${Z} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function $p(r,e){return e=Object.assign({tokenizer:new Rs(r,e)},e),br(r,e)}function nT(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function oT(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=Q.asCID(r);if(!e)return null;let t=e.toString();return[new B(b.map,1/0,1),new B(b.string,"/",1),new B(b.string,t,t.length),new B(b.break,void 0,1)]}function Vu(r){let e=ot.encode(r).slice(1);return[new B(b.map,1/0,1),new B(b.string,"/",1),new B(b.map,1/0,1),new B(b.string,"bytes",5),new B(b.string,e,e.length),new B(b.break,void 0,1),new B(b.break,void 0,1)]}function Jr(r){return Vu(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function iT(r){return Vu(new Uint8Array(r))}function sT(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function aT(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 cT={typeEncoders:{Object:oT,Buffer:Vu,Uint8Array:Vu,Int8Array:Jr,Uint16Array:Jr,Int16Array:Jr,Uint32Array:Jr,Int32Array:Jr,Float32Array:Jr,Float64Array:Jr,Uint8ClampedArray:Jr,BigInt64Array:Jr,BigUint64Array:Jr,DataView:Jr,ArrayBuffer:iT,undefined:sT,number:aT}},Kp=class extends Rs{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===b.map){let t=this._next();if(t.type===b.string&&t.value==="/"){let n=this._next();if(n.type===b.string){if(this._next().type!==b.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new B(b.tag,42,0)}if(n.type===b.map){let o=this._next();if(o.type===b.string&&o.value==="bytes"){let i=this._next();if(i.type===b.string){for(let a=0;a<2;a++)if(this._next().type!==b.break)throw new Error("Invalid encoded Bytes form");let s=ot.decode(`m${i.value}`);return new B(b.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]=Q.parse;var lT="dag-json",qp=297,g5=r=>Vp(r,cT),y5=r=>{let e=nT(r),t=Object.assign(Hp,{tokenizer:new Kp(e,Hp)});return $p(e,t)},uT=r=>dT.decode(g5(r));var dT=new TextDecoder,fT=r=>y5(hT.encode(r)),hT=new TextEncoder;var Zp={};Xe(Zp,{code:()=>Xp,createLink:()=>_5,createNode:()=>T5,decode:()=>TT,encode:()=>IT,name:()=>AT,prepare:()=>Qp,validate:()=>Yp});var pT=new TextDecoder;function Wp(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 $u(r,e){let t;[t,e]=Wp(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 w5(r,e){let t;return[t,e]=Wp(r,e),[t&7,t>>3,e]}function mT(r){let e={},t=r.length,n=0;for(;n<t;){let o,i;if([o,i,n]=w5(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]=$u(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]=$u(r,n),e.Name=pT.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]=Wp(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 b5(r){let e=r.length,t=0,n,o=!1,i;for(;t<e;){let a,c;if([a,c,t]=w5(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]=$u(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]=$u(r,t),n.push(mT(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 E5=new TextEncoder,x5=2**32,gT=2**31;function yT(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=dc(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=E5.encode(r.Name);t-=n.length,e.set(n,t),t=dc(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=dc(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function v5(r){let e=bT(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=dc(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let i=yT(r.Links[o],t.subarray(0,n));n-=i,n=dc(t,n,i)-1,t[n]=18}return t}function wT(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+Ds(t)}if(typeof r.Name=="string"){let t=E5.encode(r.Name).length;e+=1+t+Ds(t)}return typeof r.Tsize=="number"&&(e+=1+Ds(r.Tsize)),e}function bT(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+Ds(t)}if(r.Links)for(let t of r.Links){let n=wT(t);e+=1+n+Ds(n)}return e}function dc(r,e,t){e-=Ds(t);let n=e;for(;t>=gT;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function Ds(r){return r%2===0&&r++,Math.floor((xT(r)+6)/7)}function xT(r){let e=0;return r>=x5&&(r=Math.floor(r/x5),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+ET[r]}var ET=[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 vT=["Data","Links"],ST=["Hash","Name","Tsize"],Gp=new TextEncoder;function A5(r,e){if(r===e)return 0;let t=r.Name?Gp.encode(r.Name):[],n=e.Name?Gp.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 S5(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function I5(r){if(typeof r.asCID=="object"){let t=Q.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=Q.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=Q.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=Q.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 Qp(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=Gp.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(I5),e.Links.sort(A5);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function Yp(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!S5(r,vT))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(!S5(t,ST))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&&A5(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function T5(r,e=[]){return Qp({Data:r,Links:e})}function _5(r,e,t){return I5({Hash:t,Name:r,Tsize:e})}function C5(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var AT="dag-pb",Xp=112;function IT(r){Yp(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),v5(e)}function TT(r){let e=C5(r),t=b5(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let i={};try{i.Hash=Q.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 Ls(r){return r?.then!=null}function k5(r=[],e){let t={[Xp]:Zp,[ri]:ss,[Bp]:Up,[qp]:zp,[Y0]:Rl};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Ls(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 P5(r=[],e){let t={[Qe.code]:Qe,[Ll.code]:Ll,[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);Ls(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 Pr=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 qn=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 Ku=0,Hu=class extends qn{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===Ku||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===Ku)return e.multihash.digest;if(this.child==null)throw new Pr;return this.child.get(e)}has(e){return e.multihash.code===Ku?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==Ku&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function _T(r){return r[Symbol.asyncIterator]!=null}function CT(r,e){let t=0;if(_T(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=os(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 en=CT;function kT(r){return r[Symbol.asyncIterator]!=null}function R5(r){return r?.then!=null}function PT(r,e){let t=0;if(kT(r))return async function*(){for await(let c of r){let l=e(c,t++);R5(l)&&await l,yield c}}();let n=os(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++);R5(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var vi=PT;var qu=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 Hu(e.blockstore),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new W("blocks:put:duplicate",e)),e):(n.onProgress?.(new W("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,t,n))),n.onProgress?.(new W("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=en(e,async({cid:i})=>{let s=await this.child.has(i,t);return s&&t.onProgress?.(new W("blocks:put-many:duplicate",i)),!s}),o=vi(n,async({cid:i,block:s})=>{t.onProgress?.(new W("blocks:put-many:providers:notify",i)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(i,s,t)))});t.onProgress?.(new W("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 W("blocks:get:providers:get",e));let o=await D5(e,this.components.blockBrokers,n,{...t,log:this.log});return t.onProgress?.(new W("blocks:get:blockstore:put",e)),await this.child.put(e,o,t),t.onProgress?.(new W("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async i=>i.announce?.(e,o,t))),o}return t.onProgress?.(new W("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new W("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(vi(e,async n=>{if(t.offline!==!0&&!await this.child.has(n,t)){let o=await this.getHasher(n.multihash.code);t.onProgress?.(new W("blocks:get-many:providers:get",n));let i=await D5(n,this.components.blockBrokers,o,{...t,log:this.log});t.onProgress?.(new W("blocks:get-many:blockstore:put",n)),await this.child.put(n,i,t),t.onProgress?.(new W("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 W("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new W("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 W("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}},zu=class extends qu{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await mt(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await kt(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 jp({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}},jp=class extends qu{closeController;constructor(e,t){super(e),this.closeController=new AbortController,this.closeController.signal,this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async put(e,t,n={}){let o=le([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=le([this.closeController.signal,t.signal]);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=le([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=le([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=le([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function RT(r){return typeof r.retrieve=="function"}var DT=(r,e)=>{if(e==null)throw new P(`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(Ls(o)?n=await o:n=o,!j(n.digest,r.multihash.digest))throw new co("Hash of downloaded block did not match multihash from passed CID")}};async function D5(r,e,t,n){let o=DT(r,t),i=new AbortController,s=le([i.signal,n.signal]);i.signal;let a=[];for(let c of e)RT(c)&&a.push(c);try{return await Promise.any(a.map(async c=>{try{let l=!1,u=await c.retrieve(r,{...n,signal:s,validateFn:async d=>{await o(d),l=!0}});return l||await o(u),u}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{i.abort(),s.clear()}}var Si=class extends me{initialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),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=rr(this.maxProviders)}async retrieve(e,t={}){let n=ot.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.initialPeerSearchComplete==null&&(l=!0,this.log=this.logger.forComponent(`${this.name}:${e}`),this.initialPeerSearchComplete=this.findProviders(e,this.minProviders,t)),await this.initialPeerSearchComplete,l&&this.log("found initial session peers for %c",e)}let s=!1,a=new Ht({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 u=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(u)}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(u=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,u)})};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 Wu=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=P5(e.hashers,e.loadHasher),this.getCodec=k5(e.codecs,e.loadCodec),this.dns=e.dns??bu(),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 Bu(t,{routers:(e.routers??[]).flatMap(o=>{let i=[o];return o[hn]!=null&&i.push(o[hn]),o[pn]!=null&&i.push(o[pn]),i}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new zu(t);this.pins=new Mu(e.datastore,n,this.getCodec),this.blockstore=new Uu(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await h5(this.datastore),await mt(this.blockstore,this.datastore,this.routing)}async stop(){await kt(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 Rt(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 W("helia:gc:deleted",i))}catch(s){n.log.error("Error during gc",s),e.onProgress?.(new W("helia:gc:error",s))}}()))}finally{t()}this.log("gc finished")}};var Jp=class extends Si{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 L5(r,e){return new Jp(r,e)}var Gu=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 em=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 Qu(r){let{name:e,metrics:t}=r,n;return t!=null?n=new em({name:e,metrics:t}):n=new Map,n}function LT(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=yt(r);e.push(t),r=r.slice(ue(t))}return e}var N5=LT;var Yu=class extends me{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=ja({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=Qu({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=O(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??tt.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===tt.WantHave&&t.wantType===tt.WantBlock&&(o.wantType=tt.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===tt.WantBlock?(await lt(this,"block",t?.signal,{filter:a=>j(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await lt(this,"presence",t?.signal,{filter:s=>j(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 Vn;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=O(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new Vn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:tt.WantHave,priority:1}),await this.network.sendMessage(t,o),(await lt(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&j(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:tt.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new Vn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:tt.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await lt(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&j(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=O(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=N5(o.prefix),s=i[0],a=i[1],c=i[2],l=c===Qe.code?Qe:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let u=l.digest(o.data);u.then!=null&&(u=await u);let d=Q.create(s===0?0:1,a,u);this.log("received block from %p for %c",e,d),this.safeDispatchEvent("block",{detail:{sender:e,cid:d,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:d,has:!0,block:o.data}});let f=O(d.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=Q.decode(o);this.log("received %s from %p for %c",i,e,s),this.safeDispatchEvent("presence",{detail:{sender:e,cid:s,has:i===Sr.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new Vn(!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:tt.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 Xu=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 Gu(e),this.network=new Vl(e,t),this.peerWantLists=new du({...e,network:this.network},t),this.wantList=new Yu({...e,network:this.network},t)}createSession(e={}){return L5({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,o=le([n.signal,t.signal]);n.signal,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 O5=(r,e={})=>new Xu(r,e);var tm=class{bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=O5(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 rm(r={}){return e=>new tm(e,r)}var Zu=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 u=this.readAtomically(()=>{let d=this.readChar();if(d===void 0)return;let f=Number.parseInt(d,e);if(!Number.isNaN(f))return f});if(u===void 0)break;if(i*=e,i+=u,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 M5=45,NT=15,Ns=new Zu;function ju(r){if(!(r.length>NT))return Ns.new(r).parseWith(()=>Ns.readIPv4Addr())}function Ju(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>M5))return Ns.new(r).parseWith(()=>Ns.readIPv6Addr())}function Ai(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>M5)return;let t=Ns.new(r).parseWith(()=>Ns.readIPAddr());if(t)return e&&t.length===4?Uint8Array.from([0,0,0,0,0,0,0,0,0,0,255,255,t[0],t[1],t[2],t[3]]):t}function tn(r){return!!ju(r)}function Os(r){return!!Ju(r)}function ed(r){return!!Ai(r)}var U5=Br(B5(),1),OT=["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"],MT=OT.map(r=>new U5.Netmask(r));function nm(r){for(let e of MT)if(e.contains(r))return!0;return!1}function BT(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function UT(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 nm(o)}function FT(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function VT(r){let e=r.split(":"),t=e[e.length-1];return nm(t)}function $T(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 Qt(r){return tn(r)?nm(r):BT(r)?UT(r):FT(r)?VT(r):Os(r)?$T(r):void 0}var KT=r=>r.toString().split("/").slice(1),Ms=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),pe=r=>({match:e=>Ms(t=>t===r).match(e),pattern:r}),Ii=()=>({match:r=>Ms(e=>typeof e=="string").match(r),pattern:"{string}"}),hc=()=>({match:r=>Ms(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),Pe=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{be.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),pc=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{Ea.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),Te=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Bt=(...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(", ")})`}),ge=(...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 Re(...r){function e(o){let i=KT(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 rd=ge(pe("dns4"),Ii()),nd=ge(pe("dns6"),Ii()),od=ge(pe("dnsaddr"),Ii()),im=ge(pe("dns"),Ii()),pq=Re(rd,Te(Pe())),mq=Re(nd,Te(Pe())),gq=Re(od,Te(Pe())),mc=Re(Bt(im,od,rd,nd),Te(Pe())),F5=ge(pe("ip4"),Ms(tn)),V5=ge(pe("ip6"),Ms(Os)),sm=Bt(F5,V5),zn=Bt(sm,im,rd,nd,od),$5=Re(Bt(sm,ge(Bt(im,od,rd,nd),Te(Pe())))),am=Re(F5),cm=Re(V5),K5=Re(sm),lm=ge(zn,pe("tcp"),hc()),gc=ge(zn,pe("udp"),hc()),Ti=Re(ge(lm,Te(Pe()))),yq=Re(gc),um=ge(gc,pe("quic"),Te(Pe())),id=ge(gc,pe("quic-v1"),Te(Pe())),HT=Bt(um,id),wq=Re(um),H5=Re(id),om=Bt(zn,lm,gc,um,id),q5=Bt(ge(om,pe("ws"),Te(Pe()))),Wn=Re(q5),z5=Bt(ge(om,pe("wss"),Te(Pe())),ge(om,pe("tls"),Te(ge(pe("sni"),Ii())),pe("ws"),Te(Pe()))),_i=Re(z5),W5=ge(gc,pe("webrtc-direct"),Te(pc()),Te(pc()),Te(Pe())),yc=Re(W5),G5=ge(id,pe("webtransport"),Te(pc()),Te(pc()),Te(Pe())),dm=Re(G5),td=Bt(q5,z5,ge(lm,Te(Pe())),ge(HT,Te(Pe())),ge(zn,Te(Pe())),W5,G5,Pe()),sd=Re(td),qT=ge(td,pe("p2p-circuit"),Pe()),or=Re(qT),zT=Bt(ge(td,pe("p2p-circuit"),pe("webrtc"),Te(Pe())),ge(td,pe("webrtc"),Te(Pe())),ge(pe("webrtc"),Te(Pe()))),wc=Re(zT),WT=Bt(ge(zn,pe("tcp"),hc(),pe("http"),Te(Pe())),ge(zn,pe("http"),Te(Pe()))),Q5=Re(WT),GT=Bt(ge(zn,pe("tcp"),Bt(ge(pe("443"),pe("http")),ge(hc(),pe("https"))),Te(Pe())),ge(zn,pe("tls"),pe("http"),Te(Pe())),ge(zn,pe("https"),Te(Pe()))),Y5=Re(GT),QT=Bt(ge(pe("memory"),Ii(),Te(Pe()))),bq=Re(QT);function X5(r,e,t){let n=0;for(let o of r)if(!(n<e)){if(n>t)break;if(o!==255)return!1;n++}return!0}function Z5(r,e,t,n){let o=0;for(let i of r)if(!(o<t)){if(o>n)break;if(i!==e[o])return!1;o++}return!0}function fm(r){switch(r.length){case Ci:return r.join(".");case ki:{let e=[];for(let t=0;t<r.length;t++)t%2===0&&e.push(r[t].toString(16).padStart(2,"0")+r[t+1].toString(16).padStart(2,"0"));return e.join(":")}default:throw new Error("Invalid ip length")}}function j5(r){let e=0;for(let[t,n]of r.entries()){if(n===255){e+=8;continue}for(;(n&128)!=0;)e++,n=n<<1;if((n&128)!=0)return-1;for(let o=t+1;o<r.length;o++)if(r[o]!=0)return-1;break}return e}function J5(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var Ci=4,ki=16,Iq=parseInt("0xFFFF",16),YT=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function bc(r,e){e.length===ki&&r.length===Ci&&X5(e,0,11)&&(e=e.slice(12)),e.length===Ci&&r.length===ki&&Z5(r,YT,0,11)&&(r=r.slice(12));let t=r.length;if(t!=e.length)throw new Error("Failed to mask ip");let n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=r[o]&e[o];return n}function e7(r,e){if(typeof e=="string"&&(e=Ai(e)),e==null)throw new Error("Invalid ip");if(e.length!==r.network.length)return!1;for(let t=0;t<e.length;t++)if((r.network[t]&r.mask[t])!==(e[t]&r.mask[t]))return!1;return!0}function hm(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=Ci,o=ju(e);if(o==null&&(n=ki,o=Ju(e),o==null))throw new Error("Failed to parse given CIDR: "+r);let i=parseInt(t,10);if(Number.isNaN(i)||String(i).length!==t.length||i<0||i>n*8)throw new Error("Failed to parse given CIDR: "+r);let s=pm(i,8*n);return{network:bc(o,s),mask:s}}function pm(r,e){if(e!==8*Ci&&e!==8*ki)throw new Error("Invalid CIDR mask");if(r<0||r>e)throw new Error("Invalid CIDR mask");let t=e/8,n=new Uint8Array(t);for(let o=0;o<t;o++){if(r>=8){n[o]=255,r-=8;continue}n[o]=255-(255>>r),r=0}return n}var Pi=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=hm(e));else{let n=Ai(e);if(n==null)throw new Error("Failed to parse network");t=String(t);let o=parseInt(t,10);if(Number.isNaN(o)||String(o).length!==t.length||o<0||o>n.length*8){let i=Ai(t);if(i==null)throw new Error("Failed to parse mask");this.mask=i}else this.mask=pm(o,8*n.length);this.network=bc(n,this.mask)}}contains(e){return e7({network:this.network,mask:this.mask},e)}toString(){let e=j5(this.mask),t=e!==-1?String(e):J5(this.mask);return fm(this.network)+"/"+t}};function t7(r,e){return new Pi(r).contains(e)}var r7=tn,XT=Os,mm=function(r){let e=0;if(r=r.toString().trim(),r7(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(XT(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let i=r7(t[n]),s;i&&(s=mm(t[n]),t[n]=O(s.slice(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,O(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")},n7=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 Bs={},gm={},jT=[[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"]];jT.forEach(r=>{let e=JT(...r);gm[e.code]=e,Bs[e.name]=e});function JT(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function oe(r){if(typeof r=="number"){if(gm[r]!=null)return gm[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(Bs[r]!=null)return Bs[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var e_=oe("ip4"),t_=oe("ip6"),r_=oe("ipcidr");function xm(r,e){switch(oe(r).code){case 4:case 41:return o_(e);case 42:return bm(e);case 43:return O(e,"base10");case 6:case 273:case 33:case 132:return s7(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return bm(e);case 421:return c_(e);case 444:return i7(e);case 445:return i7(e);case 466:return a_(e);case 481:return globalThis.encodeURIComponent(bm(e));default:return O(e,"base16")}}function Em(r,e){switch(oe(r).code){case 4:return o7(e);case 41:return o7(e);case 42:return wm(e);case 43:return N(e,"base10");case 6:case 273:case 33:case 132:return Sm(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return wm(e);case 421:return i_(e);case 444:return l_(e);case 445:return u_(e);case 466:return s_(e);case 481:return wm(globalThis.decodeURIComponent(e));default:return N(e,"base16")}}function vm(r){let e,t;if(r.stringTuples().forEach(([n,o])=>{(n===e_.code||n===t_.code)&&(t=o),n===r_.code&&(e=o)}),e==null||t==null)throw new Error("Invalid multiaddr");return new Pi(t,e)}var ym=Object.values(oi).map(r=>r.decoder),n_=function(){let r=ym[0].or(ym[1]);return ym.slice(2).forEach(e=>r=r.or(e)),r}();function o7(r){if(!ed(r))throw new Error("invalid ip address");return mm(r)}function o_(r){let e=n7(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!ed(e))throw new Error("invalid ip address");return e}function Sm(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function s7(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function wm(r){let e=N(r),t=Uint8Array.from(De(e.length));return ke([t,e],t.length+e.length)}function bm(r){let e=yt(r);if(r=r.slice(ue(e)),r.length!==e)throw new Error("inconsistent lengths");return O(r)}function i_(r){let e;r[0]==="Q"||r[0]==="1"?e=ve(be.decode(`z${r}`)).bytes:e=Q.parse(r).multihash.bytes;let t=Uint8Array.from(De(e.length));return ke([t,e],t.length+e.length)}function s_(r){let e=n_.decode(r),t=Uint8Array.from(De(e.length));return ke([t,e],t.length+e.length)}function a_(r){let e=yt(r),t=r.slice(ue(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+O(t,"base64url")}function c_(r){let e=yt(r),t=r.slice(ue(e));if(t.length!==e)throw new Error("inconsistent lengths");return O(t,"base58btc")}function l_(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=at.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=Sm(n);return ke([t,o],t.length+o.length)}function u_(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=at.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=Sm(n);return ke([t,o],t.length+o.length)}function i7(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=O(e,"base32"),o=s7(t);return`${n}:${o}`}function a7(r){r=Am(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=oe(s);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(i++,i>=o.length)throw new ad("invalid address: "+r);if(a.path===!0){n=Am(o.slice(i).join("/")),e.push([a.code,Em(a.code,n)]),t.push([a.code,n]);break}let c=Em(a.code,o[i]);e.push([a.code,c]),t.push([a.code,xm(a.code,c)])}return{string:c7(t),bytes:cd(e),tuples:e,stringTuples:t,path:n}}function Im(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let i=yt(r,o),s=ue(i),a=oe(i),c=d_(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 new ad("Invalid address Uint8Array: "+O(r,"base16"));e.push([i,l]);let u=xm(i,l);if(t.push([i,u]),a.path===!0){n=u;break}}return{bytes:Uint8Array.from(r),string:c7(t),tuples:e,stringTuples:t,path:n}}function c7(r){let e=[];return r.map(t=>{let n=oe(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),Am(e.join("/"))}function cd(r){return ke(r.map(e=>{let t=oe(e[0]),n=Uint8Array.from(De(t.code));return e.length>1&&e[1]!=null&&(n=ke([n,e[1]])),n}))}function d_(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=yt(e instanceof Uint8Array?e:Uint8Array.from(e));return t+ue(t)}}function Am(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}var ad=class extends Error{static name="ParseError";name="ParseError";constructor(e){super(`Error parsing address: ${e}`)}};var f_=Symbol.for("nodejs.util.inspect.custom"),_m=Symbol.for("@multiformats/js-multiaddr/multiaddr"),h_=[oe("dns").code,oe("dns4").code,oe("dns6").code,oe("dnsaddr").code],Tm=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},ld=class r{bytes;#e;#t;#r;#o;[_m]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=Im(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=a7(e)}else if(Lo(e))t=Im(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=oe("tcp"),a=oe("udp"),c=oe("ip4"),l=oe("ip6"),u=oe("dns6"),d=oe("ip6zone");for(let[h,p]of this.stringTuples())h===d.code&&(i=`%${p??""}`),h_.includes(h)&&(t=s.name==="tcp"?"tcp":"udp",o=443,n=`${p??""}${i}`,e=h===u.code?6:4),(h===s.code||h===a.code)&&(t=oe(h).name==="tcp"?"tcp":"udp",o=parseInt(p??"")),(h===c.code||h===l.code)&&(t=oe(h).name==="tcp"?"tcp":"udp",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({},oe(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>oe(e).name)}tuples(){return this.#t.map(([e,t])=>t==null?[e]:[e,t])}stringTuples(){return this.#r.map(([e,t])=>t==null?[e]:[e,t])}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(cd(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===Bs.p2p.code&&e.push([n,o]),n===Bs["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?O(be.decode(`z${n}`),"base58btc"):O(Q.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#o}equals(e){return j(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(i=>i.resolvable);if(t==null)return[this];let n=Us.get(t.name);if(n==null)throw new Tm(`no available resolver for ${t.name}`);return(await n(this,e)).map(i=>$(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)}[f_](){return`Multiaddr(${this.#e})`}};var Us=new Map;function Lo(r){return!!r?.[_m]}function $(r){return new ld(r)}var p_=[oe("tcp").code,oe("dns").code,oe("dnsaddr").code,oe("dns4").code,oe("dns6").code];function l7(r){return f7("sni",r)?.[1]}function u7(r){let e=f7("tcp",r)?.[1];return e==null?"":`:${e}`}function f7(r,e){let t;try{t=oe(r).code}catch{return}for(let[n,o]of e)if(n===t&&o!=null)return[n,o]}function d7(r){return r.some(([e,t])=>e===oe("tls").code)}function rn(r,e,t){let n=h7[oe(r).name];if(n==null)throw new Error(`Can't interpret protocol ${oe(r).name}`);let o=n(e,t);return r===oe("ip6").code?`[${o}]`:o}var h7={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://${rn(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://${rn(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`${rn(t[0],t[1]??"",e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${rn(t[0],t[1]??"",e)}`},http:(r,e)=>{let t=d7(e),n=l7(e),o=u7(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=rn(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=rn(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 rn(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return rn(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=rn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=d7(e),n=l7(e),o=u7(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=rn(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=rn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`}};function ud(r,e){let n=$(r).stringTuples(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let i=oe(o[0]),s=h7[i.name];if(s==null)throw new Error(`No interpreter found for ${i.name}`);let a=s(o[1]??"",n);return e?.assumeHttp!==!1&&p_.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 dd=class{url;#e=0;#t=0;#r=0;#o=0;#a=new Map;log;transformRequestInit;constructor(e,{logger:t,transformRequestInit:n}){this.url=e instanceof URL?e:new URL(e),this.transformRequestInit=n,this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}#l(e){let t=e.multihash.bytes;return ot.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);if(a==null){this.#e++;let c={signal:i.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"},l=this.transformRequestInit!=null?await this.transformRequestInit(c):c;a=fetch(n.toString(),l).then(async u=>{if(this.log("GET %s %d",n,u.status),!u.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#o++,new Uint8Array(await u.arrayBuffer())}),this.#a.set(o,a)}return 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 m_(r,e,t){return r.filter(n=>{if(Y5.matches(n)||e&&Q5.matches(n))return t||mc.matches(n)?!0:Qt(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*fd(r,e,t,n,o,i={}){for await(let s of e.findProviders(r,i)){let a=m_(s.multiaddrs,n,o);if(a.length===0)continue;let c=ud(a[0]);yield new dd(c,{logger:t,transformRequestInit:i.transformRequestInit})}}var Cm=class extends Si{routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??hd,this.allowLocal=t.allowLocal??pd,this.transformRequestInit=t.transformRequestInit}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*fd(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})}toEvictionKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}};function p7(r,e){return new Cm(r,e)}var md=class{allowInsecure;allowLocal;transformRequestInit;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??hd,this.allowLocal=t.allowLocal??pd,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let o of fd(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})){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 p7({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var hd=!1,pd=!1;function km(r={}){return e=>new md(e,r)}async function*gd(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 E_=Br(yd(),1);var nn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},wd=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},Fs=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},bd=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},xd=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},Ed=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 ir;(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=()=>qe(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=ne((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=>re(o,r.codec()),r.decode=(o,i)=>te(o,r.codec(),i)})(ir||(ir={}));var g_=hr("ipns:utils"),m7=N("/ipns/");var y_=0,w_=18;function g7(r){let e;if(r.pubKey!=null)try{e=rt(r.pubKey)}catch(t){throw g_.error(t),t}if(e!=null)return e}function y7(r){let e=N("ipns-signature:");return ke([e,r])}function Ec(r){return"signatureV1"in r?ir.encode({value:N(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:N(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):ir.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function Sn(r){let e=ir.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=w7(e.data),n=b_(t.Value),o=O(t.Validity);if(e.value!=null&&e.signatureV1!=null)return x_(e),{value:n,validityType:ir.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:ir.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 ke([m7,r.bytes])}function Vs(r){let e=ve(r.slice(m7.length));if(!vd(e,y_)&&!vd(e,w_))throw new co("Multihash in IPNS key was not identity or sha2-256");return e}function w7(r){let e=br(r);if(e.ValidityType===0)e.ValidityType=ir.ValidityType.EOL;else throw new Fs("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 b_(r){let e=O(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${Q.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${Q.parse(e).toV1().toString()}`}catch{}throw new xd("Value must be a valid content path starting with /")}function x_(r){if(r.data==null)throw new Ed("Record data is missing");let e=w7(r.data);if(!j(e.Value,r.value??new Uint8Array(0)))throw new nn('Field "value" did not match between protobuf and CBOR');if(!j(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 vd(r,e){return r.code===e}var mW=hr("ipns"),gW=60*60*1e9,v_="/ipns/",yW=v_.length;var b7=Br(yd(),1);var Sd=hr("ipns:validator"),S_=1024*10,A_=async(r,e)=>{let t=Sn(e),n;try{let o=y7(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw Sd.error("record signature verification failed"),new nn("Record signature verification failed");if(t.validityType===ir.ValidityType.EOL){if(b7.default.fromString(t.validity).toDate().getTime()<Date.now())throw Sd.error("record has expired"),new wd("record has expired")}else if(t.validityType!=null)throw Sd.error("the validity type is unsupported"),new Fs("The validity type is unsupported");Sd("ipns record for %s is valid",t.value)};async function Ad(r,e){if(e.byteLength>S_)throw new bd("The record is too large");let t=Vs(r),n;vd(t,0)&&(n=iu(t));let o=Sn(e),i=g7(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(!j(s,r))throw new xc("Embedded public key did not match routing key");await A_(i,e)}var Id=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*Sc(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),o="";for await(let i of r){if(typeof i=="string"&&(i=new TextEncoder().encode(i)),rs(i)&&(i=i.subarray()),o+=n.decode(i,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new Id("Incoming message too long");let s=o.split(t);o=s.pop()??"";for(let a=0;a<s.length;a++)yield JSON.parse(s[a])}o+=n.decode(),o!==""&&(yield JSON.parse(o))}var $s=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},on=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function I_(r){return r[Symbol.asyncIterator]!=null}function T_(r){if(I_(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var x7=T_;var E7=N("/ipns/");function v7(r){return j(r.subarray(0,E7.byteLength),E7)}var Td=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 cancelReprovide(){}async put(e,t,n){if(!v7(e))return;let o=Vs(e),i=Q.createV1(114,o),s=Sn(t);await this.client.putIPNS(i,s,n)}async get(e,t){if(!v7(e))throw new Ce("Not found");let n=Vs(e),o=Q.createV1(114,n);try{let i=await this.client.getIPNS(o,t);return Ec(i)}catch(i){throw i.name==="BadResponseError"?new Ce("Not found"):i}}},_d=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await x7(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Ce("Not found")}async*getClosestPeers(e,t={}){}};var pt=hr("delegated-routing-v1-http-api-client"),Cd={concurrentRequests:4,timeout:3e4,cacheTTL:5*60*1e3,cacheName:"delegated-routing-v1-cache"},kd=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new En({concurrency:t.concurrentRequests??Cd.concurrentRequests}),this.inFlightRequests=new Map,this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??Cd.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new Td(this),this.peerRouting=new _d(this),this.cacheName=t.cacheName??Cd.cacheName,this.cacheTTL=t.cacheTTL??Cd.cacheTTL}get[hn](){return this.contentRouting}get[pn](){return this.peerRouting}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cacheTTL>0&&(this.cache=await globalThis.caches?.open(this.cacheName),this.cache!=null&&pt("cache enabled with ttl %d",this.cacheTTL)))}async stop(){this.httpQueue.clear(),this.shutDownController.abort(),await globalThis.caches?.delete(this.cacheName),this.started=!1}async*getProviders(e,t={}){pt("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);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 c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l==null)throw new on("No response received");if(!l.ok)throw l.status===404?new Ce("No matching records found"):l.status===422?new $s("Request does not conform to schema or semantic constraints"):new on(`Unexpected status code: ${l.status}`);if(l.body==null)throw new on("Routing response had no body");let u=l.headers.get("Content-Type");if(u==null)throw new on("No Content-Type header received");if(u?.startsWith("application/json")){let d=await l.json();for(let f of d.Providers){let h=this.#e(f);h!=null&&(yield h)}}else if(u.includes("application/x-ndjson"))for await(let d of Sc(gd(l.body))){let f=this.#e(d);f!=null&&(yield f)}else throw new on(`Unsupported Content-Type: ${u}`)}catch(a){pt.error("getProviders errored:",a)}finally{o.clear(),s.resolve(),pt("getProviders finished: %c",e)}}async*getPeers(e,t={}){pt("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);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 c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l.status===404)throw new Ce("No matching records found");if(l.status===422)throw new $s("Request does not conform to schema or semantic constraints");if(l.body==null)throw new on("Routing response had no body");if(l.headers.get("Content-Type")==="application/json"){let d=await l.json();for(let f of d.Peers){let h=this.#e(f);h!=null&&(yield h)}}else for await(let d of Sc(gd(l.body))){let f=this.#e(d);f!=null&&(yield f)}}catch(a){pt.error("getPeers errored:",a)}finally{o.clear(),s.resolve(),pt("getPeers finished: %c",e)}}async getIPNS(e,t={}){pt("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);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 c={headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o},l=await this.#r(a,c);if(pt("getIPNS GET %s %d",a,l.status),l.status===404)throw new Ce("No matching records found");if(l.status===422)throw new $s("Request does not conform to schema or semantic constraints");if(l.body==null)throw new on("GET ipns response had no body");let u=await l.arrayBuffer(),d=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await Ad(vc(e.multihash),d),Sn(d)}catch(c){throw pt.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),s.resolve(),pt("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){pt("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),i=le([this.shutDownController.signal,o,n.signal]);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={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:i},d=await this.#r(c,u);if(pt("putIPNS PUT %s %d",c,d.status),d.status!==200)throw new on("PUT ipns response had status other than 200")}catch(l){throw pt.error("putIPNS PUT %s error:",c,l.stack),l}finally{i.clear(),a.resolve(),pt("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map($)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Ve(e.ID),Addrs:n,Protocols:t}}catch(t){pt.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)}}async#r(e,t){let n=t.method??"GET",o=`${n}-${e}`;if(n==="GET"){let c=await this.cache?.match(e);if(c!=null){if(parseInt(c.headers.get("x-cache-expires")??"0",10)>Date.now())return pt("returning cached response for %s",o),c;await this.cache?.delete(e)}}let i=this.inFlightRequests.get(o);if(i!=null){let c=await i;return pt("deduplicating outgoing request for %s",o),c.clone()}let s=fetch(e,t).then(async c=>{if(this.cache!=null&&c.ok&&n==="GET"){let l=Date.now()+this.cacheTTL,u=new Headers(c.headers);u.set("x-cache-expires",l.toString());let d=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:u});await this.cache.put(e,d)}return c}).finally(()=>{this.inFlightRequests.delete(o)});return this.inFlightRequests.set(o,s),await s}};function S7(r,e={}){return new kd(new URL(r),e)}function Rm(){return{filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var A7="[a-fA-F\\d:]",No=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${A7})|(?<=${A7})(?=\\s|$))`:"",sn="(?: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}",Pd=`
|
|
2
|
+
"use strict";var Helia=(()=>{var fN=Object.create;var _p=Object.defineProperty;var hN=Object.getOwnPropertyDescriptor;var pN=Object.getOwnPropertyNames;var mN=Object.getPrototypeOf,gN=Object.prototype.hasOwnProperty;var er=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Pt=(r,e)=>{for(var t in e)_p(r,t,{get:e[t],enumerable:!0})},eb=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of pN(e))!gN.call(r,o)&&o!==t&&_p(r,o,{get:()=>e[o],enumerable:!(n=hN(e,o))||n.enumerable});return r};var Vt=(r,e,t)=>(t=r!=null?fN(mN(r)):{},eb(e||!r||!r.__esModule?_p(t,"default",{value:r,enumerable:!0}):t,r)),yN=r=>eb(_p({},"__esModule",{value:!0}),r);var gv=er((GZ,E6)=>{"use strict";var fB=Object.prototype.hasOwnProperty,Wr="~";function nf(){}Object.create&&(nf.prototype=Object.create(null),new nf().__proto__||(Wr=!1));function hB(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function mv(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new hB(t,n||r,o),s=Wr?Wr+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 C1(r,e){--r._eventsCount===0?r._events=new nf:delete r._events[e]}function Or(){this._events=new nf,this._eventsCount=0}Or.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)fB.call(t,n)&&e.push(Wr?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Or.prototype.listeners=function(e){var t=Wr?Wr+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};Or.prototype.listenerCount=function(e){var t=Wr?Wr+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Or.prototype.emit=function(e,t,n,o,i,s){var a=Wr?Wr+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,u,d;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(d=1,u=new Array(l-1);d<l;d++)u[d-1]=arguments[d];c.fn.apply(c.context,u)}else{var h=c.length,m;for(d=0;d<h;d++)switch(c[d].once&&this.removeListener(e,c[d].fn,void 0,!0),l){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,t);break;case 3:c[d].fn.call(c[d].context,t,n);break;case 4:c[d].fn.call(c[d].context,t,n,o);break;default:if(!u)for(m=1,u=new Array(l-1);m<l;m++)u[m-1]=arguments[m];c[d].fn.apply(c[d].context,u)}}return!0};Or.prototype.on=function(e,t,n){return mv(this,e,t,n,!1)};Or.prototype.once=function(e,t,n){return mv(this,e,t,n,!0)};Or.prototype.removeListener=function(e,t,n,o){var i=Wr?Wr+e:e;if(!this._events[i])return this;if(!t)return C1(this,i),this;var s=this._events[i];if(s.fn)s.fn===t&&(!o||s.once)&&(!n||s.context===n)&&C1(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:C1(this,i)}return this};Or.prototype.removeAllListeners=function(e){var t;return e?(t=Wr?Wr+e:e,this._events[t]&&C1(this,t)):(this._events=new nf,this._eventsCount=0),this};Or.prototype.off=Or.prototype.removeListener;Or.prototype.addListener=Or.prototype.on;Or.prefixed=Wr;Or.EventEmitter=Or;typeof E6<"u"&&(E6.exports=Or)});var vv=er((gJ,xv)=>{xv.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 aS=er(yf=>{(function(){var r,e,t,n,o,i,s,a;a=function(c){var l,u,d,h;return l=(c&255<<24)>>>24,u=(c&255<<16)>>>16,d=(c&65280)>>>8,h=c&255,[l,u,d,h].join(".")},s=function(c){var l,u,d,h,m,g;for(l=[],d=h=0;h<=3&&c.length!==0;d=++h){if(d>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}g=e(c),m=g[0],u=g[1],c=c.substring(u),l.push(m)}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,u,d,h,m;for(h=0,l=10,u="9",d=0,c.length>1&&c[d]==="0"&&(c[d+1]==="x"||c[d+1]==="X"?(d+=2,l=16):"0"<=c[d+1]&&c[d+1]<="9"&&(d++,l=8,u="7")),m=d;d<c.length;){if("0"<=c[d]&&c[d]<=u)h=h*l+(t(c[d])-n)>>>0;else if(l===16)if("a"<=c[d]&&c[d]<="f")h=h*l+(10+t(c[d])-i)>>>0;else if("A"<=c[d]&&c[d]<="F")h=h*l+(10+t(c[d])-o)>>>0;else break;else break;if(h>4294967295)throw new Error("too large");d++}if(d===m)throw new Error("empty octet");return[h,d]},r=function(){function c(l,u){var d,h,m,g;if(typeof l!="string")throw new Error("Missing `net' parameter");if(u||(g=l.split("/",2),l=g[0],u=g[1]),u||(u=32),typeof u=="string"&&u.indexOf(".")>-1){try{this.maskLong=s(u)}catch(w){throw d=w,new Error("Invalid mask: "+u)}for(h=m=32;m>=0;h=--m)if(this.maskLong===4294967295<<32-h>>>0){this.bitmask=h;break}}else if(u||u===0)this.bitmask=parseInt(u,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(w){throw d=w,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+u);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 u,d,h;for(h=s(this.first),d=s(this.last),u=0;h<=d;)l(a(h),h,u),u++,h++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),yf.ip2long=s,yf.long2ip=a,yf.Netmask=r}).call(yf)});var Pm=er((nie,G5)=>{var rie=function(){typeof G5<"u"&&(G5.exports=w);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(P){var R=P-P%1;return R==0&&(P<0||P===0&&1/P!=1/0)?-0:R},u=w.prototype,d=(w.fromDate=function(P){return new w(+P)},w.fromInt64BE=N(0,1,2,3,0,4),w.fromInt64LE=N(3,2,1,0,4,0),w.fromString=function(q){var R,X=new w,q=(q+="").replace(/^\s*[+\-]?\d+/,function(ne){var ne=+ne,B=1970+(ne-1970)%400;return X.year=ne-B,B}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(j,ne,B){return ne<0&&(B*=-1),R=6e4*(60*+ne+ +B),""}).replace(/\.\d+$/,function(j){return X.nano=+(j+c).substr(1,9),""}).split(/\D+/);if(1<q.length?q[1]--:q[1]=0,X.time=R=Date.UTC.apply(Date,q)-(R||0),isNaN(R))throw new TypeError("Invalid Date");return y(X)},w.fromTimeT=function(P){return S(P,0)},u.year=0,u.time=0,u.nano=0,u.addNano=function(P){return this.nano+=+P||0,this},u.getNano=function(){var P=y(this);return(P.time%1e3*a+ +P.nano+1e9)%1e9},u.getTimeT=function(){var R=y(this),P=Math.floor(R.time/1e3),R=R.year;return R&&(P+=R*t*r/e),P},u.getYear=function(){return this.toDate().getUTCFullYear()+this.year},u.toDate=function(){return x(y(this).time)},u.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},u.toString=function(P){var R=this,X=R.toDate(),q={H:function(){return H(X.getUTCHours())},L:function(){return $(X.getUTCMilliseconds(),3)},M:function(){return H(X.getUTCMinutes())},N:function(){return $(R.getNano(),9)},S:function(){return H(X.getUTCSeconds())},Y:function(){var j=R.getYear();return 999999<j?"+"+j:9999<j?"+"+$(j,6):0<=j?$(j,4):-999999<=j?"-"+$(-j,6):j},a:function(){return m[X.getUTCDay()]},b:function(){return h[X.getUTCMonth()]},d:function(){return H(X.getUTCDate())},e:function(){return function(j){return(9<j?"":" ")+(0|j)}(X.getUTCDate())},m:function(){return H(X.getUTCMonth()+1)}};return function j(ne){return ne.replace(/%./g,function(B){var K=B[1],L=g[K],K=q[K];return L?j(L):K?K():B})}(P||d)},u.writeInt64BE=v(0,1,2,3,0,4),u.writeInt64LE=v(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),h=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],m=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],g={"%":"%",F:"%Y-%m-%d",n:`
|
|
3
|
+
`,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return w;function w(P,R,X){var q=this;if(!(q instanceof w))return new w(P,R,X);q.time=+P||0,q.nano=+R||0,q.year=+X||0,y(q)}function y(P){var R,X,q,j=P.year,ne=P.time,B=P.nano,L=((B<0||a<=B)&&(B-=(X=Math.floor(B/a))*a,ne+=X,X=1),j%e);return(ne<-i||i<ne||L)&&((R=l(ne/o))&&(j+=R*e,ne-=R*o),(q=x(ne)).setUTCFullYear(L+q.getUTCFullYear()),q=(ne=+q)+(R=l((j-=L)/e))*o,R&&-i<=q&&q<=i&&(j-=R*e,ne=q),X=1),X&&(P.year=j,P.time=ne,P.nano=B),P}function x(P){var R=new Date(0);return R.setTime(P),R}function S(j,q){j=+j||0;var X=l((q=(q|0)*s)/n)+l(j/n),q=q%n+j%n,j=l(q/n);return j&&(X+=j,q-=j*n),new w(1e3*q,0,X*e)}function v(P,R,X,q,j,ne){return function(L,K){var I=y(this);L=L||new Array(8),W(L,K|=0);var k=Math.floor(I.time/1e3),I=I.year*(t*r/e),O=l(I/s)+l(k/s),I=I%s+k%s,k=Math.floor(I/s);return k&&(O+=k,I-=k*s),B(L,K+j,O),B(L,K+ne,I),L};function B(L,K,O){L[K+P]=O>>24&255,L[K+R]=O>>16&255,L[K+X]=O>>8&255,L[K+q]=255&O}}function N(P,R,X,q,j,ne){return function(L,K){W(L,K|=0);var O=B(L,K+j);return S(B(L,K+ne),O)};function B(L,K){return 16777216*L[K+P]+(L[K+R]<<16|L[K+X]<<8|L[K+q])}}function W(P,R){if(P=P&&P.length,P==null)throw new TypeError("Invalid Buffer");if(P<R+8)throw new RangeError("Out of range")}function H(P){return(9<P?"":"0")+(0|P)}function $(P,R){return(c+(0|P)).substr(-R)}}()});var bI=er((Kge,wI)=>{"use strict";wI.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var _I=er((SI,AI)=>{"use strict";var B2=bI(),{hasOwnProperty:vI}=Object.prototype,{propertyIsEnumerable:O$}=Object,Su=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),L$=SI,xI={concatArrays:!1,ignoreUndefined:!1},M2=r=>{let e=[];for(let t in r)vI.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)O$.call(r,n)&&e.push(n)}return e};function Au(r){return Array.isArray(r)?B$(r):B2(r)?M$(r):r}function B$(r){let e=r.slice(0,0);return M2(r).forEach(t=>{Su(e,t,Au(r[t]))}),e}function M$(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return M2(r).forEach(t=>{Su(e,t,Au(r[t]))}),e}var EI=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?Su(r,o,c7(r[o],e[o],n)):Su(r,o,Au(e[o])))}),r),U$=(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++)vI.call(i,a)&&(s.push(String(a)),i===r?Su(n,o++,i[a]):Su(n,o++,Au(i[a])));n=EI(n,i,M2(i).filter(a=>!s.includes(a)),t)}),n};function c7(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?U$(r,e,t):!B2(e)||!B2(r)?Au(e):EI(r,e,M2(e),t)}AI.exports=function(...r){let e=c7(Au(xI),this!==L$&&this||{},xI),t={_:{}};for(let n of r)if(n!==void 0){if(!B2(n))throw new TypeError("`"+n+"` is not an Option Object");t=c7(t,{_:n},e)}return t._}});var CI=er((Hge,TI)=>{"use strict";function F$(r){return r>=55296&&r<=56319}function $$(r){return r>=56320&&r<=57343}TI.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],F$(s)&&$$(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 PI=er((qge,kI)=>{"use strict";function K$(r){return r>=55296&&r<=56319}function V$(r){return r>=56320&&r<=57343}kI.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),V$(o)?i!=null&&K$(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 NI=er((jge,RI)=>{"use strict";var H$=CI(),q$=PI();RI.exports=H$.bind(null,q$)});var LI=er((Wge,OI)=>{"use strict";var j$=NI(),W$=/[\/\?<>\\:\*\|"]/g,G$=/[\x00-\x1f\x80-\x9f]/g,z$=/^\.+$/,X$=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,Y$=/[\. ]+$/;function DI(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(W$,e).replace(G$,e).replace(z$,e).replace(X$,e).replace(Y$,e);return j$(t,255)}OI.exports=function(r,e){var t=e&&e.replacement||"",n=DI(r,t);return t===""?n:DI(n,"")}});var $i=er(Tu=>{"use strict";var Z$="[object ArrayBuffer]",Fi=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===Z$}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}},l7="string",J$=/^[0-9a-f\s]+$/i,eK=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,tK=/^[a-zA-Z0-9-_]+$/,F2=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=Fi.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return decodeURIComponent(escape(n))}},Qn=class{static toString(e,t=!1){let n=Fi.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}},$2=class r{static isHex(e){return typeof e===l7&&J$.test(e)}static isBase64(e){return typeof e===l7&&eK.test(e)}static isBase64Url(e){return typeof e===l7&&tK.test(e)}static ToString(e,t="utf8"){let n=Fi.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 Qn.toString(n,!0);case"utf16":case"utf16be":return Qn.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 Qn.fromString(e,!0);case"utf16":case"utf16be":return Qn.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Fi.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 F2.fromString(e);case"utf16":case"utf16be":return Qn.fromString(e);case"utf16le":case"usc2":return Qn.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 F2.toString(e);case"utf16":case"utf16be":return Qn.toString(e);case"utf16le":case"usc2":return Qn.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=Fi.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Fi.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 Qn.toString(e,t)}static FromUtf16String(e,t=!1){return Qn.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,"")||""}};$2.DEFAULT_UTF8_ENCODING="utf8";function rK(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 nK(...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 oK(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}Tu.BufferSourceConverter=Fi;Tu.Convert=$2;Tu.assign=rK;Tu.combine=nK;Tu.isEqual=oK});var lC=er(()=>{var cC;(function(r){(function(e){var t=typeof globalThis=="object"||typeof globalThis=="object"?globalThis:typeof self=="object"?self:typeof this=="object"?this:a(),n=o(r);typeof t.Reflect<"u"&&(n=o(t.Reflect,n)),e(n,t),typeof t.Reflect>"u"&&(t.Reflect=r);function o(c,l){return function(u,d){Object.defineProperty(c,u,{configurable:!0,writable:!0,value:d}),l&&l(u,d)}}function i(){try{return Function("return this;")()}catch{}}function s(){try{return(0,eval)("(function() { return this; })()")}catch{}}function a(){return i()||s()}})(function(e,t){var n=Object.prototype.hasOwnProperty,o=typeof Symbol=="function",i=o&&typeof Symbol.toPrimitive<"u"?Symbol.toPrimitive:"@@toPrimitive",s=o&&typeof Symbol.iterator<"u"?Symbol.iterator:"@@iterator",a=typeof Object.create=="function",c={__proto__:[]}instanceof Array,l=!a&&!c,u={create:a?function(){return Ty(Object.create(null))}:c?function(){return Ty({__proto__:null})}:function(){return Ty({})},has:l?function(A,T){return n.call(A,T)}:function(A,T){return T in A},get:l?function(A,T){return n.call(A,T)?A[T]:void 0}:function(A,T){return A[T]}},d=Object.getPrototypeOf(Function),h=typeof Map=="function"&&typeof Map.prototype.entries=="function"?Map:aN(),m=typeof Set=="function"&&typeof Set.prototype.entries=="function"?Set:cN(),g=typeof WeakMap=="function"?WeakMap:lN(),w=o?Symbol.for("@reflect-metadata:registry"):void 0,y=oN(),x=iN(y);function S(A,T,U,Z){if(F(U)){if(!Bt(A))throw new TypeError;if(!Ir(T))throw new TypeError;return j(A,T)}else{if(!Bt(A))throw new TypeError;if(!he(T))throw new TypeError;if(!he(Z)&&!F(Z)&&!xe(Z))throw new TypeError;return xe(Z)&&(Z=void 0),U=mt(U),ne(A,T,U,Z)}}e("decorate",S);function v(A,T){function U(Z,ve){if(!he(Z))throw new TypeError;if(!F(ve)&&!vn(ve))throw new TypeError;I(A,T,Z,ve)}return U}e("metadata",v);function N(A,T,U,Z){if(!he(U))throw new TypeError;return F(Z)||(Z=mt(Z)),I(A,T,U,Z)}e("defineMetadata",N);function W(A,T,U){if(!he(T))throw new TypeError;return F(U)||(U=mt(U)),B(A,T,U)}e("hasMetadata",W);function H(A,T,U){if(!he(T))throw new TypeError;return F(U)||(U=mt(U)),L(A,T,U)}e("hasOwnMetadata",H);function $(A,T,U){if(!he(T))throw new TypeError;return F(U)||(U=mt(U)),K(A,T,U)}e("getMetadata",$);function P(A,T,U){if(!he(T))throw new TypeError;return F(U)||(U=mt(U)),O(A,T,U)}e("getOwnMetadata",P);function R(A,T){if(!he(A))throw new TypeError;return F(T)||(T=mt(T)),k(A,T)}e("getMetadataKeys",R);function X(A,T){if(!he(A))throw new TypeError;return F(T)||(T=mt(T)),z(A,T)}e("getOwnMetadataKeys",X);function q(A,T,U){if(!he(T))throw new TypeError;if(F(U)||(U=mt(U)),!he(T))throw new TypeError;F(U)||(U=mt(U));var Z=xd(T,U,!1);return F(Z)?!1:Z.OrdinaryDeleteMetadata(A,T,U)}e("deleteMetadata",q);function j(A,T){for(var U=A.length-1;U>=0;--U){var Z=A[U],ve=Z(T);if(!F(ve)&&!xe(ve)){if(!Ir(ve))throw new TypeError;T=ve}}return T}function ne(A,T,U,Z){for(var ve=A.length-1;ve>=0;--ve){var Mt=A[ve],zt=Mt(T,U,Z);if(!F(zt)&&!xe(zt)){if(!he(zt))throw new TypeError;Z=zt}}return Z}function B(A,T,U){var Z=L(A,T,U);if(Z)return!0;var ve=Iy(T);return xe(ve)?!1:B(A,ve,U)}function L(A,T,U){var Z=xd(T,U,!1);return F(Z)?!1:Ze(Z.OrdinaryHasOwnMetadata(A,T,U))}function K(A,T,U){var Z=L(A,T,U);if(Z)return O(A,T,U);var ve=Iy(T);if(!xe(ve))return K(A,ve,U)}function O(A,T,U){var Z=xd(T,U,!1);if(!F(Z))return Z.OrdinaryGetOwnMetadata(A,T,U)}function I(A,T,U,Z){var ve=xd(U,Z,!0);ve.OrdinaryDefineOwnMetadata(A,T,U,Z)}function k(A,T){var U=z(A,T),Z=Iy(A);if(Z===null)return U;var ve=k(Z,T);if(ve.length<=0)return U;if(U.length<=0)return ve;for(var Mt=new m,zt=[],Ke=0,ie=U;Ke<ie.length;Ke++){var ue=ie[Ke],pe=Mt.has(ue);pe||(Mt.add(ue),zt.push(ue))}for(var ye=0,Ve=ve;ye<Ve.length;ye++){var ue=Ve[ye],pe=Mt.has(ue);pe||(Mt.add(ue),zt.push(ue))}return zt}function z(A,T){var U=xd(A,T,!1);return U?U.OrdinaryOwnMetadataKeys(A,T):[]}function re(A){if(A===null)return 1;switch(typeof A){case"undefined":return 0;case"boolean":return 2;case"string":return 3;case"symbol":return 4;case"number":return 5;case"object":return A===null?1:6;default:return 6}}function F(A){return A===void 0}function xe(A){return A===null}function Pe(A){return typeof A=="symbol"}function he(A){return typeof A=="object"?A!==null:typeof A=="function"}function Ue(A,T){switch(re(A)){case 0:return A;case 1:return A;case 2:return A;case 3:return A;case 4:return A;case 5:return A}var U=T===3?"string":T===5?"number":"default",Z=bd(A,i);if(Z!==void 0){var ve=Z.call(A,U);if(he(ve))throw new TypeError;return ve}return rt(A,U==="default"?"number":U)}function rt(A,T){if(T==="string"){var U=A.toString;if(Tt(U)){var Z=U.call(A);if(!he(Z))return Z}var ve=A.valueOf;if(Tt(ve)){var Z=ve.call(A);if(!he(Z))return Z}}else{var ve=A.valueOf;if(Tt(ve)){var Z=ve.call(A);if(!he(Z))return Z}var Mt=A.toString;if(Tt(Mt)){var Z=Mt.call(A);if(!he(Z))return Z}}throw new TypeError}function Ze(A){return!!A}function ut(A){return""+A}function mt(A){var T=Ue(A,3);return Pe(T)?T:ut(T)}function Bt(A){return Array.isArray?Array.isArray(A):A instanceof Object?A instanceof Array:Object.prototype.toString.call(A)==="[object Array]"}function Tt(A){return typeof A=="function"}function Ir(A){return typeof A=="function"}function vn(A){switch(re(A)){case 3:return!0;case 4:return!0;default:return!1}}function bi(A,T){return A===T||A!==A&&T!==T}function bd(A,T){var U=A[T];if(U!=null){if(!Tt(U))throw new TypeError;return U}}function vp(A){var T=bd(A,s);if(!Tt(T))throw new TypeError;var U=T.call(A);if(!he(U))throw new TypeError;return U}function Ep(A){return A.value}function Sp(A){var T=A.next();return T.done?!1:T}function Ap(A){var T=A.return;T&&T.call(A)}function Iy(A){var T=Object.getPrototypeOf(A);if(typeof A!="function"||A===d||T!==d)return T;var U=A.prototype,Z=U&&Object.getPrototypeOf(U);if(Z==null||Z===Object.prototype)return T;var ve=Z.constructor;return typeof ve!="function"||ve===A?T:ve}function nN(){var A;!F(w)&&typeof t.Reflect<"u"&&!(w in t.Reflect)&&typeof t.Reflect.defineMetadata=="function"&&(A=sN(t.Reflect));var T,U,Z,ve=new g,Mt={registerProvider:zt,getProvider:ie,setProvider:pe};return Mt;function zt(ye){if(!Object.isExtensible(Mt))throw new Error("Cannot add provider to a frozen registry.");switch(!0){case A===ye:break;case F(T):T=ye;break;case T===ye:break;case F(U):U=ye;break;case U===ye:break;default:Z===void 0&&(Z=new m),Z.add(ye);break}}function Ke(ye,Ve){if(!F(T)){if(T.isProviderFor(ye,Ve))return T;if(!F(U)){if(U.isProviderFor(ye,Ve))return T;if(!F(Z))for(var gt=vp(Z);;){var Ut=Sp(gt);if(!Ut)return;var fo=Ep(Ut);if(fo.isProviderFor(ye,Ve))return Ap(gt),fo}}}if(!F(A)&&A.isProviderFor(ye,Ve))return A}function ie(ye,Ve){var gt=ve.get(ye),Ut;return F(gt)||(Ut=gt.get(Ve)),F(Ut)&&(Ut=Ke(ye,Ve),F(Ut)||(F(gt)&&(gt=new h,ve.set(ye,gt)),gt.set(Ve,Ut))),Ut}function ue(ye){if(F(ye))throw new TypeError;return T===ye||U===ye||!F(Z)&&Z.has(ye)}function pe(ye,Ve,gt){if(!ue(gt))throw new Error("Metadata provider not registered.");var Ut=ie(ye,Ve);if(Ut!==gt){if(!F(Ut))return!1;var fo=ve.get(ye);F(fo)&&(fo=new h,ve.set(ye,fo)),fo.set(Ve,gt)}return!0}}function oN(){var A;return!F(w)&&he(t.Reflect)&&Object.isExtensible(t.Reflect)&&(A=t.Reflect[w]),F(A)&&(A=nN()),!F(w)&&he(t.Reflect)&&Object.isExtensible(t.Reflect)&&Object.defineProperty(t.Reflect,w,{enumerable:!1,configurable:!1,writable:!1,value:A}),A}function iN(A){var T=new g,U={isProviderFor:function(ue,pe){var ye=T.get(ue);return F(ye)?!1:ye.has(pe)},OrdinaryDefineOwnMetadata:zt,OrdinaryHasOwnMetadata:ve,OrdinaryGetOwnMetadata:Mt,OrdinaryOwnMetadataKeys:Ke,OrdinaryDeleteMetadata:ie};return y.registerProvider(U),U;function Z(ue,pe,ye){var Ve=T.get(ue),gt=!1;if(F(Ve)){if(!ye)return;Ve=new h,T.set(ue,Ve),gt=!0}var Ut=Ve.get(pe);if(F(Ut)){if(!ye)return;if(Ut=new h,Ve.set(pe,Ut),!A.setProvider(ue,pe,U))throw Ve.delete(pe),gt&&T.delete(ue),new Error("Wrong provider for target.")}return Ut}function ve(ue,pe,ye){var Ve=Z(pe,ye,!1);return F(Ve)?!1:Ze(Ve.has(ue))}function Mt(ue,pe,ye){var Ve=Z(pe,ye,!1);if(!F(Ve))return Ve.get(ue)}function zt(ue,pe,ye,Ve){var gt=Z(ye,Ve,!0);gt.set(ue,pe)}function Ke(ue,pe){var ye=[],Ve=Z(ue,pe,!1);if(F(Ve))return ye;for(var gt=Ve.keys(),Ut=vp(gt),fo=0;;){var Jw=Sp(Ut);if(!Jw)return ye.length=fo,ye;var uN=Ep(Jw);try{ye[fo]=uN}catch(dN){try{Ap(Ut)}finally{throw dN}}fo++}}function ie(ue,pe,ye){var Ve=Z(pe,ye,!1);if(F(Ve)||!Ve.delete(ue))return!1;if(Ve.size===0){var gt=T.get(pe);F(gt)||(gt.delete(ye),gt.size===0&&T.delete(gt))}return!0}}function sN(A){var T=A.defineMetadata,U=A.hasOwnMetadata,Z=A.getOwnMetadata,ve=A.getOwnMetadataKeys,Mt=A.deleteMetadata,zt=new g,Ke={isProviderFor:function(ie,ue){var pe=zt.get(ie);return!F(pe)&&pe.has(ue)?!0:ve(ie,ue).length?(F(pe)&&(pe=new m,zt.set(ie,pe)),pe.add(ue),!0):!1},OrdinaryDefineOwnMetadata:T,OrdinaryHasOwnMetadata:U,OrdinaryGetOwnMetadata:Z,OrdinaryOwnMetadataKeys:ve,OrdinaryDeleteMetadata:Mt};return Ke}function xd(A,T,U){var Z=y.getProvider(A,T);if(!F(Z))return Z;if(U){if(y.setProvider(A,T,x))return x;throw new Error("Illegal state.")}}function aN(){var A={},T=[],U=function(){function Ke(ie,ue,pe){this._index=0,this._keys=ie,this._values=ue,this._selector=pe}return Ke.prototype["@@iterator"]=function(){return this},Ke.prototype[s]=function(){return this},Ke.prototype.next=function(){var ie=this._index;if(ie>=0&&ie<this._keys.length){var ue=this._selector(this._keys[ie],this._values[ie]);return ie+1>=this._keys.length?(this._index=-1,this._keys=T,this._values=T):this._index++,{value:ue,done:!1}}return{value:void 0,done:!0}},Ke.prototype.throw=function(ie){throw this._index>=0&&(this._index=-1,this._keys=T,this._values=T),ie},Ke.prototype.return=function(ie){return this._index>=0&&(this._index=-1,this._keys=T,this._values=T),{value:ie,done:!0}},Ke}(),Z=function(){function Ke(){this._keys=[],this._values=[],this._cacheKey=A,this._cacheIndex=-2}return Object.defineProperty(Ke.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),Ke.prototype.has=function(ie){return this._find(ie,!1)>=0},Ke.prototype.get=function(ie){var ue=this._find(ie,!1);return ue>=0?this._values[ue]:void 0},Ke.prototype.set=function(ie,ue){var pe=this._find(ie,!0);return this._values[pe]=ue,this},Ke.prototype.delete=function(ie){var ue=this._find(ie,!1);if(ue>=0){for(var pe=this._keys.length,ye=ue+1;ye<pe;ye++)this._keys[ye-1]=this._keys[ye],this._values[ye-1]=this._values[ye];return this._keys.length--,this._values.length--,bi(ie,this._cacheKey)&&(this._cacheKey=A,this._cacheIndex=-2),!0}return!1},Ke.prototype.clear=function(){this._keys.length=0,this._values.length=0,this._cacheKey=A,this._cacheIndex=-2},Ke.prototype.keys=function(){return new U(this._keys,this._values,ve)},Ke.prototype.values=function(){return new U(this._keys,this._values,Mt)},Ke.prototype.entries=function(){return new U(this._keys,this._values,zt)},Ke.prototype["@@iterator"]=function(){return this.entries()},Ke.prototype[s]=function(){return this.entries()},Ke.prototype._find=function(ie,ue){if(!bi(this._cacheKey,ie)){this._cacheIndex=-1;for(var pe=0;pe<this._keys.length;pe++)if(bi(this._keys[pe],ie)){this._cacheIndex=pe;break}}return this._cacheIndex<0&&ue&&(this._cacheIndex=this._keys.length,this._keys.push(ie),this._values.push(void 0)),this._cacheIndex},Ke}();return Z;function ve(Ke,ie){return Ke}function Mt(Ke,ie){return ie}function zt(Ke,ie){return[Ke,ie]}}function cN(){var A=function(){function T(){this._map=new h}return Object.defineProperty(T.prototype,"size",{get:function(){return this._map.size},enumerable:!0,configurable:!0}),T.prototype.has=function(U){return this._map.has(U)},T.prototype.add=function(U){return this._map.set(U,U),this},T.prototype.delete=function(U){return this._map.delete(U)},T.prototype.clear=function(){this._map.clear()},T.prototype.keys=function(){return this._map.keys()},T.prototype.values=function(){return this._map.keys()},T.prototype.entries=function(){return this._map.entries()},T.prototype["@@iterator"]=function(){return this.keys()},T.prototype[s]=function(){return this.keys()},T}();return A}function lN(){var A=16,T=u.create(),U=Z();return function(){function ie(){this._key=Z()}return ie.prototype.has=function(ue){var pe=ve(ue,!1);return pe!==void 0?u.has(pe,this._key):!1},ie.prototype.get=function(ue){var pe=ve(ue,!1);return pe!==void 0?u.get(pe,this._key):void 0},ie.prototype.set=function(ue,pe){var ye=ve(ue,!0);return ye[this._key]=pe,this},ie.prototype.delete=function(ue){var pe=ve(ue,!1);return pe!==void 0?delete pe[this._key]:!1},ie.prototype.clear=function(){this._key=Z()},ie}();function Z(){var ie;do ie="@@WeakMap@@"+Ke();while(u.has(T,ie));return T[ie]=!0,ie}function ve(ie,ue){if(!n.call(ie,U)){if(!ue)return;Object.defineProperty(ie,U,{value:u.create()})}return ie[U]}function Mt(ie,ue){for(var pe=0;pe<ue;++pe)ie[pe]=Math.random()*255|0;return ie}function zt(ie){if(typeof Uint8Array=="function"){var ue=new Uint8Array(ie);return typeof crypto<"u"?crypto.getRandomValues(ue):typeof msCrypto<"u"?msCrypto.getRandomValues(ue):Mt(ue,ie),ue}return Mt(new Array(ie),ie)}function Ke(){var ie=zt(A);ie[6]=ie[6]&79|64,ie[8]=ie[8]&191|128;for(var ue="",pe=0;pe<A;++pe){var ye=ie[pe];(pe===4||pe===6||pe===8)&&(ue+="-"),ye<16&&(ue+="0"),ue+=ye.toString(16).toLowerCase()}return ue}}function Ty(A){return A.__=void 0,delete A.__,A}})})(cC||(cC={}))});var wk=er((x_e,r3)=>{var ZC,JC,ek,tk,rk,nk,ok,ik,sk,t3,O9,ak,ck,cd,lk,uk,dk,fk,hk,pk,mk,gk,yk;(function(r){var e=typeof globalThis=="object"?globalThis:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){r(t(e,t(n)))}):typeof r3=="object"&&typeof r3.exports=="object"?r(t(e,t(r3.exports))):r(t(e));function t(n,o){return n!==e&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(i,s){return n[i]=o?o(i,s):s}}})(function(r){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var o in n)n.hasOwnProperty(o)&&(t[o]=n[o])};ZC=function(t,n){e(t,n);function o(){this.constructor=t}t.prototype=n===null?Object.create(n):(o.prototype=n.prototype,new o)},JC=Object.assign||function(t){for(var n,o=1,i=arguments.length;o<i;o++){n=arguments[o];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(t[s]=n[s])}return t},ek=function(t,n){var o={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&n.indexOf(i)<0&&(o[i]=t[i]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,i=Object.getOwnPropertySymbols(t);s<i.length;s++)n.indexOf(i[s])<0&&Object.prototype.propertyIsEnumerable.call(t,i[s])&&(o[i[s]]=t[i[s]]);return o},tk=function(t,n,o,i){var s=arguments.length,a=s<3?n:i===null?i=Object.getOwnPropertyDescriptor(n,o):i,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")a=Reflect.decorate(t,n,o,i);else for(var l=t.length-1;l>=0;l--)(c=t[l])&&(a=(s<3?c(a):s>3?c(n,o,a):c(n,o))||a);return s>3&&a&&Object.defineProperty(n,o,a),a},rk=function(t,n){return function(o,i){n(o,i,t)}},nk=function(t,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(t,n)},ok=function(t,n,o,i){function s(a){return a instanceof o?a:new o(function(c){c(a)})}return new(o||(o=Promise))(function(a,c){function l(h){try{d(i.next(h))}catch(m){c(m)}}function u(h){try{d(i.throw(h))}catch(m){c(m)}}function d(h){h.done?a(h.value):s(h.value).then(l,u)}d((i=i.apply(t,n||[])).next())})},ik=function(t,n){var o={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},i,s,a,c;return c={next:l(0),throw:l(1),return:l(2)},typeof Symbol=="function"&&(c[Symbol.iterator]=function(){return this}),c;function l(d){return function(h){return u([d,h])}}function u(d){if(i)throw new TypeError("Generator is already executing.");for(;o;)try{if(i=1,s&&(a=d[0]&2?s.return:d[0]?s.throw||((a=s.return)&&a.call(s),0):s.next)&&!(a=a.call(s,d[1])).done)return a;switch(s=0,a&&(d=[d[0]&2,a.value]),d[0]){case 0:case 1:a=d;break;case 4:return o.label++,{value:d[1],done:!1};case 5:o.label++,s=d[1],d=[0];continue;case 7:d=o.ops.pop(),o.trys.pop();continue;default:if(a=o.trys,!(a=a.length>0&&a[a.length-1])&&(d[0]===6||d[0]===2)){o=0;continue}if(d[0]===3&&(!a||d[1]>a[0]&&d[1]<a[3])){o.label=d[1];break}if(d[0]===6&&o.label<a[1]){o.label=a[1],a=d;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(d);break}a[2]&&o.ops.pop(),o.trys.pop();continue}d=n.call(t,o)}catch(h){d=[6,h],s=0}finally{i=a=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},yk=function(t,n,o,i){i===void 0&&(i=o),t[i]=n[o]},sk=function(t,n){for(var o in t)o!=="default"&&!n.hasOwnProperty(o)&&(n[o]=t[o])},t3=function(t){var n=typeof Symbol=="function"&&Symbol.iterator,o=n&&t[n],i=0;if(o)return o.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&i>=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")},O9=function(t,n){var o=typeof Symbol=="function"&&t[Symbol.iterator];if(!o)return t;var i=o.call(t),s,a=[],c;try{for(;(n===void 0||n-- >0)&&!(s=i.next()).done;)a.push(s.value)}catch(l){c={error:l}}finally{try{s&&!s.done&&(o=i.return)&&o.call(i)}finally{if(c)throw c.error}}return a},ak=function(){for(var t=[],n=0;n<arguments.length;n++)t=t.concat(O9(arguments[n]));return t},ck=function(){for(var t=0,n=0,o=arguments.length;n<o;n++)t+=arguments[n].length;for(var i=Array(t),s=0,n=0;n<o;n++)for(var a=arguments[n],c=0,l=a.length;c<l;c++,s++)i[s]=a[c];return i},cd=function(t){return this instanceof cd?(this.v=t,this):new cd(t)},lk=function(t,n,o){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i=o.apply(t,n||[]),s,a=[];return s={},c("next"),c("throw"),c("return"),s[Symbol.asyncIterator]=function(){return this},s;function c(g){i[g]&&(s[g]=function(w){return new Promise(function(y,x){a.push([g,w,y,x])>1||l(g,w)})})}function l(g,w){try{u(i[g](w))}catch(y){m(a[0][3],y)}}function u(g){g.value instanceof cd?Promise.resolve(g.value.v).then(d,h):m(a[0][2],g)}function d(g){l("next",g)}function h(g){l("throw",g)}function m(g,w){g(w),a.shift(),a.length&&l(a[0][0],a[0][1])}},uk=function(t){var n,o;return n={},i("next"),i("throw",function(s){throw s}),i("return"),n[Symbol.iterator]=function(){return this},n;function i(s,a){n[s]=t[s]?function(c){return(o=!o)?{value:cd(t[s](c)),done:s==="return"}:a?a(c):c}:a}},dk=function(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=t[Symbol.asyncIterator],o;return n?n.call(t):(t=typeof t3=="function"?t3(t):t[Symbol.iterator](),o={},i("next"),i("throw"),i("return"),o[Symbol.asyncIterator]=function(){return this},o);function i(a){o[a]=t[a]&&function(c){return new Promise(function(l,u){c=t[a](c),s(l,u,c.done,c.value)})}}function s(a,c,l,u){Promise.resolve(u).then(function(d){a({value:d,done:l})},c)}},fk=function(t,n){return Object.defineProperty?Object.defineProperty(t,"raw",{value:n}):t.raw=n,t},hk=function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var o in t)Object.hasOwnProperty.call(t,o)&&(n[o]=t[o]);return n.default=t,n},pk=function(t){return t&&t.__esModule?t:{default:t}},mk=function(t,n){if(!n.has(t))throw new TypeError("attempted to get private field on non-instance");return n.get(t)},gk=function(t,n,o){if(!n.has(t))throw new TypeError("attempted to set private field on non-instance");return n.set(t,o),o},r("__extends",ZC),r("__assign",JC),r("__rest",ek),r("__decorate",tk),r("__param",rk),r("__metadata",nk),r("__awaiter",ok),r("__generator",ik),r("__exportStar",sk),r("__createBinding",yk),r("__values",t3),r("__read",O9),r("__spread",ak),r("__spreadArrays",ck),r("__await",cd),r("__asyncGenerator",lk),r("__asyncDelegator",uk),r("__asyncValues",dk),r("__makeTemplateObject",fk),r("__importStar",hk),r("__importDefault",pk),r("__classPrivateFieldGet",mk),r("__classPrivateFieldSet",gk)})});var QP=er(N3=>{"use strict";Object.defineProperty(N3,"__esModule",{value:!0});var Aw=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}))}}},R3=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new Aw;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)}};N3.EventIterator=R3;N3.default=R3});var ZP=er(hp=>{"use strict";Object.defineProperty(hp,"__esModule",{value:!0});var _w=QP();hp.EventIterator=_w.EventIterator;function uH(r,e,t){return new _w.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}hp.subscribe=uH;hp.default=_w.EventIterator});var HR=er((ILe,VR)=>{function uo(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))}VR.exports=uo;uo.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};uo.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};uo.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};uo.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)};uo.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};uo.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};uo.prototype.start=uo.prototype.try;uo.prototype.errors=function(){return this._errors};uo.prototype.attempts=function(){return this._attempts};uo.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 qR=er(ul=>{var XH=HR();ul.operation=function(r){var e=ul.timeouts(r);return new XH(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};ul.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};ul.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};ul.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=ul.operation(e),u=Array.prototype.slice.call(arguments,1),d=u.pop();u.push(function(h){l.retry(h)||(h&&(arguments[0]=l.mainError()),d.apply(this,arguments))}),l.attempt(function(){c.apply(r,u)})}.bind(r,s),r[i].options=e}}});var WR=er((CLe,jR)=>{jR.exports=qR()});var gq={};Pt(gq,{DEFAULT_SESSION_MAX_PROVIDERS:()=>H6,DEFAULT_SESSION_MIN_PROVIDERS:()=>V6,InsufficientProvidersError:()=>hf,NoRoutersAvailableError:()=>Is,UnknownCodecError:()=>mf,UnknownHashAlgorithmError:()=>pf,createHelia:()=>pq,libp2pDefaults:()=>B3});var tb=Symbol.for("@libp2p/connection");var jo=Symbol.for("@libp2p/content-routing");var ma=Symbol.for("@libp2p/peer-discovery");var Ip=Symbol.for("@libp2p/peer-id");function Tp(r){return!!r?.[Ip]}var Wo=Symbol.for("@libp2p/peer-routing");var rs="keep-alive";var ns=Symbol.for("@libp2p/transport");var ga;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(ga||(ga={}));var Fr=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},Cp=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},kp=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},D=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},xi=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},vd=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}};var Pp=class extends Error{static name="ConnectionClosingError";constructor(e="The connection is closing"){super(e),this.name="ConnectionClosingError"}},fl=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},hl=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},Go=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},Rp=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}},ya=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},ze=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},pl=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},os=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},Np=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},is=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},vi=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},Oe=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},Dp=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},zo=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},En=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Ei=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},wa=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},ml=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},Op=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},ss=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},ho=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var Le=class extends EventTarget{#e=new Map;constructor(){super()}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 Lp(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function cr(...r){let e=[];for(let t of r)Lp(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 Tr(...r){let e=[];for(let t of r)Lp(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 Xe=Symbol.for("@libp2p/service-capabilities"),Sn=Symbol.for("@libp2p/service-dependencies");function Ne(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 de(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var Bp=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||(e-1&e)!==0)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}},gl=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new Bp(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 Bp(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 Cy=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function Zr(r={}){return wN(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 wN(r,e){e=e??{};let t=e.onEnd,n=new gl,o,i,s,a=de(),c=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((y,x)=>{i=S=>{i=null,n.push(S);try{y(r(n))}catch(v){x(v)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=de()})}},l=y=>i!=null?i(y):(n.push(y),o),u=y=>(n=new gl,i!=null?i({error:y}):(n.push({error:y}),o)),d=y=>{if(s)return o;if(e?.objectMode!==!0&&y?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:y})},h=y=>s?o:(s=!0,y!=null?u(y):l({done:!0})),m=()=>(n=new gl,h(),{done:!0}),g=y=>(h(y),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:m,throw:g,push:d,end:h,get readableLength(){return n.size},onEmpty:async y=>{let x=y?.signal;if(x?.throwIfAborted(),n.isEmpty())return;let S,v;x!=null&&(S=new Promise((N,W)=>{v=()=>{W(new Cy)},x.addEventListener("abort",v)}));try{await Promise.race([a.promise,S])}finally{v!=null&&x!=null&&x?.removeEventListener("abort",v)}}},t==null)return o;let w=o;return o={[Symbol.asyncIterator](){return this},next(){return w.next()},throw(y){return w.throw(y),t!=null&&(t(y),t=void 0),{done:!0}},return(){return w.return(),t!=null&&(t(),t=void 0),{done:!0}},push:d,end(y){return w.end(y),t!=null&&(t(y),t=void 0),o},get readableLength(){return w.readableLength},onEmpty:y=>w.onEmpty(y)},o}var ky=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 tr(r,e,t,n){let o=new ky(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((i,s)=>{function a(){t?.removeEventListener("abort",u),r.removeEventListener(e,c),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let c=d=>{try{if(n?.filter?.(d)===!1)return}catch(h){a(),s(h);return}a(),i(d)},l=d=>{a(),s(d.detail)},u=()=>{a(),s(o)};t?.addEventListener("abort",u),r.addEventListener(e,c),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}var Mp=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}},Up=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var Fp=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 dt(r,e,t){if(e==null)return r;if(e.aborted)return r.catch(()=>{}),Promise.reject(new Fp(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new Fp(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 $p=class{deferred;signal;constructor(e){this.signal=e,this.deferred=de(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new Fr)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function bN(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var Kp=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=bN(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,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 Fr),this.cleanup())}async join(e={}){let t=new $p(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 dt(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 $r=class extends Le{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 Up;let n=new Kp(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 Fr)}),this.clear()}async onEmpty(e){this.size!==0&&await tr(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await tr(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await tr(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=Zr({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 Fr("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 lr=class extends $r{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function xN(r){return r[Symbol.asyncIterator]!=null}function vN(r){if(xN(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Cr=vN;function ke(r=0){return new Uint8Array(r)}function Ct(r=0){return new Uint8Array(r)}var EN=Math.pow(2,7),SN=Math.pow(2,14),AN=Math.pow(2,21),Py=Math.pow(2,28),Ry=Math.pow(2,35),Ny=Math.pow(2,42),Dy=Math.pow(2,49),tt=128,kr=127;function Ce(r){if(r<EN)return 1;if(r<SN)return 2;if(r<AN)return 3;if(r<Py)return 4;if(r<Ry)return 5;if(r<Ny)return 6;if(r<Dy)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Oy(r,e,t=0){switch(Ce(r)){case 8:e[t++]=r&255|tt,r/=128;case 7:e[t++]=r&255|tt,r/=128;case 6:e[t++]=r&255|tt,r/=128;case 5:e[t++]=r&255|tt,r/=128;case 4:e[t++]=r&255|tt,r>>>=7;case 3:e[t++]=r&255|tt,r>>>=7;case 2:e[t++]=r&255|tt,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function _N(r,e,t=0){switch(Ce(r)){case 8:e.set(t++,r&255|tt),r/=128;case 7:e.set(t++,r&255|tt),r/=128;case 6:e.set(t++,r&255|tt),r/=128;case 5:e.set(t++,r&255|tt),r/=128;case 4:e.set(t++,r&255|tt),r>>>=7;case 3:e.set(t++,r&255|tt),r>>>=7;case 2:e.set(t++,r&255|tt),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function Ly(r,e){let t=r[e],n=0;if(n+=t&kr,t<tt||(t=r[e+1],n+=(t&kr)<<7,t<tt)||(t=r[e+2],n+=(t&kr)<<14,t<tt)||(t=r[e+3],n+=(t&kr)<<21,t<tt)||(t=r[e+4],n+=(t&kr)*Py,t<tt)||(t=r[e+5],n+=(t&kr)*Ry,t<tt)||(t=r[e+6],n+=(t&kr)*Ny,t<tt)||(t=r[e+7],n+=(t&kr)*Dy,t<tt))return n;throw new RangeError("Could not decode varint")}function IN(r,e){let t=r.get(e),n=0;if(n+=t&kr,t<tt||(t=r.get(e+1),n+=(t&kr)<<7,t<tt)||(t=r.get(e+2),n+=(t&kr)<<14,t<tt)||(t=r.get(e+3),n+=(t&kr)<<21,t<tt)||(t=r.get(e+4),n+=(t&kr)*Py,t<tt)||(t=r.get(e+5),n+=(t&kr)*Ry,t<tt)||(t=r.get(e+6),n+=(t&kr)*Ny,t<tt)||(t=r.get(e+7),n+=(t&kr)*Dy,t<tt))return n;throw new RangeError("Could not decode varint")}function Fe(r,e,t=0){return e==null&&(e=Ct(Ce(r))),e instanceof Uint8Array?Oy(r,e,t):_N(r,e,t)}function nt(r,e=0){return r instanceof Uint8Array?Ly(r,e):IN(r,e)}function st(r,e){e==null&&(e=r.reduce((o,i)=>o+i.length,0));let t=Ct(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}function ge(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 nb=Symbol.for("@achingbrain/uint8arraylist");function rb(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 yl(r){return!!r?.[nb]}var J=class r{bufs;length;[nb]=!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(yl(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(yl(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=rb(this.bufs,e);return t.buf[t.index]}set(e,t){let n=rb(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(yl(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 st(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:st(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,u=t>a&&t<=c;if(l&&u){if(e===a&&t===c){n.push(s);break}let d=e-a;n.push(s.subarray(d,d+(t-e)));break}if(l){if(e===0){n.push(s);continue}n.push(s.subarray(e-a));continue}if(u){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(!yl(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 d=0;d<i;d++)s[d]=-1;for(let d=0;d<o;d++)s[n[d]]=d;let a=s,c=this.byteLength-n.byteLength,l=n.byteLength-1,u;for(let d=t;d<=c;d+=u){u=0;for(let h=l;h>=0;h--){let m=this.get(d+h);if(n[h]!==m){u=Math.max(1,h-a[m]);break}}if(u===0)return d}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=Ct(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=ke(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=ke(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=ke(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=Ct(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=ke(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=ke(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=ke(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=ke(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=ke(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(!ge(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}};var Vp=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},wl=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Hp=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},Ed=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function qp(r){return r[Symbol.asyncIterator]!=null}function ob(r,e){if(r.byteLength>e)throw new wl("Message length too long")}var Wp=r=>{let e=Ce(r),t=Ct(e);return Fe(r,t),Wp.bytes=e,t};Wp.bytes=0;function po(r,e){e=e??{};let t=e.lengthEncoder??Wp,n=e?.maxDataLength??4194304;function*o(i){ob(i,n);let s=t(i.byteLength);s instanceof Uint8Array?yield s:yield*s,i instanceof Uint8Array?yield i:yield*i}return qp(r)?async function*(){for await(let i of r)yield*o(i)}():function*(){for(let i of r)yield*o(i)}()}po.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Wp,n=e?.maxDataLength??4194304;return ob(r,n),new J(t(r.byteLength),r)};var ba;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(ba||(ba={}));var By=r=>{let e=nt(r);return By.bytes=Ce(e),e};By.bytes=0;function mo(r,e){let t=new J,n=ba.LENGTH,o=-1,i=e?.lengthDecoder??By,s=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===ba.LENGTH)try{if(o=i(t),o<0)throw new Vp("Invalid message length");if(o>a)throw new wl("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=ba.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new Hp("Message length length too long");break}throw l}if(n===ba.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=ba.LENGTH}}}return qp(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Ed("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Ed("Unexpected end of input")}()}mo.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 mo(n,{...e??{},onLength:i=>{t=i}})};function kN(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 bl=kN;function PN(r){return r[Symbol.asyncIterator]!=null}function RN(r,e){let t=0;if(PN(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=bl(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 Jr=RN;var Uy=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=de(),this.haveNext=de()}[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=de(),e}async throw(e){return this.ended=!0,this.error=e,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 this.ended=!0,this.nextResult=e,this.haveNext.resolve(),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 this.error??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=de(),await dt(this.readNext.promise,t?.signal,t)}};function ib(){return new Uy}function NN(r){return r[Symbol.asyncIterator]!=null}async function DN(r,e){try{await Promise.all(r.map(async t=>{for await(let n of t)await e.push(n)})),await e.end()}catch(t){await e.end(t).catch(()=>{})}}async function*ON(r){let e=ib();DN(r,e).catch(()=>{}),yield*e}function*LN(r){for(let e of r)yield*e}function BN(...r){let e=[];for(let t of r)NN(t)||e.push(t);return e.length===r.length?LN(e):ON(r)}var Kr=BN;function rr(r,...e){if(r==null)throw new Error("Empty pipeline");if(Fy(r)){let n=r;r=()=>n.source}else if(ab(r)||sb(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&Fy(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++)Fy(t[n])&&(t[n]=UN(t[n]));return MN(...t)}var MN=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},sb=r=>r?.[Symbol.asyncIterator]!=null,ab=r=>r?.[Symbol.iterator]!=null,Fy=r=>r==null?!1:r.sink!=null&&r.source!=null,UN=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=Zr({objectMode:!0});t.then(()=>{n.end()},s=>{n.end(s)});let o,i=r.source;if(sb(i))o=async function*(){yield*i,n.end()};else if(ab(i))o=function*(){yield*i,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return Kr(n,o())}return r.source};function FN(r){return r[Symbol.asyncIterator]!=null}function $N(r,e){return FN(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 as=$N;var ae=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var Sd="/ipfs/bitswap/1.2.0";var $y=new Float32Array([-0]),cs=new Uint8Array($y.buffer);function cb(r,e,t){$y[0]=r,e[t]=cs[0],e[t+1]=cs[1],e[t+2]=cs[2],e[t+3]=cs[3]}function lb(r,e){return cs[0]=r[e],cs[1]=r[e+1],cs[2]=r[e+2],cs[3]=r[e+3],$y[0]}var Ky=new Float64Array([-0]),Pr=new Uint8Array(Ky.buffer);function ub(r,e,t){Ky[0]=r,e[t]=Pr[0],e[t+1]=Pr[1],e[t+2]=Pr[2],e[t+3]=Pr[3],e[t+4]=Pr[4],e[t+5]=Pr[5],e[t+6]=Pr[6],e[t+7]=Pr[7]}function db(r,e){return Pr[0]=r[e],Pr[1]=r[e+1],Pr[2]=r[e+2],Pr[3]=r[e+3],Pr[4]=r[e+4],Pr[5]=r[e+5],Pr[6]=r[e+6],Pr[7]=r[e+7],Ky[0]}var KN=BigInt(Number.MAX_SAFE_INTEGER),VN=BigInt(Number.MIN_SAFE_INTEGER),An=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 xa;if(e<KN&&e>VN)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>fb&&(o=0n,++n>fb&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return xa;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):xa}},xa=new An(0,0);xa.toBigInt=function(){return 0n};xa.zzEncode=xa.zzDecode=function(){return this};xa.length=function(){return 1};var fb=4294967296n;function hb(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 pb(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 Vy(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 go(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Gp(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var Hy=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,go(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 go(this,4);return Gp(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw go(this,4);return Gp(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw go(this,4);let e=lb(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw go(this,4);let e=db(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 go(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return pb(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw go(this,e);this.pos+=e}else do if(this.pos>=this.len)throw go(this);while((this.buf[this.pos++]&128)!==0);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 An(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 go(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 go(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 go(this,8);let e=Gp(this.buf,this.pos+=4),t=Gp(this.buf,this.pos+=4);return new An(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=Ly(this.buf,this.pos);return this.pos+=Ce(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 qy(r){return new Hy(r instanceof Uint8Array?r:r.subarray())}function Se(r,e,t){let n=qy(r);return e.decode(n,void 0,t)}var Yy={};Pt(Yy,{base10:()=>zN});var gW=new Uint8Array(0);function gb(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 yo(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 yb(r){return new TextEncoder().encode(r)}function wb(r){return new TextDecoder().decode(r)}function HN(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),u=Math.log(256)/Math.log(a);function d(g){if(g instanceof Uint8Array||(ArrayBuffer.isView(g)?g=new Uint8Array(g.buffer,g.byteOffset,g.byteLength):Array.isArray(g)&&(g=Uint8Array.from(g))),!(g instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(g.length===0)return"";for(var w=0,y=0,x=0,S=g.length;x!==S&&g[x]===0;)x++,w++;for(var v=(S-x)*u+1>>>0,N=new Uint8Array(v);x!==S;){for(var W=g[x],H=0,$=v-1;(W!==0||H<y)&&$!==-1;$--,H++)W+=256*N[$]>>>0,N[$]=W%a>>>0,W=W/a>>>0;if(W!==0)throw new Error("Non-zero carry");y=H,x++}for(var P=v-y;P!==v&&N[P]===0;)P++;for(var R=c.repeat(w);P<v;++P)R+=r.charAt(N[P]);return R}function h(g){if(typeof g!="string")throw new TypeError("Expected String");if(g.length===0)return new Uint8Array;var w=0;if(g[w]!==" "){for(var y=0,x=0;g[w]===c;)y++,w++;for(var S=(g.length-w)*l+1>>>0,v=new Uint8Array(S);g[w];){var N=t[g.charCodeAt(w)];if(N===255)return;for(var W=0,H=S-1;(N!==0||W<x)&&H!==-1;H--,W++)N+=a*v[H]>>>0,v[H]=N%256>>>0,N=N/256>>>0;if(N!==0)throw new Error("Non-zero carry");x=W,w++}if(g[w]!==" "){for(var $=S-x;$!==S&&v[$]===0;)$++;for(var P=new Uint8Array(y+(S-$)),R=y;$!==S;)P[R++]=v[$++];return P}}}function m(g){var w=h(g);if(w)return w;throw new Error(`Non-${e} character`)}return{encode:d,decodeUnsafe:h,decode:m}}var qN=HN,jN=qN,bb=jN;var Wy=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")}},Gy=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 xb(this,e)}},zy=class{decoders;constructor(e){this.decoders=e}or(e){return xb(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 xb(r,e){return new zy({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Xy=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 Wy(e,t,n),this.decoder=new Gy(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function xl({name:r,prefix:e,encode:t,decode:n}){return new Xy(r,e,t,n)}function ls({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=bb(t,r);return xl({prefix:e,name:r,encode:n,decode:i=>yo(o(i))})}function WN(r,e,t,n){let o={};for(let u=0;u<e.length;++u)o[e[u]]=u;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 u=0;u<i;++u){let d=o[r[u]];if(d===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|d,a+=t,a>=8&&(a-=8,s[l++]=255&c>>a)}if(a>=t||(255&c<<8-a)!==0)throw new SyntaxError("Unexpected end of data");return s}function GN(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)!==0;)i+="=";return i}function Nt({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return xl({prefix:e,name:r,encode(o){return GN(o,n,t)},decode(o){return WN(o,n,t,r)}})}var zN=ls({prefix:"9",name:"base10",alphabet:"0123456789"});var Qy={};Pt(Qy,{base16:()=>XN,base16upper:()=>YN});var XN=Nt({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),YN=Nt({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Zy={};Pt(Zy,{base2:()=>QN});var QN=Nt({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Jy={};Pt(Jy,{base256emoji:()=>rD});var vb=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}"),ZN=vb.reduce((r,e,t)=>(r[t]=e,r),[]),JN=vb.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function eD(r){return r.reduce((e,t)=>(e+=ZN[t],e),"")}function tD(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=JN[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var rD=xl({prefix:"\u{1F680}",name:"base256emoji",encode:eD,decode:tD});var e4={};Pt(e4,{base32:()=>Xt,base32hex:()=>sD,base32hexpad:()=>cD,base32hexpadupper:()=>lD,base32hexupper:()=>aD,base32pad:()=>oD,base32padupper:()=>iD,base32upper:()=>nD,base32z:()=>uD});var Xt=Nt({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),nD=Nt({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),oD=Nt({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),iD=Nt({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),sD=Nt({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),aD=Nt({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),cD=Nt({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),lD=Nt({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),uD=Nt({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var t4={};Pt(t4,{base36:()=>Xo,base36upper:()=>dD});var Xo=ls({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),dD=ls({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var r4={};Pt(r4,{base58btc:()=>He,base58flickr:()=>fD});var He=ls({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),fD=ls({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var n4={};Pt(n4,{base64:()=>Ht,base64pad:()=>hD,base64url:()=>va,base64urlpad:()=>pD});var Ht=Nt({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),hD=Nt({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),va=Nt({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),pD=Nt({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var o4={};Pt(o4,{base8:()=>mD});var mD=Nt({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var i4={};Pt(i4,{identity:()=>gD});var gD=xl({prefix:"\0",name:"identity",encode:r=>wb(r),decode:r=>yb(r)});var zp={};Pt(zp,{code:()=>s4,decode:()=>vD,encode:()=>xD,name:()=>bD});var yD=new TextEncoder,wD=new TextDecoder,bD="json",s4=512;function xD(r){return yD.encode(JSON.stringify(r))}function vD(r){return JSON.parse(wD.decode(r))}var vl={};Pt(vl,{code:()=>Ea,decode:()=>AD,encode:()=>SD,name:()=>ED});var ED="raw",Ea=85;function SD(r){return yo(r)}function AD(r){return yo(r)}var l4={};Pt(l4,{identity:()=>Nr});var vt={};Pt(vt,{Digest:()=>Sa,create:()=>Rr,decode:()=>Ye,equals:()=>c4,hasCode:()=>HD});var _D=Ab,Eb=128,ID=127,TD=~ID,CD=Math.pow(2,31);function Ab(r,e,t){e=e||[],t=t||0;for(var n=t;r>=CD;)e[t++]=r&255|Eb,r/=128;for(;r&TD;)e[t++]=r&255|Eb,r>>>=7;return e[t]=r|0,Ab.bytes=t-n+1,e}var kD=a4,PD=128,Sb=127;function a4(r,n){var t=0,n=n||0,o=0,i=n,s,a=r.length;do{if(i>=a)throw a4.bytes=0,new RangeError("Could not decode varint");s=r[i++],t+=o<28?(s&Sb)<<o:(s&Sb)*Math.pow(2,o),o+=7}while(s>=PD);return a4.bytes=i-n,t}var RD=Math.pow(2,7),ND=Math.pow(2,14),DD=Math.pow(2,21),OD=Math.pow(2,28),LD=Math.pow(2,35),BD=Math.pow(2,42),MD=Math.pow(2,49),UD=Math.pow(2,56),FD=Math.pow(2,63),$D=function(r){return r<RD?1:r<ND?2:r<DD?3:r<OD?4:r<LD?5:r<BD?6:r<MD?7:r<UD?8:r<FD?9:10},KD={encode:_D,decode:kD,encodingLength:$D},VD=KD,Ad=VD;function _d(r,e=0){return[Ad.decode(r,e),Ad.decode.bytes]}function El(r,e,t=0){return Ad.encode(r,e,t),e}function Sl(r){return Ad.encodingLength(r)}function Rr(r,e){let t=e.byteLength,n=Sl(r),o=n+Sl(t),i=new Uint8Array(o+t);return El(r,i,0),El(t,i,n),i.set(e,o),new Sa(r,t,e,i)}function Ye(r){let e=yo(r),[t,n]=_d(e),[o,i]=_d(e.subarray(n)),s=e.subarray(n+i);if(s.byteLength!==o)throw new Error("Incorrect length");return new Sa(t,o,s,e)}function c4(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&gb(r.bytes,t.bytes)}}var Sa=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function HD(r,e){return r.code===e}var _b=0,qD="identity",Ib=yo;function jD(r){return Rr(_b,Ib(r))}var Nr={code:_b,name:qD,encode:Ib,digest:jD};var f4={};Pt(f4,{sha256:()=>yt,sha512:()=>Yp});function d4({name:r,code:e,encode:t}){return new u4(r,e,t)}var u4=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?Rr(this.code,t):t.then(n=>Rr(this.code,n))}else throw Error("Unknown type, must be binary type")}};function Cb(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var yt=d4({name:"sha2-256",code:18,encode:Cb("SHA-256")}),Yp=d4({name:"sha2-512",code:19,encode:Cb("SHA-512")});function kb(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return GD(t,h4(r),e??He.encoder);default:return zD(t,h4(r),e??Xt.encoder)}}var Pb=new WeakMap;function h4(r){let e=Pb.get(r);if(e==null){let t=new Map;return Pb.set(r,t),t}return e}var le=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!==Id)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==XD)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=Rr(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&&c4(e.multihash,n.multihash)}toString(e){return kb(this,e)}toJSON(){return{"/":kb(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??Rb(n,o,i.bytes))}else if(t[YD]===!0){let{version:n,multihash:o,code:i}=t,s=Ye(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!==Id)throw new Error(`Version 0 CID must use dag-pb (code: ${Id}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=Rb(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,Id,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=yo(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 Sa(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[d,h]=_d(e.subarray(t));return t+=h,d},o=n(),i=Id;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,u=l-s;return{version:o,codec:i,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,o]=WD(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 h4(i).set(n,e),i}};function WD(r,e){switch(r[0]){case"Q":{let t=e??He;return[He.prefix,t.decode(`${He.prefix}${r}`)]}case He.prefix:{let t=e??He;return[He.prefix,t.decode(r)]}case Xt.prefix:{let t=e??Xt;return[Xt.prefix,t.decode(r)]}case Xo.prefix:{let t=e??Xo;return[Xo.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 GD(r,e,t){let{prefix:n}=t;if(n!==He.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 zD(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 Id=112,XD=18;function Rb(r,e,t){let n=Sl(r),o=n+Sl(e),i=new Uint8Array(o+t.byteLength);return El(r,i,0),El(e,i,n),i.set(t,o),i}var YD=Symbol.for("@ipld/js-cid/CID");var Aa={...i4,...Zy,...o4,...Yy,...Qy,...e4,...t4,...r4,...n4,...Jy},JW={...f4,...l4};function Db(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var Nb=Db("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),p4=Db("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=Ct(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),QD={utf8:Nb,"utf-8":Nb,hex:Aa.base16,latin1:p4,ascii:p4,binary:p4,...Aa},Qp=QD;function V(r,e="utf8"){let t=Qp[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function m4(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return Ct(s);o+s>e&&(n=Ct(e),o=0);let a=n.subarray(o,o+=s);return(o&7)!==0&&(o=(o|7)+1),a}}var _a=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function g4(){}var w4=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},ZD=m4();function JD(r){return globalThis.Buffer!=null?Ct(r):ZD(r)}var Cd=class{len;head;tail;states;constructor(){this.len=0,this.head=new _a(g4,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new _a(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new b4((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(Zp,10,An.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=An.fromBigInt(e);return this._push(Zp,t.length(),t)}uint64Number(e){return this._push(Oy,Ce(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=An.fromBigInt(e).zzEncode();return this._push(Zp,t.length(),t)}sint64Number(e){let t=An.fromNumber(e).zzEncode();return this._push(Zp,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(y4,1,e?1:0)}fixed32(e){return this._push(Td,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=An.fromBigInt(e);return this._push(Td,4,t.lo)._push(Td,4,t.hi)}fixed64Number(e){let t=An.fromNumber(e);return this._push(Td,4,t.lo)._push(Td,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(cb,4,e)}double(e){return this._push(ub,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(y4,1,0):this.uint32(t)._push(tO,t,e)}string(e){let t=hb(e);return t!==0?this.uint32(t)._push(Vy,t,e):this._push(y4,1,0)}fork(){return this.states=new w4(this),this.head=this.tail=new _a(g4,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 _a(g4,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=JD(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function y4(r,e,t){e[t]=r&255}function eO(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var b4=class extends _a{next;constructor(e,t){super(eO,e,t),this.next=void 0}};function Zp(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 Td(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 tO(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Cd.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(rO,e,r),this},Cd.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(nO,e,r),this});function rO(r,e,t){e.set(r,t)}function nO(r,e,t){r.length<40?Vy(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(V(r),t)}function x4(){return new Cd}function Ae(r,e){let t=x4();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Al;(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"})(Al||(Al={}));function Jp(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function Et(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 Jp("enum",Al.VARINT,t,n)}function _e(r,e){return Jp("message",Al.LENGTH_DELIMITED,r,e)}var at=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},kd=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var Ft;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(Ft||(Ft={}));var v4;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(v4||(v4={}));(function(r){r.codec=()=>Et(v4)})(Ft||(Ft={}));var _l;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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),Ft.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:ke(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=Ft.codec().decode(t);break}case 5:{i.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(_l||(_l={}));var e1;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let i of t.entries)n.uint32(10),_l.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 at('Decode error - map field "entries" had too many elements');i.entries.push(_l.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=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(e1||(e1={}));var Il;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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:ke(0),data:ke(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=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Il||(Il={}));var Kn;(function(r){r.HaveBlock="HaveBlock",r.DoNotHaveBlock="DoNotHaveBlock"})(Kn||(Kn={}));var t1;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DoNotHaveBlock=1]="DoNotHaveBlock"})(t1||(t1={}));(function(r){r.codec=()=>Et(t1)})(Kn||(Kn={}));var Tl;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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&&t1[t.type]!==0&&(n.uint32(16),Kn.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:ke(0),type:Kn.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=Kn.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Tl||(Tl={}));var Ia;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),e1.codec().encode(t.wantlist,n)),t.blocks!=null)for(let i of t.blocks)n.uint32(26),Il.codec().encode(i,n);if(t.blockPresences!=null)for(let i of t.blockPresences)n.uint32(34),Tl.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=e1.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 at('Decode error - map field "blocks" had too many elements');i.blocks.push(Il.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 at('Decode error - map field "blockPresences" had too many elements');i.blockPresences.push(Tl.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=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Ia||(Ia={}));function Ob(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 r1=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var oO=4193648,iO=oO+16;function*Lb(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},u=Ia.encode(l).byteLength,{added:d,hasMore:h,newSize:m}=E4(o,l.blocks,a,e,u,sO);a+=d,u=m;let g=h;({added:d,hasMore:h,newSize:m}=E4(n,l.blockPresences,s,e,u,aO)),s+=d,u=m;let w=h;if({added:d,hasMore:h,newSize:m}=E4(t,l.wantlist.entries,i,e,u,cO),i+=d,u=m,c=!g&&!w&&!h,c||(l.wantlist.full=!1),yield Ia.encode(l),c)break}}function E4(r,e,t,n,o,i){let s=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],u=i(l);if(u>iO)throw new r1("Cannot send block as after encoding it is over the max message size");let d=o+u;if(d>n){a=!0;break}e.push(l),s++,o=d}return{hasMore:a,added:s,newSize:o}}function sO(r){return S4(3,Il.encode(r))}function aO(r){return S4(4,Tl.encode(r))}function cO(r){return S4(1,_l.encode(r))}function S4(r,e){let t=Ce(r),n=Ce(e.byteLength);return t+n+e.byteLength}var n1=class extends Le{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??[Sd],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 lr({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 zo(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",t.status)},i=AbortSignal.timeout(this.messageReceiveTimeout);i.addEventListener("abort",o),await t.closeWrite(),await rr(t,s=>mo(s,{maxDataLength:this.maxIncomingMessageSize}),async s=>{for await(let a of s)try{let c=Ia.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),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 ae("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 Cr(Jr(as(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=Ob(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 D("No message to send");this.log("sendMessage to %p",e),i?.onProgress?.(new ae("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,Sd,i);await a.closeRead();try{await rr(Lb(s,this.maxOutgoingMessageSize),c=>po(c),a),await a.close(i)}catch(c){i?.onProgress?.(new ae("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 En("Network isn't running");t?.onProgress?.(new ae("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),tr(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(Sd))return!0;throw new vi(`${e} did not support ${Sd}`)}})]);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 M(r,e="utf8"){let t=Qp[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var yO=parseInt("11111",2),A4=parseInt("10000000",2),wO=parseInt("01111111",2),Bb={0:Pd,1:Pd,2:bO,3:EO,4:SO,5:vO,6:xO,16:Pd,22:Pd,48:Pd};function Vn(r,e={offset:0}){let t=r[e.offset]&yO;if(e.offset++,Bb[t]!=null)return Bb[t](r,e);throw new Error("No decoder for tag "+t)}function Rd(r,e){let t=0;if((r[e.offset]&A4)===A4){let n=r[e.offset]&wO,o="0x";e.offset++;for(let i=0;i<n;i++,e.offset++)o+=r[e.offset].toString(16).padStart(2,"0");t=parseInt(o,16)}else t=r[e.offset],e.offset++;return t}function Pd(r,e){Rd(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=Vn(r,e);if(n===null)break;t.push(n)}return t}function bO(r,e){let t=Rd(r,e),n=e.offset,o=e.offset+t,i=[];for(let s=n;s<o;s++)s===n&&r[s]===0||i.push(r[s]);return e.offset+=t,Uint8Array.from(i)}function xO(r,e){let t=Rd(r,e),n=e.offset+t,o=r[e.offset];e.offset++;let i=0,s=0;o<40?(i=0,s=o):o<80?(i=1,s=o-40):(i=2,s=o-80);let a=`${i}.${s}`,c=[];for(;e.offset<n;){let l=r[e.offset];if(e.offset++,c.push(l&127),l<128){c.reverse();let u=0;for(let d=0;d<c.length;d++)u+=c[d]<<d*7;a+=`.${u}`,c=[]}}return a}function vO(r,e){return e.offset++,null}function EO(r,e){let t=Rd(r,e),n=r[e.offset];e.offset++;let o=r.subarray(e.offset,e.offset+t-1);if(e.offset+=t,n!==0)throw new Error("Unused bits in bit string is unimplemented");return o}function SO(r,e){let t=Rd(r,e),n=r.subarray(e.offset,e.offset+t);return e.offset+=t,n}function AO(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new J;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function o1(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=AO(r.byteLength);return new J(Uint8Array.from([e.byteLength|A4]),e)}function Vr(r){let e=new J,t=128;return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new J(Uint8Array.from([2]),o1(e),e)}function Nd(r){let e=Uint8Array.from([0]),t=new J(e,r);return new J(Uint8Array.from([3]),o1(t),t)}function Mb(r){return new J(Uint8Array.from([4]),o1(r),r)}function wo(r,e=48){let t=new J;for(let n of r)t.append(n);return new J(Uint8Array.from([e]),o1(t),t)}var Ub="1.2.840.10045.3.1.7",Fb="1.3.132.0.34",$b="1.3.132.0.35";async function Kb(r="P-256"){let e=await crypto.subtle.generateKey({name:"ECDSA",namedCurve:r},!0,["sign","verify"]);return{publicKey:await crypto.subtle.exportKey("jwk",e.publicKey),privateKey:await crypto.subtle.exportKey("jwk",e.privateKey)}}async function Vb(r,e){let t=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["sign"]),n=await crypto.subtle.sign({name:"ECDSA",hash:{name:"SHA-256"}},t,e.subarray());return new Uint8Array(n,0,n.byteLength)}async function Hb(r,e,t){let n=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["verify"]);return crypto.subtle.verify({name:"ECDSA",hash:{name:"SHA-256"}},n,e,t.subarray())}var _O=Uint8Array.from([6,8,42,134,72,206,61,3,1,7]),IO=Uint8Array.from([6,5,43,129,4,0,34]),TO=Uint8Array.from([6,5,43,129,4,0,35]),qb={ext:!0,kty:"EC",crv:"P-256"},jb={ext:!0,kty:"EC",crv:"P-384"},Wb={ext:!0,kty:"EC",crv:"P-521"},Cl=32,kl=48,Pl=66;function Gb(r){let e=Vn(r);return _4(e)}function _4(r){let e=r[1],t=M(e,"base64url"),n=r[2][1][0],o=1,i,s;if(e.byteLength===Cl)return i=M(n.subarray(o,o+Cl),"base64url"),s=M(n.subarray(o+Cl),"base64url"),new Ca({...qb,key_ops:["sign"],d:t,x:i,y:s});if(e.byteLength===kl)return i=M(n.subarray(o,o+kl),"base64url"),s=M(n.subarray(o+kl),"base64url"),new Ca({...jb,key_ops:["sign"],d:t,x:i,y:s});if(e.byteLength===Pl)return i=M(n.subarray(o,o+Pl),"base64url"),s=M(n.subarray(o+Pl),"base64url"),new Ca({...Wb,key_ops:["sign"],d:t,x:i,y:s});throw new D(`Private key length was wrong length, got ${e.byteLength}, expected 32, 48 or 66`)}function I4(r){let e=Vn(r);return zb(e)}function zb(r){let e=r[1][1][0],t=1,n,o;if(e.byteLength===Cl*2+1)return n=M(e.subarray(t,t+Cl),"base64url"),o=M(e.subarray(t+Cl),"base64url"),new Ta({...qb,key_ops:["verify"],x:n,y:o});if(e.byteLength===kl*2+1)return n=M(e.subarray(t,t+kl),"base64url"),o=M(e.subarray(t+kl),"base64url"),new Ta({...jb,key_ops:["verify"],x:n,y:o});if(e.byteLength===Pl*2+1)return n=M(e.subarray(t,t+Pl),"base64url"),o=M(e.subarray(t+Pl),"base64url"),new Ta({...Wb,key_ops:["verify"],x:n,y:o});throw new D(`coordinates were wrong length, got ${e.byteLength}, expected 65, 97 or 133`)}function Xb(r){return wo([Vr(Uint8Array.from([1])),Mb(V(r.d??"","base64url")),wo([Qb(r.crv)],160),wo([Nd(new J(Uint8Array.from([4]),V(r.x??"","base64url"),V(r.y??"","base64url")))],161)]).subarray()}function Yb(r){return wo([Vr(Uint8Array.from([1])),wo([Qb(r.crv)],160),wo([Nd(new J(Uint8Array.from([4]),V(r.x??"","base64url"),V(r.y??"","base64url")))],161)]).subarray()}function Qb(r){if(r==="P-256")return _O;if(r==="P-384")return IO;if(r==="P-521")return TO;throw new D(`Invalid curve ${r}`)}async function Zb(r="P-256"){let e=await Kb(r);return new Ca(e.privateKey)}var Ta=class{type="ECDSA";jwk;_raw;constructor(e){this.jwk=e}get raw(){return this._raw==null&&(this._raw=Yb(this.jwk)),this._raw}toMultihash(){return Nr.digest(nr(this))}toCID(){return le.createV1(114,this.toMultihash())}toString(){return He.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}async verify(e,t){return Hb(this.jwk,t,e)}},Ca=class{type="ECDSA";jwk;publicKey;_raw;constructor(e){this.jwk=e,this.publicKey=new Ta({crv:e.crv,ext:e.ext,key_ops:["verify"],kty:"EC",x:e.x,y:e.y})}get raw(){return this._raw==null&&(this._raw=Xb(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}async sign(e){return Vb(this.jwk,e)}};function us(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function CO(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Rl(r,...e){if(!CO(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function ka(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");us(r.outputLen),us(r.blockLen)}function Nl(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 Jb(r,e){Rl(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}var Pa=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function Ra(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function bo(r,e){return r<<32-e|r>>>e}function i1(r,e){return r<<e|r>>>32-e>>>0}var Ez=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function";var kO=async()=>{};async function ex(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 kO(),n+=i)}}function tx(r){if(typeof r!="string")throw new Error("utf8ToBytes expected string, got "+typeof r);return new Uint8Array(new TextEncoder().encode(r))}function xo(r){return typeof r=="string"&&(r=tx(r)),Rl(r),r}function T4(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];Rl(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 Dl=class{clone(){return this._cloneInto()}};function rx(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function Ol(r){let e=n=>r().update(xo(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Na(r=32){if(Pa&&typeof Pa.getRandomValues=="function")return Pa.getRandomValues(new Uint8Array(r));if(Pa&&typeof Pa.randomBytes=="function")return Uint8Array.from(Pa.randomBytes(r));throw new Error("crypto.getRandomValues must be defined")}function PO(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 s1(r,e,t){return r&e^~r&t}function a1(r,e,t){return r&e^r&t^e&t}var ds=class extends Dl{constructor(e,t,n,o){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(e),this.view=Ra(this.buffer)}update(e){Nl(this);let{view:t,buffer:n,blockLen:o}=this;e=xo(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=Ra(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){Nl(this),Jb(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 d=s;d<o;d++)t[d]=0;PO(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=Ra(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,u=this.get();if(l>u.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d<l;d++)a.setUint32(4*d,u[d],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 RO=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]),fs=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),hs=new Uint32Array(64),C4=class extends ds{constructor(e=32){super(64,e,8,!1),this.A=fs[0]|0,this.B=fs[1]|0,this.C=fs[2]|0,this.D=fs[3]|0,this.E=fs[4]|0,this.F=fs[5]|0,this.G=fs[6]|0,this.H=fs[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 d=0;d<16;d++,t+=4)hs[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let h=hs[d-15],m=hs[d-2],g=bo(h,7)^bo(h,18)^h>>>3,w=bo(m,17)^bo(m,19)^m>>>10;hs[d]=w+hs[d-7]+g+hs[d-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:l,H:u}=this;for(let d=0;d<64;d++){let h=bo(a,6)^bo(a,11)^bo(a,25),m=u+h+s1(a,c,l)+RO[d]+hs[d]|0,w=(bo(n,2)^bo(n,13)^bo(n,22))+a1(n,o,i)|0;u=l,l=c,c=a,a=s+m|0,s=i,i=o,o=n,n=m+w|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,u=u+this.H|0,this.set(n,o,i,s,a,c,l,u)}roundClean(){hs.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var _n=Ol(()=>new C4);var c1=BigInt(4294967295),k4=BigInt(32);function nx(r,e=!1){return e?{h:Number(r&c1),l:Number(r>>k4&c1)}:{h:Number(r>>k4&c1)|0,l:Number(r&c1)|0}}function NO(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}=nx(r[o],e);[t[o],n[o]]=[i,s]}return[t,n]}var DO=(r,e)=>BigInt(r>>>0)<<k4|BigInt(e>>>0),OO=(r,e,t)=>r>>>t,LO=(r,e,t)=>r<<32-t|e>>>t,BO=(r,e,t)=>r>>>t|e<<32-t,MO=(r,e,t)=>r<<32-t|e>>>t,UO=(r,e,t)=>r<<64-t|e>>>t-32,FO=(r,e,t)=>r>>>t-32|e<<64-t,$O=(r,e)=>e,KO=(r,e)=>r,VO=(r,e,t)=>r<<t|e>>>32-t,HO=(r,e,t)=>e<<t|r>>>32-t,qO=(r,e,t)=>e<<t-32|r>>>64-t,jO=(r,e,t)=>r<<t-32|e>>>64-t;function WO(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var GO=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),zO=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,XO=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),YO=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,QO=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),ZO=(r,e,t,n,o,i)=>e+t+n+o+i+(r/2**32|0)|0;var JO={fromBig:nx,split:NO,toBig:DO,shrSH:OO,shrSL:LO,rotrSH:BO,rotrSL:MO,rotrBH:UO,rotrBL:FO,rotr32H:$O,rotr32L:KO,rotlSH:VO,rotlSL:HO,rotlBH:qO,rotlBL:jO,add:WO,add3L:GO,add3H:zO,add4L:XO,add4H:YO,add5H:ZO,add5L:QO},De=JO;var[eL,tL]=De.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))),ps=new Uint32Array(80),ms=new Uint32Array(80),P4=class extends ds{constructor(e=64){super(128,e,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:u,Fh:d,Fl:h,Gh:m,Gl:g,Hh:w,Hl:y}=this;return[e,t,n,o,i,s,a,c,l,u,d,h,m,g,w,y]}set(e,t,n,o,i,s,a,c,l,u,d,h,m,g,w,y){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=u|0,this.Fh=d|0,this.Fl=h|0,this.Gh=m|0,this.Gl=g|0,this.Hh=w|0,this.Hl=y|0}process(e,t){for(let v=0;v<16;v++,t+=4)ps[v]=e.getUint32(t),ms[v]=e.getUint32(t+=4);for(let v=16;v<80;v++){let N=ps[v-15]|0,W=ms[v-15]|0,H=De.rotrSH(N,W,1)^De.rotrSH(N,W,8)^De.shrSH(N,W,7),$=De.rotrSL(N,W,1)^De.rotrSL(N,W,8)^De.shrSL(N,W,7),P=ps[v-2]|0,R=ms[v-2]|0,X=De.rotrSH(P,R,19)^De.rotrBH(P,R,61)^De.shrSH(P,R,6),q=De.rotrSL(P,R,19)^De.rotrBL(P,R,61)^De.shrSL(P,R,6),j=De.add4L($,q,ms[v-7],ms[v-16]),ne=De.add4H(j,H,X,ps[v-7],ps[v-16]);ps[v]=ne|0,ms[v]=j|0}let{Ah:n,Al:o,Bh:i,Bl:s,Ch:a,Cl:c,Dh:l,Dl:u,Eh:d,El:h,Fh:m,Fl:g,Gh:w,Gl:y,Hh:x,Hl:S}=this;for(let v=0;v<80;v++){let N=De.rotrSH(d,h,14)^De.rotrSH(d,h,18)^De.rotrBH(d,h,41),W=De.rotrSL(d,h,14)^De.rotrSL(d,h,18)^De.rotrBL(d,h,41),H=d&m^~d&w,$=h&g^~h&y,P=De.add5L(S,W,$,tL[v],ms[v]),R=De.add5H(P,x,N,H,eL[v],ps[v]),X=P|0,q=De.rotrSH(n,o,28)^De.rotrBH(n,o,34)^De.rotrBH(n,o,39),j=De.rotrSL(n,o,28)^De.rotrBL(n,o,34)^De.rotrBL(n,o,39),ne=n&i^n&a^i&a,B=o&s^o&c^s&c;x=w|0,S=y|0,w=m|0,y=g|0,m=d|0,g=h|0,{h:d,l:h}=De.add(l|0,u|0,R|0,X|0),l=a|0,u=c|0,a=i|0,c=s|0,i=n|0,s=o|0;let L=De.add3L(X,j,B);n=De.add3H(L,R,q,ne),o=L|0}({h:n,l:o}=De.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:i,l:s}=De.add(this.Bh|0,this.Bl|0,i|0,s|0),{h:a,l:c}=De.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=De.add(this.Dh|0,this.Dl|0,l|0,u|0),{h:d,l:h}=De.add(this.Eh|0,this.El|0,d|0,h|0),{h:m,l:g}=De.add(this.Fh|0,this.Fl|0,m|0,g|0),{h:w,l:y}=De.add(this.Gh|0,this.Gl|0,w|0,y|0),{h:x,l:S}=De.add(this.Hh|0,this.Hl|0,x|0,S|0),this.set(n,o,i,s,a,c,l,u,d,h,m,g,w,y,x,S)}roundClean(){ps.fill(0),ms.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 Si=Ol(()=>new P4);var O4=BigInt(0),D4=BigInt(1);function Da(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function L4(r){if(!Da(r))throw new Error("Uint8Array expected")}function Yo(r,e){if(typeof e!="boolean")throw new Error(r+" boolean expected, got "+e)}function Dd(r){let e=r.toString(16);return e.length&1?"0"+e:e}function sx(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?O4:BigInt("0x"+r)}var ax=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",rL=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function gs(r){if(L4(r),ax)return r.toHex();let e="";for(let t=0;t<r.length;t++)e+=rL[r[t]];return e}var Ai={_0:48,_9:57,A:65,F:70,a:97,f:102};function ox(r){if(r>=Ai._0&&r<=Ai._9)return r-Ai._0;if(r>=Ai.A&&r<=Ai.F)return r-(Ai.A-10);if(r>=Ai.a&&r<=Ai.f)return r-(Ai.a-10)}function Od(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);if(ax)return Uint8Array.fromHex(r);let e=r.length,t=e/2;if(e%2)throw new Error("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=ox(r.charCodeAt(i)),a=ox(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 _i(r){return sx(gs(r))}function Qo(r){return L4(r),sx(gs(Uint8Array.from(r).reverse()))}function Oa(r,e){return Od(r.toString(16).padStart(e*2,"0"))}function ys(r,e){return Oa(r,e).reverse()}function ft(r,e,t){let n;if(typeof e=="string")try{n=Od(e)}catch(i){throw new Error(r+" must be hex string or Uint8Array, cause: "+i)}else if(Da(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+" of length "+t+" expected, got "+o);return n}function ws(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];L4(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 R4=r=>typeof r=="bigint"&&O4<=r;function l1(r,e,t){return R4(r)&&R4(e)&&R4(t)&&e<=r&&r<t}function Dr(r,e,t,n){if(!l1(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function cx(r){let e;for(e=0;r>O4;r>>=D4,e+=1);return e}var La=r=>(D4<<BigInt(r))-D4,N4=r=>new Uint8Array(r),ix=r=>Uint8Array.from(r);function lx(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=N4(r),o=N4(r),i=0,s=()=>{n.fill(1),o.fill(0),i=0},a=(...d)=>t(o,n,...d),c=(d=N4(0))=>{o=a(ix([0]),d),n=a(),d.length!==0&&(o=a(ix([1]),d),n=a())},l=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let d=0,h=[];for(;d<e;){n=a();let m=n.slice();h.push(m),d+=n.length}return ws(...h)};return(d,h)=>{s(),c(d);let m;for(;!(m=h(l()));)c();return s(),m}}var nL={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"||Da(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 vo(r,e,t={}){let n=(o,i,s)=>{let a=nL[i];if(typeof a!="function")throw new Error("invalid validator function");let c=r[o];if(!(s&&c===void 0)&&!a(c,r))throw new Error("param "+String(o)+" is invalid. Expected "+i+", got "+c)};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}function Ll(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 Yt=BigInt(0),St=BigInt(1),Ba=BigInt(2),oL=BigInt(3),B4=BigInt(4),ux=BigInt(5),dx=BigInt(8),iL=BigInt(9),sL=BigInt(16);function Je(r,e){let t=r%e;return t>=Yt?t:e+t}function M4(r,e,t){if(e<Yt)throw new Error("invalid exponent, negatives unsupported");if(t<=Yt)throw new Error("invalid modulus");if(t===St)return Yt;let n=St;for(;e>Yt;)e&St&&(n=n*r%t),r=r*r%t,e>>=St;return n}function wt(r,e,t){let n=r;for(;e-- >Yt;)n*=n,n%=t;return n}function u1(r,e){if(r===Yt)throw new Error("invert: expected non-zero number");if(e<=Yt)throw new Error("invert: expected positive modulus, got "+e);let t=Je(r,e),n=e,o=Yt,i=St,s=St,a=Yt;for(;t!==Yt;){let l=n/t,u=n%t,d=o-s*l,h=i-a*l;n=t,t=u,o=s,i=a,s=d,a=h}if(n!==St)throw new Error("invert: does not exist");return Je(o,e)}function aL(r){let e=(r-St)/Ba,t,n,o;for(t=r-St,n=0;t%Ba===Yt;t/=Ba,n++);for(o=Ba;o<r&&M4(o,e,r)!==r-St;o++)if(o>1e3)throw new Error("Cannot find square root: likely non-prime P");if(n===1){let s=(r+St)/B4;return function(c,l){let u=c.pow(l,s);if(!c.eql(c.sqr(u),l))throw new Error("Cannot find square root");return u}}let i=(t+St)/Ba;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,u=a.pow(a.mul(a.ONE,o),t),d=a.pow(c,i),h=a.pow(c,t);for(;!a.eql(h,a.ONE);){if(a.eql(h,a.ZERO))return a.ZERO;let m=1;for(let w=a.sqr(h);m<l&&!a.eql(w,a.ONE);m++)w=a.sqr(w);let g=a.pow(u,St<<BigInt(l-m-1));u=a.sqr(g),d=a.mul(d,g),h=a.mul(h,u),l=m}return d}}function cL(r){if(r%B4===oL){let e=(r+St)/B4;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%dx===ux){let e=(r-ux)/dx;return function(n,o){let i=n.mul(o,Ba),s=n.pow(i,e),a=n.mul(o,s),c=n.mul(n.mul(a,Ba),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%sL,aL(r)}var fx=(r,e)=>(Je(r,e)&St)===St,lL=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function U4(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=lL.reduce((n,o)=>(n[o]="function",n),e);return vo(r,t)}function uL(r,e,t){if(t<Yt)throw new Error("invalid exponent, negatives unsupported");if(t===Yt)return r.ONE;if(t===St)return e;let n=r.ONE,o=e;for(;t>Yt;)t&St&&(n=r.mul(n,o)),o=r.sqr(o),t>>=St;return n}function dL(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 F4(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function bs(r,e,t=!1,n={}){if(r<=Yt)throw new Error("invalid field: expected ORDER > 0, got "+r);let{nBitLength:o,nByteLength:i}=F4(r,e);if(i>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let s,a=Object.freeze({ORDER:r,isLE:t,BITS:o,BYTES:i,MASK:La(o),ZERO:Yt,ONE:St,create:c=>Je(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof c);return Yt<=c&&c<r},is0:c=>c===Yt,isOdd:c=>(c&St)===St,neg:c=>Je(-c,r),eql:(c,l)=>c===l,sqr:c=>Je(c*c,r),add:(c,l)=>Je(c+l,r),sub:(c,l)=>Je(c-l,r),mul:(c,l)=>Je(c*l,r),pow:(c,l)=>uL(a,c,l),div:(c,l)=>Je(c*u1(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>u1(c,r),sqrt:n.sqrt||(c=>(s||(s=cL(r)),s(a,c))),invertBatch:c=>dL(a,c),cmov:(c,l,u)=>u?l:c,toBytes:c=>t?ys(c,i):Oa(c,i),fromBytes:c=>{if(c.length!==i)throw new Error("Field.fromBytes: expected "+i+" bytes, got "+c.length);return t?Qo(c):_i(c)}});return Object.freeze(a)}function hx(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 $4(r){let e=hx(r);return e+Math.ceil(e/2)}function px(r,e,t=!1){let n=r.length,o=hx(e),i=$4(e);if(n<16||n<i||n>1024)throw new Error("expected "+i+"-1024 bytes of input, got "+n);let s=t?Qo(r):_i(r),a=Je(s,e-St)+St;return t?ys(a,o):Oa(a,o)}var mx=BigInt(0),j4=BigInt(1);function K4(r,e){let t=e.negate();return r?t:e}function yx(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function V4(r,e){yx(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1),o=2**r,i=La(r),s=BigInt(r);return{windows:t,windowSize:n,mask:i,maxNumber:o,shiftBy:s}}function gx(r,e,t){let{windowSize:n,mask:o,maxNumber:i,shiftBy:s}=t,a=Number(r&o),c=r>>s;a>n&&(a-=i,c+=j4);let l=e*n,u=l+Math.abs(a)-1,d=a===0,h=a<0,m=e%2!==0;return{nextN:c,offset:u,isZero:d,isNeg:h,isNegF:m,offsetF:l}}function fL(r,e){if(!Array.isArray(r))throw new Error("array expected");r.forEach((t,n)=>{if(!(t instanceof e))throw new Error("invalid point at index "+n)})}function hL(r,e){if(!Array.isArray(r))throw new Error("array of scalars expected");r.forEach((t,n)=>{if(!e.isValid(t))throw new Error("invalid scalar at index "+n)})}var H4=new WeakMap,wx=new WeakMap;function q4(r){return wx.get(r)||1}function d1(r,e){return{constTimeNegate:K4,hasPrecomputes(t){return q4(t)!==1},unsafeLadder(t,n,o=r.ZERO){let i=t;for(;n>mx;)n&j4&&(o=o.add(i)),i=i.double(),n>>=j4;return o},precomputeWindow(t,n){let{windows:o,windowSize:i}=V4(n,e),s=[],a=t,c=a;for(let l=0;l<o;l++){c=a,s.push(c);for(let u=1;u<i;u++)c=c.add(a),s.push(c);a=c.double()}return s},wNAF(t,n,o){let i=r.ZERO,s=r.BASE,a=V4(t,e);for(let c=0;c<a.windows;c++){let{nextN:l,offset:u,isZero:d,isNeg:h,isNegF:m,offsetF:g}=gx(o,c,a);o=l,d?s=s.add(K4(m,n[g])):i=i.add(K4(h,n[u]))}return{p:i,f:s}},wNAFUnsafe(t,n,o,i=r.ZERO){let s=V4(t,e);for(let a=0;a<s.windows&&o!==mx;a++){let{nextN:c,offset:l,isZero:u,isNeg:d}=gx(o,a,s);if(o=c,!u){let h=n[l];i=i.add(d?h.negate():h)}}return i},getPrecomputes(t,n,o){let i=H4.get(n);return i||(i=this.precomputeWindow(n,t),t!==1&&H4.set(n,o(i))),i},wNAFCached(t,n,o){let i=q4(t);return this.wNAF(i,this.getPrecomputes(i,t,o),n)},wNAFCachedUnsafe(t,n,o,i){let s=q4(t);return s===1?this.unsafeLadder(t,n,i):this.wNAFUnsafe(s,this.getPrecomputes(s,t,o),n,i)},setWindowSize(t,n){yx(n,e),wx.set(t,n),H4.delete(t)}}}function f1(r,e,t,n){if(fL(t,r),hL(n,e),t.length!==n.length)throw new Error("arrays of points and scalars must have equal length");let o=r.ZERO,i=cx(BigInt(t.length)),s=i>12?i-3:i>4?i-2:i?2:1,a=La(s),c=new Array(Number(a)+1).fill(o),l=Math.floor((e.BITS-1)/s)*s,u=o;for(let d=l;d>=0;d-=s){c.fill(o);for(let m=0;m<n.length;m++){let g=n[m],w=Number(g>>BigInt(d)&a);c[w]=c[w].add(t[m])}let h=o;for(let m=c.length-1,g=o;m>0;m--)g=g.add(c[m]),h=h.add(g);if(u=u.add(h),d!==0)for(let m=0;m<s;m++)u=u.double()}return u}function Ld(r){return U4(r.Fp),vo(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...F4(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Zo=BigInt(0),Hr=BigInt(1),bx=BigInt(2),pL=BigInt(8),mL={zip215:!0};function gL(r){let e=Ld(r);return vo(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function xx(r){let e=gL(r),{Fp:t,n,prehash:o,hash:i,randomBytes:s,nByteLength:a,h:c}=e,l=bx<<BigInt(a*8)-Hr,u=t.create,d=bs(e.n,e.nBitLength),h=e.uvRatio||((O,I)=>{try{return{isValid:!0,value:t.sqrt(O*t.inv(I))}}catch{return{isValid:!1,value:Zo}}}),m=e.adjustScalarBytes||(O=>O),g=e.domain||((O,I,k)=>{if(Yo("phflag",k),I.length||k)throw new Error("Contexts/pre-hash are not supported");return O});function w(O,I,k=!1){let z=k?Hr:Zo;Dr("coordinate "+O,I,z,l)}function y(O){if(!(O instanceof v))throw new Error("ExtendedPoint expected")}let x=Ll((O,I)=>{let{ex:k,ey:z,ez:re}=O,F=O.is0();I==null&&(I=F?pL:t.inv(re));let xe=u(k*I),Pe=u(z*I),he=u(re*I);if(F)return{x:Zo,y:Hr};if(he!==Hr)throw new Error("invZ was invalid");return{x:xe,y:Pe}}),S=Ll(O=>{let{a:I,d:k}=e;if(O.is0())throw new Error("bad point: ZERO");let{ex:z,ey:re,ez:F,et:xe}=O,Pe=u(z*z),he=u(re*re),Ue=u(F*F),rt=u(Ue*Ue),Ze=u(Pe*I),ut=u(Ue*u(Ze+he)),mt=u(rt+u(k*u(Pe*he)));if(ut!==mt)throw new Error("bad point: equation left != right (1)");let Bt=u(z*re),Tt=u(F*xe);if(Bt!==Tt)throw new Error("bad point: equation left != right (2)");return!0});class v{constructor(I,k,z,re){w("x",I),w("y",k),w("z",z,!0),w("t",re),this.ex=I,this.ey=k,this.ez=z,this.et=re,Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(I){if(I instanceof v)throw new Error("extended point not allowed");let{x:k,y:z}=I||{};return w("x",k),w("y",z),new v(k,z,Hr,u(k*z))}static normalizeZ(I){let k=t.invertBatch(I.map(z=>z.ez));return I.map((z,re)=>z.toAffine(k[re])).map(v.fromAffine)}static msm(I,k){return f1(v,d,I,k)}_setWindowSize(I){H.setWindowSize(this,I)}assertValidity(){S(this)}equals(I){y(I);let{ex:k,ey:z,ez:re}=this,{ex:F,ey:xe,ez:Pe}=I,he=u(k*Pe),Ue=u(F*re),rt=u(z*Pe),Ze=u(xe*re);return he===Ue&&rt===Ze}is0(){return this.equals(v.ZERO)}negate(){return new v(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:I}=e,{ex:k,ey:z,ez:re}=this,F=u(k*k),xe=u(z*z),Pe=u(bx*u(re*re)),he=u(I*F),Ue=k+z,rt=u(u(Ue*Ue)-F-xe),Ze=he+xe,ut=Ze-Pe,mt=he-xe,Bt=u(rt*ut),Tt=u(Ze*mt),Ir=u(rt*mt),vn=u(ut*Ze);return new v(Bt,Tt,vn,Ir)}add(I){y(I);let{a:k,d:z}=e,{ex:re,ey:F,ez:xe,et:Pe}=this,{ex:he,ey:Ue,ez:rt,et:Ze}=I,ut=u(re*he),mt=u(F*Ue),Bt=u(Pe*z*Ze),Tt=u(xe*rt),Ir=u((re+F)*(he+Ue)-ut-mt),vn=Tt-Bt,bi=Tt+Bt,bd=u(mt-k*ut),vp=u(Ir*vn),Ep=u(bi*bd),Sp=u(Ir*bd),Ap=u(vn*bi);return new v(vp,Ep,Ap,Sp)}subtract(I){return this.add(I.negate())}wNAF(I){return H.wNAFCached(this,I,v.normalizeZ)}multiply(I){let k=I;Dr("scalar",k,Hr,n);let{p:z,f:re}=this.wNAF(k);return v.normalizeZ([z,re])[0]}multiplyUnsafe(I,k=v.ZERO){let z=I;return Dr("scalar",z,Zo,n),z===Zo?W:this.is0()||z===Hr?this:H.wNAFCachedUnsafe(this,z,v.normalizeZ,k)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return H.unsafeLadder(this,n).is0()}toAffine(I){return x(this,I)}clearCofactor(){let{h:I}=e;return I===Hr?this:this.multiplyUnsafe(I)}static fromHex(I,k=!1){let{d:z,a:re}=e,F=t.BYTES;I=ft("pointHex",I,F),Yo("zip215",k);let xe=I.slice(),Pe=I[F-1];xe[F-1]=Pe&-129;let he=Qo(xe),Ue=k?l:t.ORDER;Dr("pointHex.y",he,Zo,Ue);let rt=u(he*he),Ze=u(rt-Hr),ut=u(z*rt-re),{isValid:mt,value:Bt}=h(Ze,ut);if(!mt)throw new Error("Point.fromHex: invalid y coordinate");let Tt=(Bt&Hr)===Hr,Ir=(Pe&128)!==0;if(!k&&Bt===Zo&&Ir)throw new Error("Point.fromHex: x=0 and x_0=1");return Ir!==Tt&&(Bt=u(-Bt)),v.fromAffine({x:Bt,y:he})}static fromPrivateKey(I){let{scalar:k}=R(I);return N.multiply(k)}toRawBytes(){let{x:I,y:k}=this.toAffine(),z=ys(k,t.BYTES);return z[z.length-1]|=I&Hr?128:0,z}toHex(){return gs(this.toRawBytes())}}v.BASE=new v(e.Gx,e.Gy,Hr,u(e.Gx*e.Gy)),v.ZERO=new v(Zo,Hr,Hr,Zo);let{BASE:N,ZERO:W}=v,H=d1(v,a*8);function $(O){return Je(O,n)}function P(O){return $(Qo(O))}function R(O){let I=t.BYTES;O=ft("private key",O,I);let k=ft("hashed private key",i(O),2*I),z=m(k.slice(0,I)),re=k.slice(I,2*I),F=P(z);return{head:z,prefix:re,scalar:F}}function X(O){let{head:I,prefix:k,scalar:z}=R(O),re=N.multiply(z),F=re.toRawBytes();return{head:I,prefix:k,scalar:z,point:re,pointBytes:F}}function q(O){return X(O).pointBytes}function j(O=new Uint8Array,...I){let k=ws(...I);return P(i(g(k,ft("context",O),!!o)))}function ne(O,I,k={}){O=ft("message",O),o&&(O=o(O));let{prefix:z,scalar:re,pointBytes:F}=X(I),xe=j(k.context,z,O),Pe=N.multiply(xe).toRawBytes(),he=j(k.context,Pe,F,O),Ue=$(xe+he*re);Dr("signature.s",Ue,Zo,n);let rt=ws(Pe,ys(Ue,t.BYTES));return ft("result",rt,t.BYTES*2)}let B=mL;function L(O,I,k,z=B){let{context:re,zip215:F}=z,xe=t.BYTES;O=ft("signature",O,2*xe),I=ft("message",I),k=ft("publicKey",k,xe),F!==void 0&&Yo("zip215",F),o&&(I=o(I));let Pe=Qo(O.slice(xe,2*xe)),he,Ue,rt;try{he=v.fromHex(k,F),Ue=v.fromHex(O.slice(0,xe),F),rt=N.multiplyUnsafe(Pe)}catch{return!1}if(!F&&he.isSmallOrder())return!1;let Ze=j(re,Ue.toRawBytes(),he.toRawBytes(),I);return Ue.add(he.multiplyUnsafe(Ze)).subtract(rt).clearCofactor().equals(v.ZERO)}return N._setWindowSize(8),{CURVE:e,getPublicKey:q,sign:ne,verify:L,ExtendedPoint:v,utils:{getExtendedPublicKey:X,randomPrivateKey:()=>s(t.BYTES),precompute(O=8,I=v.BASE){return I._setWindowSize(O),I.multiply(BigInt(3)),I}}}}var Bl=BigInt(0),W4=BigInt(1);function yL(r){return vo(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function vx(r){let e=yL(r),{P:t}=e,n=S=>Je(S,t),o=e.montgomeryBits,i=Math.ceil(o/8),s=e.nByteLength,a=e.adjustScalarBytes||(S=>S),c=e.powPminus2||(S=>M4(S,t-BigInt(2),t));function l(S,v,N){let W=n(S*(v-N));return v=n(v-W),N=n(N+W),[v,N]}let u=(e.a-BigInt(2))/BigInt(4);function d(S,v){Dr("u",S,Bl,t),Dr("scalar",v,Bl,t);let N=v,W=S,H=W4,$=Bl,P=S,R=W4,X=Bl,q;for(let ne=BigInt(o-1);ne>=Bl;ne--){let B=N>>ne&W4;X^=B,q=l(X,H,P),H=q[0],P=q[1],q=l(X,$,R),$=q[0],R=q[1],X=B;let L=H+$,K=n(L*L),O=H-$,I=n(O*O),k=K-I,z=P+R,re=P-R,F=n(re*L),xe=n(z*O),Pe=F+xe,he=F-xe;P=n(Pe*Pe),R=n(W*n(he*he)),H=n(K*I),$=n(k*(K+n(u*k)))}q=l(X,H,P),H=q[0],P=q[1],q=l(X,$,R),$=q[0],R=q[1];let j=c($);return n(H*j)}function h(S){return ys(n(S),i)}function m(S){let v=ft("u coordinate",S,i);return s===32&&(v[31]&=127),Qo(v)}function g(S){let v=ft("scalar",S),N=v.length;if(N!==i&&N!==s){let W=""+i+" or "+s;throw new Error("invalid scalar, expected "+W+" bytes, got "+N)}return Qo(a(v))}function w(S,v){let N=m(v),W=g(S),H=d(N,W);if(H===Bl)throw new Error("invalid private or public key received");return h(H)}let y=h(e.Gu);function x(S){return w(S,y)}return{scalarMult:w,scalarMultBase:x,getSharedSecret:(S,v)=>w(S,v),getPublicKey:S=>x(S),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:y}}var Bd=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),Ex=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),aX=BigInt(0),wL=BigInt(1),Sx=BigInt(2),bL=BigInt(3),xL=BigInt(5),vL=BigInt(8);function _x(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),i=Bd,a=r*r%i*r%i,c=wt(a,Sx,i)*a%i,l=wt(c,wL,i)*r%i,u=wt(l,xL,i)*l%i,d=wt(u,e,i)*u%i,h=wt(d,t,i)*d%i,m=wt(h,n,i)*h%i,g=wt(m,o,i)*m%i,w=wt(g,o,i)*m%i,y=wt(w,e,i)*u%i;return{pow_p_5_8:wt(y,Sx,i)*r%i,b2:a}}function Ix(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function EL(r,e){let t=Bd,n=Je(e*e*e,t),o=Je(n*n*e,t),i=_x(r*o).pow_p_5_8,s=Je(r*n*i,t),a=Je(e*s*s,t),c=s,l=Je(s*Ex,t),u=a===r,d=a===Je(-r,t),h=a===Je(-r*Ex,t);return u&&(s=c),(d||h)&&(s=l),fx(s,t)&&(s=Je(-s,t)),{isValid:u||d,value:s}}var Ax=bs(Bd,void 0,!0),SL={a:Ax.create(BigInt(-1)),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:Ax,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:vL,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:Si,randomBytes:Na,adjustScalarBytes:Ix,uvRatio:EL},Md=xx(SL);var Ud=vx({P:Bd,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=Bd,{pow_p_5_8:t,b2:n}=_x(r);return Je(wt(t,bL,e)*n,e)},adjustScalarBytes:Ix,randomBytes:Na});var Ma=32,Hn=64,G4=32;function Tx(){let r=Md.utils.randomPrivateKey(),e=Md.getPublicKey(r);return{privateKey:AL(r,e),publicKey:e}}function Cx(r,e){let t=r.subarray(0,G4);return Md.sign(e instanceof Uint8Array?e:e.subarray(),t)}function kx(r,e,t){return Md.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function AL(r,e){let t=new Uint8Array(Hn);for(let n=0;n<G4;n++)t[n]=r[n],t[G4+n]=e[n];return t}var Fd=class{type="Ed25519";raw;constructor(e){this.raw=Ul(e,Ma)}toMultihash(){return Nr.digest(nr(this))}toCID(){return le.createV1(114,this.toMultihash())}toString(){return He.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}verify(e,t){return kx(this.raw,t,e)}},Ml=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=Ul(e,Hn),this.publicKey=new Fd(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}sign(e){return Cx(this.raw,e)}};function z4(r){if(r.length>Hn){r=Ul(r,Hn+Ma);let n=r.subarray(0,Hn),o=r.subarray(Hn,r.length);return new Ml(n,o)}r=Ul(r,Hn);let e=r.subarray(0,Hn),t=r.subarray(Ma);return new Ml(e,t)}function X4(r){return r=Ul(r,Ma),new Fd(r)}async function Rx(){let{privateKey:r,publicKey:e}=Tx();return new Ml(r,e)}function Ul(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new D(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var ht;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1",r.ECDSA="ECDSA"})(ht||(ht={}));var Y4;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1",r[r.ECDSA=3]="ECDSA"})(Y4||(Y4={}));(function(r){r.codec=()=>Et(Y4)})(ht||(ht={}));var Jo;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),ht.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=ht.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Jo||(Jo={}));var $d;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),ht.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=ht.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})($d||($d={}));function qr(r){if(isNaN(r)||r<=0)throw new D("random bytes length must be a Number bigger than 0");return Na(r)}var Kd=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},Vd=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},h1=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var Dx={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new h1("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 en=Dx;var qd={};Pt(qd,{MAX_RSA_KEY_SIZE:()=>Q4,generateRSAKeyPair:()=>s6,jwkToJWKKeyPair:()=>Bx,jwkToPkcs1:()=>CL,jwkToPkix:()=>t6,jwkToRSAPrivateKey:()=>i6,pkcs1MessageToJwk:()=>J4,pkcs1MessageToRSAPrivateKey:()=>p1,pkcs1ToJwk:()=>TL,pkcs1ToRSAPrivateKey:()=>r6,pkixMessageToJwk:()=>e6,pkixMessageToRSAPublicKey:()=>o6,pkixToJwk:()=>kL,pkixToRSAPublicKey:()=>n6});var Fl=class{type="RSA";jwk;_raw;_multihash;constructor(e,t){this.jwk=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=qd.jwkToPkix(this.jwk)),this._raw}toMultihash(){return this._multihash}toCID(){return le.createV1(114,this._multihash)}toString(){return He.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}verify(e,t){return Lx(this.jwk,t,e)}},Hd=class{type="RSA";jwk;_raw;publicKey;constructor(e,t){this.jwk=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=qd.jwkToPkcs1(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}sign(e){return Ox(this.jwk,e)}};var Q4=8192,Z4=18,_L=1062,IL=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function TL(r){let e=Vn(r);return J4(e)}function J4(r){return{n:M(r[1],"base64url"),e:M(r[2],"base64url"),d:M(r[3],"base64url"),p:M(r[4],"base64url"),q:M(r[5],"base64url"),dp:M(r[6],"base64url"),dq:M(r[7],"base64url"),qi:M(r[8],"base64url"),kty:"RSA"}}function CL(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 D("JWK was missing components");return wo([Vr(Uint8Array.from([0])),Vr(V(r.n,"base64url")),Vr(V(r.e,"base64url")),Vr(V(r.d,"base64url")),Vr(V(r.p,"base64url")),Vr(V(r.q,"base64url")),Vr(V(r.dp,"base64url")),Vr(V(r.dq,"base64url")),Vr(V(r.qi,"base64url"))]).subarray()}function kL(r){let e=Vn(r,{offset:0});return e6(e)}function e6(r){let e=Vn(r[1],{offset:0});return{kty:"RSA",n:M(e[0],"base64url"),e:M(e[1],"base64url")}}function t6(r){if(r.n==null||r.e==null)throw new D("JWK was missing components");return wo([IL,Nd(wo([Vr(V(r.n,"base64url")),Vr(V(r.e,"base64url"))]))]).subarray()}function r6(r){let e=Vn(r);return p1(e)}function p1(r){let e=J4(r);return i6(e)}function n6(r,e){if(r.byteLength>=_L)throw new xi("Key size is too large");let t=Vn(r,{offset:0});return o6(t,r,e)}function o6(r,e,t){let n=e6(r);if(t==null){let o=_n(Jo.encode({Type:ht.RSA,Data:e}));t=Rr(Z4,o)}return new Fl(n,t)}function i6(r){if(Ux(r)>Q4)throw new D("Key size is too large");let e=Bx(r),t=_n(Jo.encode({Type:ht.RSA,Data:t6(e.publicKey)})),n=Rr(Z4,t);return new Hd(e.privateKey,new Fl(e.publicKey,n))}async function s6(r){if(r>Q4)throw new D("Key size is too large");let e=await Mx(r),t=_n(Jo.encode({Type:ht.RSA,Data:t6(e.publicKey)})),n=Rr(Z4,t);return new Hd(e.privateKey,new Fl(e.publicKey,n))}function Bx(r){if(r==null)throw new D("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}async function Mx(r){let e=await en.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 PL(e);return{privateKey:t[0],publicKey:t[1]}}async function Ox(r,e){let t=await en.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await en.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function Lx(r,e,t){let n=await en.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return en.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function PL(r){if(r.privateKey==null||r.publicKey==null)throw new D("Private and public key are required");return Promise.all([en.get().subtle.exportKey("jwk",r.privateKey),en.get().subtle.exportKey("jwk",r.publicKey)])}function Ux(r){if(r.kty!=="RSA")throw new D("invalid key type");if(r.n==null)throw new D("invalid key modulus");return V(r.n,"base64url").length*8}var m1=class extends Dl{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,ka(e);let n=xo(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 Nl(this),this.iHash.update(e),this}digestInto(e){Nl(this),Rl(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()}},xs=(r,e,t)=>new m1(r,e).update(t).digest();xs.create=(r,e)=>new m1(r,e);function Fx(r){r.lowS!==void 0&&Yo("lowS",r.lowS),r.prehash!==void 0&&Yo("prehash",r.prehash)}function RL(r){let e=Ld(r);vo(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("invalid 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("invalid endomorphism, expected beta: bigint and splitScalar: function")}return Object.freeze({...e})}var a6=class extends Error{constructor(e=""){super(e)}},Ii={Err:a6,_tlv:{encode:(r,e)=>{let{Err:t}=Ii;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=Dd(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let i=n>127?Dd(o.length/2|128):"";return Dd(r)+i+o+e},decode(r,e){let{Err:t}=Ii,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 u of l)s=s<<8|u;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}=Ii;if(r<Ti)throw new e("integer: negative integers are not allowed");let t=Dd(r);if(Number.parseInt(t[0],16)&8&&(t="00"+t),t.length&1)throw new e("unexpected DER parsing assertion: unpadded hex");return t},decode(r){let{Err:e}=Ii;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 _i(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Ii,o=ft("signature",r),{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:u}=n.decode(2,c);if(u.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}=Ii,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),i=n+o;return e.encode(48,i)}},Ti=BigInt(0),or=BigInt(1),tY=BigInt(2),$x=BigInt(3),rY=BigInt(4);function NL(r){let e=RL(r),{Fp:t}=e,n=bs(e.n,e.nBitLength),o=e.toBytes||((w,y,x)=>{let S=y.toAffine();return ws(Uint8Array.from([4]),t.toBytes(S.x),t.toBytes(S.y))}),i=e.fromBytes||(w=>{let y=w.subarray(1),x=t.fromBytes(y.subarray(0,t.BYTES)),S=t.fromBytes(y.subarray(t.BYTES,2*t.BYTES));return{x,y:S}});function s(w){let{a:y,b:x}=e,S=t.sqr(w),v=t.mul(S,w);return t.add(t.add(v,t.mul(w,y)),x)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function a(w){return l1(w,or,e.n)}function c(w){let{allowedPrivateKeyLengths:y,nByteLength:x,wrapPrivateKey:S,n:v}=e;if(y&&typeof w!="bigint"){if(Da(w)&&(w=gs(w)),typeof w!="string"||!y.includes(w.length))throw new Error("invalid private key");w=w.padStart(x*2,"0")}let N;try{N=typeof w=="bigint"?w:_i(ft("private key",w,x))}catch{throw new Error("invalid private key, expected hex or "+x+" bytes, got "+typeof w)}return S&&(N=Je(N,v)),Dr("private key",N,or,v),N}function l(w){if(!(w instanceof h))throw new Error("ProjectivePoint expected")}let u=Ll((w,y)=>{let{px:x,py:S,pz:v}=w;if(t.eql(v,t.ONE))return{x,y:S};let N=w.is0();y==null&&(y=N?t.ONE:t.inv(v));let W=t.mul(x,y),H=t.mul(S,y),$=t.mul(v,y);if(N)return{x:t.ZERO,y:t.ZERO};if(!t.eql($,t.ONE))throw new Error("invZ was invalid");return{x:W,y:H}}),d=Ll(w=>{if(w.is0()){if(e.allowInfinityPoint&&!t.is0(w.py))return;throw new Error("bad point: ZERO")}let{x:y,y:x}=w.toAffine();if(!t.isValid(y)||!t.isValid(x))throw new Error("bad point: x or y not FE");let S=t.sqr(x),v=s(y);if(!t.eql(S,v))throw new Error("bad point: equation left != right");if(!w.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class h{constructor(y,x,S){if(y==null||!t.isValid(y))throw new Error("x required");if(x==null||!t.isValid(x))throw new Error("y required");if(S==null||!t.isValid(S))throw new Error("z required");this.px=y,this.py=x,this.pz=S,Object.freeze(this)}static fromAffine(y){let{x,y:S}=y||{};if(!y||!t.isValid(x)||!t.isValid(S))throw new Error("invalid affine point");if(y instanceof h)throw new Error("projective point not allowed");let v=N=>t.eql(N,t.ZERO);return v(x)&&v(S)?h.ZERO:new h(x,S,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(y){let x=t.invertBatch(y.map(S=>S.pz));return y.map((S,v)=>S.toAffine(x[v])).map(h.fromAffine)}static fromHex(y){let x=h.fromAffine(i(ft("pointHex",y)));return x.assertValidity(),x}static fromPrivateKey(y){return h.BASE.multiply(c(y))}static msm(y,x){return f1(h,n,y,x)}_setWindowSize(y){g.setWindowSize(this,y)}assertValidity(){d(this)}hasEvenY(){let{y}=this.toAffine();if(t.isOdd)return!t.isOdd(y);throw new Error("Field doesn't support isOdd")}equals(y){l(y);let{px:x,py:S,pz:v}=this,{px:N,py:W,pz:H}=y,$=t.eql(t.mul(x,H),t.mul(N,v)),P=t.eql(t.mul(S,H),t.mul(W,v));return $&&P}negate(){return new h(this.px,t.neg(this.py),this.pz)}double(){let{a:y,b:x}=e,S=t.mul(x,$x),{px:v,py:N,pz:W}=this,H=t.ZERO,$=t.ZERO,P=t.ZERO,R=t.mul(v,v),X=t.mul(N,N),q=t.mul(W,W),j=t.mul(v,N);return j=t.add(j,j),P=t.mul(v,W),P=t.add(P,P),H=t.mul(y,P),$=t.mul(S,q),$=t.add(H,$),H=t.sub(X,$),$=t.add(X,$),$=t.mul(H,$),H=t.mul(j,H),P=t.mul(S,P),q=t.mul(y,q),j=t.sub(R,q),j=t.mul(y,j),j=t.add(j,P),P=t.add(R,R),R=t.add(P,R),R=t.add(R,q),R=t.mul(R,j),$=t.add($,R),q=t.mul(N,W),q=t.add(q,q),R=t.mul(q,j),H=t.sub(H,R),P=t.mul(q,X),P=t.add(P,P),P=t.add(P,P),new h(H,$,P)}add(y){l(y);let{px:x,py:S,pz:v}=this,{px:N,py:W,pz:H}=y,$=t.ZERO,P=t.ZERO,R=t.ZERO,X=e.a,q=t.mul(e.b,$x),j=t.mul(x,N),ne=t.mul(S,W),B=t.mul(v,H),L=t.add(x,S),K=t.add(N,W);L=t.mul(L,K),K=t.add(j,ne),L=t.sub(L,K),K=t.add(x,v);let O=t.add(N,H);return K=t.mul(K,O),O=t.add(j,B),K=t.sub(K,O),O=t.add(S,v),$=t.add(W,H),O=t.mul(O,$),$=t.add(ne,B),O=t.sub(O,$),R=t.mul(X,K),$=t.mul(q,B),R=t.add($,R),$=t.sub(ne,R),R=t.add(ne,R),P=t.mul($,R),ne=t.add(j,j),ne=t.add(ne,j),B=t.mul(X,B),K=t.mul(q,K),ne=t.add(ne,B),B=t.sub(j,B),B=t.mul(X,B),K=t.add(K,B),j=t.mul(ne,K),P=t.add(P,j),j=t.mul(O,K),$=t.mul(L,$),$=t.sub($,j),j=t.mul(L,ne),R=t.mul(O,R),R=t.add(R,j),new h($,P,R)}subtract(y){return this.add(y.negate())}is0(){return this.equals(h.ZERO)}wNAF(y){return g.wNAFCached(this,y,h.normalizeZ)}multiplyUnsafe(y){let{endo:x,n:S}=e;Dr("scalar",y,Ti,S);let v=h.ZERO;if(y===Ti)return v;if(this.is0()||y===or)return this;if(!x||g.hasPrecomputes(this))return g.wNAFCachedUnsafe(this,y,h.normalizeZ);let{k1neg:N,k1:W,k2neg:H,k2:$}=x.splitScalar(y),P=v,R=v,X=this;for(;W>Ti||$>Ti;)W&or&&(P=P.add(X)),$&or&&(R=R.add(X)),X=X.double(),W>>=or,$>>=or;return N&&(P=P.negate()),H&&(R=R.negate()),R=new h(t.mul(R.px,x.beta),R.py,R.pz),P.add(R)}multiply(y){let{endo:x,n:S}=e;Dr("scalar",y,or,S);let v,N;if(x){let{k1neg:W,k1:H,k2neg:$,k2:P}=x.splitScalar(y),{p:R,f:X}=this.wNAF(H),{p:q,f:j}=this.wNAF(P);R=g.constTimeNegate(W,R),q=g.constTimeNegate($,q),q=new h(t.mul(q.px,x.beta),q.py,q.pz),v=R.add(q),N=X.add(j)}else{let{p:W,f:H}=this.wNAF(y);v=W,N=H}return h.normalizeZ([v,N])[0]}multiplyAndAddUnsafe(y,x,S){let v=h.BASE,N=(H,$)=>$===Ti||$===or||!H.equals(v)?H.multiplyUnsafe($):H.multiply($),W=N(this,x).add(N(y,S));return W.is0()?void 0:W}toAffine(y){return u(this,y)}isTorsionFree(){let{h:y,isTorsionFree:x}=e;if(y===or)return!0;if(x)return x(h,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:y,clearCofactor:x}=e;return y===or?this:x?x(h,this):this.multiplyUnsafe(e.h)}toRawBytes(y=!0){return Yo("isCompressed",y),this.assertValidity(),o(h,this,y)}toHex(y=!0){return Yo("isCompressed",y),gs(this.toRawBytes(y))}}h.BASE=new h(e.Gx,e.Gy,t.ONE),h.ZERO=new h(t.ZERO,t.ONE,t.ZERO);let m=e.nBitLength,g=d1(h,e.endo?Math.ceil(m/2):m);return{CURVE:e,ProjectivePoint:h,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:a}}function DL(r){let e=Ld(r);return vo(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function Kx(r){let e=DL(r),{Fp:t,n}=e,o=t.BYTES+1,i=2*t.BYTES+1;function s(B){return Je(B,n)}function a(B){return u1(B,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:u,isWithinCurveOrder:d}=NL({...e,toBytes(B,L,K){let O=L.toAffine(),I=t.toBytes(O.x),k=ws;return Yo("isCompressed",K),K?k(Uint8Array.from([L.hasEvenY()?2:3]),I):k(Uint8Array.from([4]),I,t.toBytes(O.y))},fromBytes(B){let L=B.length,K=B[0],O=B.subarray(1);if(L===o&&(K===2||K===3)){let I=_i(O);if(!l1(I,or,t.ORDER))throw new Error("Point is not on curve");let k=u(I),z;try{z=t.sqrt(k)}catch(xe){let Pe=xe instanceof Error?": "+xe.message:"";throw new Error("Point is not on curve"+Pe)}let re=(z&or)===or;return(K&1)===1!==re&&(z=t.neg(z)),{x:I,y:z}}else if(L===i&&K===4){let I=t.fromBytes(O.subarray(0,t.BYTES)),k=t.fromBytes(O.subarray(t.BYTES,2*t.BYTES));return{x:I,y:k}}else{let I=o,k=i;throw new Error("invalid Point, expected length of "+I+", or uncompressed "+k+", got "+L)}}}),h=B=>gs(Oa(B,e.nByteLength));function m(B){let L=n>>or;return B>L}function g(B){return m(B)?s(-B):B}let w=(B,L,K)=>_i(B.slice(L,K));class y{constructor(L,K,O){Dr("r",L,or,n),Dr("s",K,or,n),this.r=L,this.s=K,O!=null&&(this.recovery=O),Object.freeze(this)}static fromCompact(L){let K=e.nByteLength;return L=ft("compactSignature",L,K*2),new y(w(L,0,K),w(L,K,2*K))}static fromDER(L){let{r:K,s:O}=Ii.toSig(ft("DER",L));return new y(K,O)}assertValidity(){}addRecoveryBit(L){return new y(this.r,this.s,L)}recoverPublicKey(L){let{r:K,s:O,recovery:I}=this,k=H(ft("msgHash",L));if(I==null||![0,1,2,3].includes(I))throw new Error("recovery id invalid");let z=I===2||I===3?K+e.n:K;if(z>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let re=(I&1)===0?"02":"03",F=c.fromHex(re+h(z)),xe=a(z),Pe=s(-k*xe),he=s(O*xe),Ue=c.BASE.multiplyAndAddUnsafe(F,Pe,he);if(!Ue)throw new Error("point at infinify");return Ue.assertValidity(),Ue}hasHighS(){return m(this.s)}normalizeS(){return this.hasHighS()?new y(this.r,s(-this.s),this.recovery):this}toDERRawBytes(){return Od(this.toDERHex())}toDERHex(){return Ii.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return Od(this.toCompactHex())}toCompactHex(){return h(this.r)+h(this.s)}}let x={isValidPrivateKey(B){try{return l(B),!0}catch{return!1}},normPrivateKeyToScalar:l,randomPrivateKey:()=>{let B=$4(e.n);return px(e.randomBytes(B),e.n)},precompute(B=8,L=c.BASE){return L._setWindowSize(B),L.multiply(BigInt(3)),L}};function S(B,L=!0){return c.fromPrivateKey(B).toRawBytes(L)}function v(B){let L=Da(B),K=typeof B=="string",O=(L||K)&&B.length;return L?O===o||O===i:K?O===2*o||O===2*i:B instanceof c}function N(B,L,K=!0){if(v(B))throw new Error("first arg must be private key");if(!v(L))throw new Error("second arg must be public key");return c.fromHex(L).multiply(l(B)).toRawBytes(K)}let W=e.bits2int||function(B){if(B.length>8192)throw new Error("input is too large");let L=_i(B),K=B.length*8-e.nBitLength;return K>0?L>>BigInt(K):L},H=e.bits2int_modN||function(B){return s(W(B))},$=La(e.nBitLength);function P(B){return Dr("num < 2^"+e.nBitLength,B,Ti,$),Oa(B,e.nByteLength)}function R(B,L,K=X){if(["recovered","canonical"].some(Ze=>Ze in K))throw new Error("sign() legacy options not supported");let{hash:O,randomBytes:I}=e,{lowS:k,prehash:z,extraEntropy:re}=K;k==null&&(k=!0),B=ft("msgHash",B),Fx(K),z&&(B=ft("prehashed msgHash",O(B)));let F=H(B),xe=l(L),Pe=[P(xe),P(F)];if(re!=null&&re!==!1){let Ze=re===!0?I(t.BYTES):re;Pe.push(ft("extraEntropy",Ze))}let he=ws(...Pe),Ue=F;function rt(Ze){let ut=W(Ze);if(!d(ut))return;let mt=a(ut),Bt=c.BASE.multiply(ut).toAffine(),Tt=s(Bt.x);if(Tt===Ti)return;let Ir=s(mt*s(Ue+Tt*xe));if(Ir===Ti)return;let vn=(Bt.x===Tt?0:2)|Number(Bt.y&or),bi=Ir;return k&&m(Ir)&&(bi=g(Ir),vn^=1),new y(Tt,bi,vn)}return{seed:he,k2sig:rt}}let X={lowS:e.lowS,prehash:!1},q={lowS:e.lowS,prehash:!1};function j(B,L,K=X){let{seed:O,k2sig:I}=R(B,L,K),k=e;return lx(k.hash.outputLen,k.nByteLength,k.hmac)(O,I)}c.BASE._setWindowSize(8);function ne(B,L,K,O=q){let I=B;L=ft("msgHash",L),K=ft("publicKey",K);let{lowS:k,prehash:z,format:re}=O;if(Fx(O),"strict"in O)throw new Error("options.strict was renamed to lowS");if(re!==void 0&&re!=="compact"&&re!=="der")throw new Error("format must be compact or der");let F=typeof I=="string"||Da(I),xe=!F&&!re&&typeof I=="object"&&I!==null&&typeof I.r=="bigint"&&typeof I.s=="bigint";if(!F&&!xe)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");let Pe,he;try{if(xe&&(Pe=new y(I.r,I.s)),F){try{re!=="compact"&&(Pe=y.fromDER(I))}catch(vn){if(!(vn instanceof Ii.Err))throw vn}!Pe&&re!=="der"&&(Pe=y.fromCompact(I))}he=c.fromHex(K)}catch{return!1}if(!Pe||k&&Pe.hasHighS())return!1;z&&(L=e.hash(L));let{r:Ue,s:rt}=Pe,Ze=H(L),ut=a(rt),mt=s(Ze*ut),Bt=s(Ue*ut),Tt=c.BASE.multiplyAndAddUnsafe(he,mt,Bt)?.toAffine();return Tt?s(Tt.x)===Ue:!1}return{CURVE:e,getPublicKey:S,getSharedSecret:N,sign:j,verify:ne,ProjectivePoint:c,Signature:y,utils:x}}function OL(r){return{hash:r,hmac:(e,...t)=>xs(r,e,T4(...t)),randomBytes:Na}}function Vx(r,e){let t=n=>Kx({...r,...OL(n)});return{...t(e),create:t}}var jx=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),Hx=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),LL=BigInt(1),c6=BigInt(2),qx=(r,e)=>(r+e/c6)/e;function BL(r){let e=jx,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,u=l*l*r%e,d=wt(u,t,e)*u%e,h=wt(d,t,e)*u%e,m=wt(h,c6,e)*l%e,g=wt(m,o,e)*m%e,w=wt(g,i,e)*g%e,y=wt(w,a,e)*w%e,x=wt(y,c,e)*y%e,S=wt(x,a,e)*w%e,v=wt(S,t,e)*u%e,N=wt(v,s,e)*g%e,W=wt(N,n,e)*l%e,H=wt(W,c6,e);if(!l6.eql(l6.sqr(H),r))throw new Error("Cannot find square root");return H}var l6=bs(jx,void 0,void 0,{sqrt:BL}),qn=Vx({a:BigInt(0),b:BigInt(7),Fp:l6,n:Hx,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=Hx,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-LL*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=t,s=BigInt("0x100000000000000000000000000000000"),a=qx(i*r,e),c=qx(-n*r,e),l=Je(r-a*t-c*o,e),u=Je(-a*n-c*i,e),d=l>s,h=u>s;if(d&&(l=e-l),h&&(u=e-u),l>s||u>s)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:d,k1:l,k2neg:h,k2:u}}}},_n),dY=BigInt(0);var fY=qn.ProjectivePoint;function u6(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Wx=32;function Gx(r,e){let t=yt.digest(e instanceof Uint8Array?e:e.subarray());if(u6(t))return t.then(({digest:n})=>qn.sign(n,r).toDERRawBytes()).catch(n=>{throw new Kd(String(n))});try{return qn.sign(t.digest,r).toDERRawBytes()}catch(n){throw new Kd(String(n))}}function zx(r,e,t){let n=yt.digest(t instanceof Uint8Array?t:t.subarray());if(u6(n))return n.then(({digest:o})=>qn.verify(e,o,r)).catch(o=>{throw new Vd(String(o))});try{return qn.verify(e,n.digest,r)}catch(o){throw new Vd(String(o))}}var jd=class{type="secp256k1";raw;_key;constructor(e){this._key=Qx(e),this.raw=Xx(this._key)}toMultihash(){return Nr.digest(nr(this))}toCID(){return le.createV1(114,this.toMultihash())}toString(){return He.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}verify(e,t){return zx(this._key,t,e)}},Wd=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=Yx(e),this.publicKey=new jd(t??Zx(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}sign(e){return Gx(this.raw,e)}};function d6(r){return new Wd(r)}function f6(r){return new jd(r)}async function Jx(){let r=ML();return new Wd(r)}function Xx(r){return qn.ProjectivePoint.fromHex(r).toRawBytes(!0)}function Yx(r){try{return qn.getPublicKey(r,!0),r}catch(e){throw new vd(String(e))}}function Qx(r){try{return qn.ProjectivePoint.fromHex(r),r}catch(e){throw new xi(String(e))}}function Zx(r){try{return qn.getPublicKey(r,!0)}catch(e){throw new vd(String(e))}}function ML(){return qn.utils.randomPrivateKey()}async function $l(r,e){if(r==="Ed25519")return Rx();if(r==="secp256k1")return Jx();if(r==="RSA")return s6(UL(e));if(r==="ECDSA")return Zb(FL(e));throw new ho}function $t(r,e){let{Type:t,Data:n}=Jo.decode(r),o=n??new Uint8Array;switch(t){case ht.RSA:return n6(o,e);case ht.Ed25519:return X4(o);case ht.secp256k1:return f6(o);case ht.ECDSA:return I4(o);default:throw new ho}}function g1(r){let{Type:e,Data:t}=Jo.decode(r.digest),n=t??new Uint8Array;switch(e){case ht.Ed25519:return X4(n);case ht.secp256k1:return f6(n);case ht.ECDSA:return I4(n);default:throw new ho}}function nr(r){return Jo.encode({Type:ht[r.type],Data:r.raw})}function ev(r){let e=$d.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case ht.RSA:return r6(t);case ht.Ed25519:return z4(t);case ht.secp256k1:return d6(t);case ht.ECDSA:return Gb(t);default:throw new ho}}function tv(r){if(r.byteLength===Hn)return z4(r);if(r.byteLength===Wx)return d6(r);let e=Vn(r),t=e[2]?.[0];if(t===Ub||t===Fb||t===$b)return _4(e);if(e.length>8)return p1(e);throw new D("Could not extract private key from raw bytes")}function Ua(r){return $d.encode({Type:ht[r.type],Data:r.raw})}function UL(r){return r==null?2048:parseInt(r,10)}function FL(r){if(r==="P-256"||r==null)return"P-256";if(r==="P-384")return"P-384";if(r==="P-521")return"P-521";throw new D("Unsupported curve, should be P-256, P-384 or P-521")}async function y1(r){if(r.type==="RSA")return{privateKey:await crypto.subtle.importKey("jwk",r.jwk,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),publicKey:await crypto.subtle.importKey("jwk",r.publicKey.jwk,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])};if(r.type==="ECDSA")return{privateKey:await crypto.subtle.importKey("jwk",r.jwk,{name:"ECDSA",namedCurve:r.jwk.crv??"P-256"},!0,["sign"]),publicKey:await crypto.subtle.importKey("jwk",r.publicKey.jwk,{name:"ECDSA",namedCurve:r.publicKey.jwk.crv??"P-256"},!0,["verify"])};throw new D("Only RSA and ECDSA keys are supported")}var rv=Symbol.for("nodejs.util.inspect.custom"),$L=114,Gd=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()})`}[Ip]=!0;toString(){return this.string==null&&(this.string=He.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return le.createV1($L,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return ge(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return ge(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[rv](){return`PeerId(${this.toString()})`}},zd=class extends Gd{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},Xd=class extends Gd{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},Yd=class extends Gd{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},KL=2336,Qd=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Nr.digest(V(this.url))}[rv](){return`PeerId(${this.url})`}[Ip]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return le.createV1(KL,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=M(e)),e.toString()===this.toString())}};var VL=114,nv=2336;function bt(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=Ye(He.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Eo(le.parse(r));if(e==null)throw new D('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=Ye(e.decode(r))}return qt(t)}function ei(r){if(r.type==="Ed25519")return new Xd({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new Yd({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new zd({multihash:r.toCID().multihash,publicKey:r});throw new ho}function ov(r){return ei(r.publicKey)}function qt(r){if(qL(r))return new zd({multihash:r});if(HL(r))try{let e=g1(r);if(e.type==="Ed25519")return new Xd({multihash:r,publicKey:e});if(e.type==="secp256k1")return new Yd({multihash:r,publicKey:e})}catch{let t=M(r.digest);return new Qd(new URL(t))}throw new is("Supplied PeerID Multihash is invalid")}function Eo(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==VL&&r.code!==nv)throw new Np("Supplied PeerID CID is invalid");if(r.code===nv){let e=M(r.multihash.digest);return new Qd(new URL(e))}return qt(r.multihash)}function HL(r){return r.code===Nr.code}function qL(r){return r.code===yt.code}function Fa(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 w1(r){let e=Ye(He.decode(`z${r}`));return qt(e)}var ir=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 Fa(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 Fa(this.map.values(),e=>e.key)}values(){return Fa(this.map.values(),e=>e.value)}get size(){return this.map.size}};var jr=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 Fa(this.set.entries(),e=>{let t=w1(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=w1(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return Fa(this.set.values(),e=>w1(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 h6(){return new jr}function iv(r,e,t,n){ka(r);let o=rx({dkLen:32,asyncTick:10},n),{c:i,dkLen:s,asyncTick:a}=o;if(us(i),us(s),us(a),i<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=xo(e),l=xo(t),u=new Uint8Array(s),d=xs.create(r,c),h=d._cloneInto().update(l);return{c:i,dkLen:s,asyncTick:a,DK:u,PRF:d,PRFSalt:h}}function sv(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function av(r,e,t,n){let{c:o,dkLen:i,DK:s,PRF:a,PRFSalt:c}=iv(r,e,t,n),l,u=new Uint8Array(4),d=Ra(u),h=new Uint8Array(a.outputLen);for(let m=1,g=0;g<i;m++,g+=a.outputLen){let w=s.subarray(g,g+a.outputLen);d.setInt32(0,m,!1),(l=c._cloneInto(l)).update(u).digestInto(h),w.set(h.subarray(0,w.length));for(let y=1;y<o;y++){a._cloneInto(l).update(h).digestInto(h);for(let x=0;x<w.length;x++)w[x]^=h[x]}}return sv(a,c,s,l,h)}async function b1(r,e,t,n){let{c:o,dkLen:i,asyncTick:s,DK:a,PRF:c,PRFSalt:l}=iv(r,e,t,n),u,d=new Uint8Array(4),h=Ra(d),m=new Uint8Array(c.outputLen);for(let g=1,w=0;w<i;g++,w+=c.outputLen){let y=a.subarray(w,w+c.outputLen);h.setInt32(0,g,!1),(u=l._cloneInto(u)).update(d).digestInto(m),y.set(m.subarray(0,y.length)),await ex(o-1,s,()=>{c._cloneInto(u).update(m).digestInto(m);for(let x=0;x<y.length;x++)y[x]^=m[x]})}return sv(c,l,a,u,m)}var Zd=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),vs=new Uint32Array(80),x1=class extends ds{constructor(){super(64,20,8,!1),this.A=Zd[0]|0,this.B=Zd[1]|0,this.C=Zd[2]|0,this.D=Zd[3]|0,this.E=Zd[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)vs[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)vs[c]=i1(vs[c-3]^vs[c-8]^vs[c-14]^vs[c-16],1);let{A:n,B:o,C:i,D:s,E:a}=this;for(let c=0;c<80;c++){let l,u;c<20?(l=s1(o,i,s),u=1518500249):c<40?(l=o^i^s,u=1859775393):c<60?(l=a1(o,i,s),u=2400959708):(l=o^i^s,u=3395469782);let d=i1(n,5)+l+a+u+vs[c]|0;a=s,s=i,i=i1(o,30),o=n,n=d}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(){vs.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},p6=Ol(()=>new x1),SQ=2**32;var cv={sha1:p6,"sha2-256":_n,"sha2-512":Si};function Jd(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(cv).join(" / ");throw new D(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let i=cv[o],s=av(i,r,e,{c:t,dkLen:n});return Ht.encode(s).substring(1)}var m6={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},lv={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},uv=new globalThis.TextEncoder;function jL(r,e){let t=m6[e],n=lv[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function WL(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=m6[e],o=lv[e],i=r;for(;i.length>0;){let s=uv.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 g6(r,{size:e=32,utf8Buffer:t}={}){if(!m6[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 WL(r,e,t);r=uv.encode(r)}return jL(r,e)}var ef={hash:r=>Number(g6(r,{size:32})),hashV:(r,e)=>GL(ef.hash(r,e))};function GL(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),V(e,"base16")}var y6=64,So=class{fp;h;seed;constructor(e,t,n,o=2){if(o>y6)throw new TypeError("Invalid Fingerprint Size");let i=t.hashV(e,n),s=ke(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?ge(this.fp,e.fp):!1}};function $a(r,e){return Math.floor(Math.random()*(e-r))+r}var Ka=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof So))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof So))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 So))throw new TypeError("Invalid Fingerprint");let t=$a(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof So))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var zL=500,tf=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??ef,this.seed=e.seed??$a(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=V(e));let t=new So(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 Ka(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new Ka(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let i=[n,o],s=i[$a(0,i.length-1)];this.buckets[s]==null&&(this.buckets[s]=new Ka(this.bucketSize));for(let a=0;a<zL;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 Ka(this.bucketSize)),this.buckets[s].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=V(e));let t=new So(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=V(e));let t=new So(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}},XL={1:.5,2:.84,4:.95,8:.98};function YL(r=.001){return r>.002?2:r>1e-5?4:8}function dv(r,e=.001){let t=YL(e),n=XL[t],o=Math.round(r/n),i=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),y6);return{filterSize:o,bucketSize:t,fingerprintSize:i}}var v1=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??ef,this.seed=e.seed??$a(0,Math.pow(2,10)),this.filterSeries=[new tf({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=V(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 tf({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=V(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=V(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 tn(r,e=.001,t){return new v1({...dv(r,e),...t??{}})}var E1=class{filter;constructor(e,t){this.filter=tn(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 w6(r,e=.001){return new E1(r,e)}var b6=class extends ir{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 rf(r){let{name:e,metrics:t}=r,n;return t!=null?n=new b6({name:e,metrics:t}):n=new ir,n}var Ci=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=Ht.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=Ht.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=Ht.encode(e.multihash.bytes);this.blocks.set(n,t)}};function QL(r){let e=new Uint8Array(r.reduce((n,o)=>n+Ce(o),0)),t=0;for(let n of r)e=Fe(n,e,t),t+=Ce(n);return e}var fv=QL;function x6(r){return fv([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var S1=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 Ci,n=new Set;for(let[o,i]of this.wants.entries())try{let s=await this.blockstore.get(i.cid,e);i.wantType===Ft.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:x6(i.cid)})):(this.log("sending have for %c",i.cid),t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Kn.HaveBlock})):(this.log("sending block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:x6(i.cid)}))}catch(s){if(s.name!=="NotFoundError")throw s;if(this.log("do not have block for %c",i.cid),!i.sendDontHave||i.sentDoNotHave===!0)continue;i.sentDoNotHave=!0,t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Kn.DoNotHaveBlock})}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 A1=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=rf({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 S1({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=le.decode(o.cid),s=M(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===Ft.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??Ft.WantBlock,sendDontHave:o.sendDontHave??!1}))}}this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=M(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 ZL(r,e){try{if(typeof r=="string"&&r.length>0)return JL(r);if(typeof r=="number"&&isFinite(r))return e?.long?tB(r):eB(r);throw new Error("Value is not a string or number.")}catch(t){let n=rB(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function JL(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 I1=ZL;function eB(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 tB(r){let e=Math.abs(r);return e>=864e5?_1(r,e,864e5,"day"):e>=36e5?_1(r,e,36e5,"hour"):e>=6e4?_1(r,e,6e4,"minute"):e>=1e3?_1(r,e,1e3,"second"):`${r} ms`}function _1(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function rB(r){return typeof r=="object"&&r!==null&&"message"in r}function v6(r){t.debug=t,t.default=t,t.coerce=c,t.disable=i,t.enable=o,t.enabled=s,t.humanize=I1,t.destroy=l,Object.keys(r).forEach(u=>{t[u]=r[u]}),t.names=[],t.skips=[],t.formatters={};function e(u){let d=0;for(let h=0;h<u.length;h++)d=(d<<5)-d+u.charCodeAt(h),d|=0;return t.colors[Math.abs(d)%t.colors.length]}t.selectColor=e;function t(u){let d,h=null,m,g;function w(...y){if(!w.enabled)return;let x=w,S=Number(new Date),v=S-(d||S);x.diff=v,x.prev=d,x.curr=S,d=S,y[0]=t.coerce(y[0]),typeof y[0]!="string"&&y.unshift("%O");let N=0;y[0]=y[0].replace(/%([a-zA-Z%])/g,(H,$)=>{if(H==="%%")return"%";N++;let P=t.formatters[$];if(typeof P=="function"){let R=y[N];H=P.call(x,R),y.splice(N,1),N--}return H}),t.formatArgs.call(x,y),(x.log||t.log).apply(x,y)}return w.namespace=u,w.useColors=t.useColors(),w.color=t.selectColor(u),w.extend=n,w.destroy=t.destroy,Object.defineProperty(w,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(m!==t.namespaces&&(m=t.namespaces,g=t.enabled(u)),g),set:y=>{h=y}}),typeof t.init=="function"&&t.init(w),w}function n(u,d){let h=t(this.namespace+(typeof d>"u"?":":d)+u);return h.log=this.log,h}function o(u){t.save(u),t.namespaces=u,t.names=[],t.skips=[];let d,h=(typeof u=="string"?u:"").split(/[\s,]+/),m=h.length;for(d=0;d<m;d++)h[d]&&(u=h[d].replace(/\*/g,".*?"),u[0]==="-"?t.skips.push(new RegExp("^"+u.substr(1)+"$")):t.names.push(new RegExp("^"+u+"$")))}function i(){let u=[...t.names.map(a),...t.skips.map(a).map(d=>"-"+d)].join(",");return t.enable(""),u}function s(u){if(u[u.length-1]==="*")return!0;let d,h;for(d=0,h=t.skips.length;d<h;d++)if(t.skips[d].test(u))return!1;for(d=0,h=t.names.length;d<h;d++)if(t.names[d].test(u))return!0;return!1}function a(u){return u.toString().substring(2,u.toString().length-2).replace(/\.\*\?$/,"*")}function c(u){return u instanceof Error?u.stack??u.message:u}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=lB(),nB=["#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 oB(){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 iB(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+I1(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 sB=console.debug??console.log??(()=>{});function aB(r){try{r?T1?.setItem("debug",r):T1?.removeItem("debug")}catch{}}function cB(){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 lB(){try{return localStorage}catch{}}function uB(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var hv=v6({formatArgs:iB,save:aB,load:cB,useColors:oB,setupFormatters:uB,colors:nB,storage:T1,log:sB});var rn=hv;rn.formatters.b=r=>r==null?"undefined":He.baseEncode(r);rn.formatters.t=r=>r==null?"undefined":Xt.baseEncode(r);rn.formatters.m=r=>r==null?"undefined":Ht.baseEncode(r);rn.formatters.p=r=>r==null?"undefined":r.toString();rn.formatters.c=r=>r==null?"undefined":r.toString();rn.formatters.k=r=>r==null?"undefined":r.toString();rn.formatters.a=r=>r==null?"undefined":r.toString();rn.formatters.e=r=>r==null?"undefined":pv(r.stack)??pv(r.message)??r.toString();function dB(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 Es(){return{forComponent(r){return In(r)}}}function In(r){let e=dB(`${r}:trace`);return rn.enabled(`${r}:trace`)&&rn.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=rn(`${r}:trace`)),Object.assign(rn(r),{error:rn(`${r}:error`),trace:e})}function pv(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var S6=Vt(gv(),1);var of=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},A6=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},yv=r=>globalThis.DOMException===void 0?new A6(r):new DOMException(r),wv=r=>{let e=r.reason===void 0?yv("This operation was aborted."):r.reason;return e instanceof Error?e:yv(e)};function Ao(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((u,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:m}=e;m.aborted&&d(wv(m)),a=()=>{d(wv(m))},m.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(u,d);return}let h=new of;s=i.setTimeout.call(void 0,()=>{if(n){try{u(n())}catch(m){d(m)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?u():o instanceof Error?d(o):(h.message=o??`Promise timed out after ${t} milliseconds`,d(h))},t),(async()=>{try{u(await r)}catch(m){d(m)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}function _6(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 sf=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,id:t.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=_6(this.#e,n,(i,s)=>s.priority-i.priority);this.#e.splice(o,0,n)}setPriority(e,t){let n=this.#e.findIndex(i=>i.id===e);if(n===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[o]=this.#e.splice(n,1);this.enqueue(o.run,{priority:t,id:e})}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 ti=class extends S6.default{#e;#t;#r=0;#o;#a;#l=0;#i;#u;#n;#m;#s=0;#d;#c;#g;#b=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:sf,...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#x(){return this.#t||this.#r<this.#o}get#v(){return this.#s<this.#d}#E(){this.#s--,this.#f(),this.emit("next")}#S(){this.#w(),this.#y(),this.#u=void 0}get#A(){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.#S()},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.#A;if(this.#x&&this.#v){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#_(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}setPriority(e,t){this.#n.setPriority(e,t)}async add(e,t={}){return t.id??=(this.#b++).toString(),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=Ao(Promise.resolve(i),{milliseconds:t.timeout})),t.signal&&(i=Promise.race([i,this.#_(t.signal)]));let s=await i;n(s),this.emit("completed",s)}catch(i){if(i instanceof of&&!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 k1(r){let e=[Tn.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var I6=60;function P1(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:Tn[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:Tn[e.type],TTL:e.TTL??e.ttl??I6,data:e.data instanceof Uint8Array?M(e.data):e.data}))}}var pB=4;function T6(r,e={}){let t=new ti({concurrency:e.queryConcurrency??pB});return async(n,o={})=>{let i=new URLSearchParams;i.set("name",n),k1(o.types).forEach(a=>{i.append("type",Tn[a])}),o.onProgress?.(new ae("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=P1(await a.json());return o.onProgress?.(new ae("dns:response",{detail:c})),c},{signal:o.signal});if(s==null)throw new Error("No DNS response received");return s}}function bv(){return[T6("https://cloudflare-dns.com/dns-query"),T6("https://dns.google/resolve")]}var Ev=Vt(vv(),1);var C6=class{lru;constructor(e){this.lru=(0,Ev.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 P1({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:Tn[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??I6)*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 Sv(r){return new C6(r)}var mB=1e3,R1=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=Sv(e.cacheSize??mB),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["."]=bv())}async query(e,t={}){let n=k1(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new ae("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 u of l.Answer)this.cache.add(e,u);return l}catch(l){a.push(l),t.onProgress?.(new ae("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var Tn;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(Tn||(Tn={}));function N1(r={}){return new R1(r)}var gB=["string","number","bigint","symbol"],yB=["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 Av(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(gB.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(wB(r))return"Buffer";let t=bB(r);return t||"Object"}function wB(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function bB(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(yB.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 G=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 Kl=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",xB=new TextDecoder,vB=new TextEncoder;function D1(r){return Kl&&globalThis.Buffer.isBuffer(r)}function af(r){return r instanceof Uint8Array?D1(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var Cv=Kl?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):Iv(r,e,t):(r,e,t)=>t-e>64?xB.decode(r.subarray(e,t)):Iv(r,e,t),O1=Kl?r=>r.length>64?globalThis.Buffer.from(r):_v(r):r=>r.length>64?vB.encode(r):_v(r),ri=r=>Uint8Array.from(r),Vl=Kl?(r,e,t)=>D1(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),kv=Kl?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),af(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},Pv=Kl?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function Rv(r,e){if(D1(r)&&D1(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 _v(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 Iv(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,u;switch(s){case 1:o<128&&(i=o);break;case 2:a=r[e+1],(a&192)===128&&(u=(o&31)<<6|a&63,u>127&&(i=u));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(u=(o&15)<<12|(a&63)<<6|c&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(u=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,u>65535&&u<1114112&&(i=u))}}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 k6(n)}var Tv=4096;function k6(r){let e=r.length;if(e<=Tv)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=Tv));return t}var EB=256,cf=class{constructor(e=EB){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=Pv(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=Vl(n,0,this.cursor)}else t=kv(this.chunks,this.cursor);return e&&this.reset(),t}};var me="CBOR decode error:",ki="CBOR encode error:",lf=[];lf[23]=1;lf[24]=2;lf[25]=3;lf[26]=5;lf[27]=9;function Pi(r,e,t){if(r.length-e<t)throw new Error(`${me} not enough data for type`)}var sr=[24,256,65536,4294967296,BigInt("18446744073709551616")];function Cn(r,e,t){Pi(r,e,1);let n=r[e];if(t.strict===!0&&n<sr[0])throw new Error(`${me} integer encoded in more bytes than necessary (strict decode)`);return n}function kn(r,e,t){Pi(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<sr[1])throw new Error(`${me} integer encoded in more bytes than necessary (strict decode)`);return n}function Pn(r,e,t){Pi(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<sr[2])throw new Error(`${me} integer encoded in more bytes than necessary (strict decode)`);return n}function Rn(r,e,t){Pi(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<sr[3])throw new Error(`${me} 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(`${me} integers outside of the safe integer range are not supported`)}function Nv(r,e,t,n){return new G(E.uint,Cn(r,e+1,n),2)}function Dv(r,e,t,n){return new G(E.uint,kn(r,e+1,n),3)}function Ov(r,e,t,n){return new G(E.uint,Pn(r,e+1,n),5)}function Lv(r,e,t,n){return new G(E.uint,Rn(r,e+1,n),9)}function jn(r,e){return dr(r,0,e.value)}function dr(r,e,t){if(t<sr[0]){let n=Number(t);r.push([e|n])}else if(t<sr[1]){let n=Number(t);r.push([e|24,n])}else if(t<sr[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<sr[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<sr[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(`${me} encountered BigInt larger than allowable range`)}}jn.encodedSize=function(e){return dr.encodedSize(e.value)};dr.encodedSize=function(e){return e<sr[0]?1:e<sr[1]?2:e<sr[2]?3:e<sr[3]?5:9};jn.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function Bv(r,e,t,n){return new G(E.negint,-1-Cn(r,e+1,n),2)}function Mv(r,e,t,n){return new G(E.negint,-1-kn(r,e+1,n),3)}function Uv(r,e,t,n){return new G(E.negint,-1-Pn(r,e+1,n),5)}var P6=BigInt(-1),Fv=BigInt(1);function $v(r,e,t,n){let o=Rn(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new G(E.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${me} integers outside of the safe integer range are not supported`);return new G(E.negint,P6-BigInt(o),9)}function L1(r,e){let t=e.value,n=typeof t=="bigint"?t*P6-Fv:t*-1-1;dr(r,e.type.majorEncoded,n)}L1.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*P6-Fv:t*-1-1;return n<sr[0]?1:n<sr[1]?2:n<sr[2]?3:n<sr[3]?5:9};L1.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function uf(r,e,t,n){Pi(r,e,t+n);let o=Vl(r,e+t,e+t+n);return new G(E.bytes,o,t+n)}function Kv(r,e,t,n){return uf(r,e,1,t)}function Vv(r,e,t,n){return uf(r,e,2,Cn(r,e+1,n))}function Hv(r,e,t,n){return uf(r,e,3,kn(r,e+1,n))}function qv(r,e,t,n){return uf(r,e,5,Pn(r,e+1,n))}function jv(r,e,t,n){let o=Rn(r,e+1,n);if(typeof o=="bigint")throw new Error(`${me} 64-bit integer bytes lengths not supported`);return uf(r,e,9,o)}function B1(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===E.string?O1(r.value):r.value),r.encodedBytes}function Hl(r,e){let t=B1(e);dr(r,e.type.majorEncoded,t.length),r.push(t)}Hl.encodedSize=function(e){let t=B1(e);return dr.encodedSize(t.length)+t.length};Hl.compareTokens=function(e,t){return AB(B1(e),B1(t))};function AB(r,e){return r.length<e.length?-1:r.length>e.length?1:Rv(r,e)}function df(r,e,t,n,o){let i=t+n;Pi(r,e,i);let s=new G(E.string,Cv(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=Vl(r,e+t,e+i)),s}function Wv(r,e,t,n){return df(r,e,1,t,n)}function Gv(r,e,t,n){return df(r,e,2,Cn(r,e+1,n),n)}function zv(r,e,t,n){return df(r,e,3,kn(r,e+1,n),n)}function Xv(r,e,t,n){return df(r,e,5,Pn(r,e+1,n),n)}function Yv(r,e,t,n){let o=Rn(r,e+1,n);if(typeof o=="bigint")throw new Error(`${me} 64-bit integer string lengths not supported`);return df(r,e,9,o,n)}var Qv=Hl;function ql(r,e,t,n){return new G(E.array,n,t)}function Zv(r,e,t,n){return ql(r,e,1,t)}function Jv(r,e,t,n){return ql(r,e,2,Cn(r,e+1,n))}function eE(r,e,t,n){return ql(r,e,3,kn(r,e+1,n))}function tE(r,e,t,n){return ql(r,e,5,Pn(r,e+1,n))}function rE(r,e,t,n){let o=Rn(r,e+1,n);if(typeof o=="bigint")throw new Error(`${me} 64-bit integer array lengths not supported`);return ql(r,e,9,o)}function nE(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${me} indefinite length items not allowed`);return ql(r,e,1,1/0)}function M1(r,e){dr(r,E.array.majorEncoded,e.value)}M1.compareTokens=jn.compareTokens;M1.encodedSize=function(e){return dr.encodedSize(e.value)};function jl(r,e,t,n){return new G(E.map,n,t)}function oE(r,e,t,n){return jl(r,e,1,t)}function iE(r,e,t,n){return jl(r,e,2,Cn(r,e+1,n))}function sE(r,e,t,n){return jl(r,e,3,kn(r,e+1,n))}function aE(r,e,t,n){return jl(r,e,5,Pn(r,e+1,n))}function cE(r,e,t,n){let o=Rn(r,e+1,n);if(typeof o=="bigint")throw new Error(`${me} 64-bit integer map lengths not supported`);return jl(r,e,9,o)}function lE(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${me} indefinite length items not allowed`);return jl(r,e,1,1/0)}function U1(r,e){dr(r,E.map.majorEncoded,e.value)}U1.compareTokens=jn.compareTokens;U1.encodedSize=function(e){return dr.encodedSize(e.value)};function uE(r,e,t,n){return new G(E.tag,t,1)}function dE(r,e,t,n){return new G(E.tag,Cn(r,e+1,n),2)}function fE(r,e,t,n){return new G(E.tag,kn(r,e+1,n),3)}function hE(r,e,t,n){return new G(E.tag,Pn(r,e+1,n),5)}function pE(r,e,t,n){return new G(E.tag,Rn(r,e+1,n),9)}function F1(r,e){dr(r,E.tag.majorEncoded,e.value)}F1.compareTokens=jn.compareTokens;F1.encodedSize=function(e){return dr.encodedSize(e.value)};var PB=20,RB=21,NB=22,DB=23;function mE(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${me} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new G(E.null,null,1):new G(E.undefined,void 0,1)}function gE(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${me} indefinite length items not allowed`);return new G(E.break,void 0,1)}function R6(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${me} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${me} Infinity values are not supported`)}return new G(E.float,r,e)}function yE(r,e,t,n){return R6(N6(r,e+1),3,n)}function wE(r,e,t,n){return R6(D6(r,e+1),5,n)}function bE(r,e,t,n){return R6(SE(r,e+1),9,n)}function $1(r,e,t){let n=e.value;if(n===!1)r.push([E.float.majorEncoded|PB]);else if(n===!0)r.push([E.float.majorEncoded|RB]);else if(n===null)r.push([E.float.majorEncoded|NB]);else if(n===void 0)r.push([E.float.majorEncoded|DB]);else{let o,i=!1;(!t||t.float64!==!0)&&(vE(n),o=N6(_o,1),n===o||Number.isNaN(n)?(_o[0]=249,r.push(_o.slice(0,3)),i=!0):(EE(n),o=D6(_o,1),n===o&&(_o[0]=250,r.push(_o.slice(0,5)),i=!0))),i||(OB(n),o=SE(_o,1),_o[0]=251,r.push(_o.slice(0,9)))}}$1.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){vE(n);let o=N6(_o,1);if(n===o||Number.isNaN(n))return 3;if(EE(n),o=D6(_o,1),n===o)return 5}return 9};var xE=new ArrayBuffer(9),Wn=new DataView(xE,1),_o=new Uint8Array(xE,0);function vE(r){if(r===1/0)Wn.setUint16(0,31744,!1);else if(r===-1/0)Wn.setUint16(0,64512,!1);else if(Number.isNaN(r))Wn.setUint16(0,32256,!1);else{Wn.setFloat32(0,r);let e=Wn.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)Wn.setUint16(0,31744,!1);else if(t===0)Wn.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?Wn.setUint16(0,0):o<-14?Wn.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):Wn.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function N6(r,e){if(r.length-e<2)throw new Error(`${me} 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 EE(r){Wn.setFloat32(0,r,!1)}function D6(r,e){if(r.length-e<4)throw new Error(`${me} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function OB(r){Wn.setFloat64(0,r,!1)}function SE(r,e){if(r.length-e<8)throw new Error(`${me} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}$1.compareTokens=jn.compareTokens;function Qe(r,e,t){throw new Error(`${me} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function K1(r){return()=>{throw new Error(`${me} ${r}`)}}var te=[];for(let r=0;r<=23;r++)te[r]=Qe;te[24]=Nv;te[25]=Dv;te[26]=Ov;te[27]=Lv;te[28]=Qe;te[29]=Qe;te[30]=Qe;te[31]=Qe;for(let r=32;r<=55;r++)te[r]=Qe;te[56]=Bv;te[57]=Mv;te[58]=Uv;te[59]=$v;te[60]=Qe;te[61]=Qe;te[62]=Qe;te[63]=Qe;for(let r=64;r<=87;r++)te[r]=Kv;te[88]=Vv;te[89]=Hv;te[90]=qv;te[91]=jv;te[92]=Qe;te[93]=Qe;te[94]=Qe;te[95]=K1("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)te[r]=Wv;te[120]=Gv;te[121]=zv;te[122]=Xv;te[123]=Yv;te[124]=Qe;te[125]=Qe;te[126]=Qe;te[127]=K1("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)te[r]=Zv;te[152]=Jv;te[153]=eE;te[154]=tE;te[155]=rE;te[156]=Qe;te[157]=Qe;te[158]=Qe;te[159]=nE;for(let r=160;r<=183;r++)te[r]=oE;te[184]=iE;te[185]=sE;te[186]=aE;te[187]=cE;te[188]=Qe;te[189]=Qe;te[190]=Qe;te[191]=lE;for(let r=192;r<=215;r++)te[r]=uE;te[216]=dE;te[217]=fE;te[218]=hE;te[219]=pE;te[220]=Qe;te[221]=Qe;te[222]=Qe;te[223]=Qe;for(let r=224;r<=243;r++)te[r]=K1("simple values are not supported");te[244]=Qe;te[245]=Qe;te[246]=Qe;te[247]=mE;te[248]=K1("simple values are not supported");te[249]=yE;te[250]=wE;te[251]=bE;te[252]=Qe;te[253]=Qe;te[254]=Qe;te[255]=gE;var Io=[];for(let r=0;r<24;r++)Io[r]=new G(E.uint,r,1);for(let r=-1;r>=-24;r--)Io[31-r]=new G(E.negint,r,1);Io[64]=new G(E.bytes,new Uint8Array(0),1);Io[96]=new G(E.string,"",1);Io[128]=new G(E.array,0,1);Io[160]=new G(E.map,0,1);Io[244]=new G(E.false,!1,1);Io[245]=new G(E.true,!0,1);Io[246]=new G(E.null,null,1);function AE(r){switch(r.type){case E.false:return ri([244]);case E.true:return ri([245]);case E.null:return ri([246]);case E.bytes:return r.value.length?void 0:ri([64]);case E.string:return r.value===""?ri([96]):void 0;case E.array:return r.value===0?ri([128]):void 0;case E.map:return r.value===0?ri([160]):void 0;case E.uint:return r.value<24?ri([Number(r.value)]):void 0;case E.negint:if(r.value>=-24)return ri([31-Number(r.value)])}}var BB={float64:!1,mapSorter:FB,quickEncodeToken:AE};function MB(){let r=[];return r[E.uint.major]=jn,r[E.negint.major]=L1,r[E.bytes.major]=Hl,r[E.string.major]=Qv,r[E.array.major]=M1,r[E.map.major]=U1,r[E.tag.major]=F1,r[E.float.major]=$1,r}var _E=MB(),O6=new cf,H1=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(`${ki} object contains circular references`);return new r(t,e)}},Ss={null:new G(E.null,null),undefined:new G(E.undefined,void 0),true:new G(E.true,!0),false:new G(E.false,!1),emptyArray:new G(E.array,0),emptyMap:new G(E.map,0)},As={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new G(E.float,r):r>=0?new G(E.uint,r):new G(E.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new G(E.uint,r):new G(E.negint,r)},Uint8Array(r,e,t,n){return new G(E.bytes,r)},string(r,e,t,n){return new G(E.string,r)},boolean(r,e,t,n){return r?Ss.true:Ss.false},null(r,e,t,n){return Ss.null},undefined(r,e,t,n){return Ss.undefined},ArrayBuffer(r,e,t,n){return new G(E.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new G(E.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[Ss.emptyArray,new G(E.break)]:Ss.emptyArray;n=H1.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=V1(s,t,n);return t.addBreakTokens?[new G(E.array,r.length),o,new G(E.break)]:[new G(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?[Ss.emptyMap,new G(E.break)]:Ss.emptyMap;n=H1.createCheck(n,r);let a=[],c=0;for(let l of i)a[c++]=[V1(l,t,n),V1(o?r.get(l):r[l],t,n)];return UB(a,t),t.addBreakTokens?[new G(E.map,s),a,new G(E.break)]:[new G(E.map,s),a]}};As.Map=As.Object;As.Buffer=As.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))As[`${r}Array`]=As.DataView;function V1(r,e={},t){let n=Av(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||As[n];if(typeof o=="function"){let s=o(r,n,e,t);if(s!=null)return s}let i=As[n];if(!i)throw new Error(`${ki} unsupported type: ${n}`);return i(r,n,e,t)}function UB(r,e){e.mapSorter&&r.sort(e.mapSorter)}function FB(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=_E[o].compareTokens(t,n);return i===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),i}function IE(r,e,t,n){if(Array.isArray(e))for(let o of e)IE(r,o,t,n);else t[e.type.major](r,e,n)}function L6(r,e,t){let n=V1(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 cf(s);if(i(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return af(a.chunks[0])}}return O6.reset(),IE(O6,n,e,t),O6.toBytes(!0)}function _s(r,e){return e=Object.assign({},BB,e),L6(r,_E,e)}var $B={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},q1=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=Io[e];if(t===void 0){let n=te[e];if(!n)throw new Error(`${me} 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}},ff=Symbol.for("DONE"),j1=Symbol.for("BREAK");function KB(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=Wl(e,t);if(i===j1){if(r.value===1/0)break;throw new Error(`${me} got unexpected break to lengthed array`)}if(i===ff)throw new Error(`${me} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function VB(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=Wl(e,t);if(a===j1){if(r.value===1/0)break;throw new Error(`${me} got unexpected break to lengthed map`)}if(a===ff)throw new Error(`${me} found map but not enough entries (got ${s} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${me} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&i.has(a)||!n&&a in o))throw new Error(`${me} found repeat map key "${a}"`);let c=Wl(e,t);if(c===ff)throw new Error(`${me} 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 Wl(r,e){if(r.done())return ff;let t=r.next();if(t.type===E.break)return j1;if(t.type.terminal)return t.value;if(t.type===E.array)return KB(t,r,e);if(t.type===E.map)return VB(t,r,e);if(t.type===E.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=Wl(r,e);return e.tags[t.value](n)}throw new Error(`${me} tag not supported (${t.value})`)}throw new Error("unsupported")}function B6(r,e){if(!(r instanceof Uint8Array))throw new Error(`${me} data to decode must be a Uint8Array`);e=Object.assign({},$B,e);let t=e.tokenizer||new q1(r,e),n=Wl(t,e);if(n===ff)throw new Error(`${me} did not find any content to decode`);if(n===j1)throw new Error(`${me} got unexpected break`);return[n,r.subarray(t.pos())]}function Nn(r,e){let[t,n]=B6(r,e);if(n.length>0)throw new Error(`${me} too many terminals, data makes no sense`);return t}var Ri="/",TE=new TextEncoder().encode(Ri),W1=TE[0],ct=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=V(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]!==W1)throw new Error("Invalid key")}toString(e="utf8"){return M(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Ri))}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=TE),this._buf[0]!==W1){let e=new Uint8Array(this._buf.byteLength+1);e.fill(W1,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===W1;)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(Ri).slice(1)}type(){return HB(this.baseNamespace())}name(){return qB(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Ri)||(e+=Ri),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Ri):new r(e.slice(0,-1).join(Ri))}child(e){return this.toString()===Ri?e:e.toString()===Ri?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(),...jB(e.map(t=>t.namespaces()))])}};function HB(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function qB(r){let e=r.split(":");return e[e.length-1]}function jB(r){return[].concat(...r)}function G1({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*WB(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],i=le.asCID(n);i!=null?yield[o.join("/"),i]:typeof n=="object"&&(yield*U6(n,o))}else{let t=le.asCID(e);t!=null?yield[r.join("/"),t]:yield*U6(e,r)}}function*U6(r,e){if(r==null||r instanceof Uint8Array)return;let t=le.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let i=[...e,n];yield*WB(i,o)}}function*GB(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&le.asCID(n)==null&&(yield*F6(n,o))}else yield*F6(e,r)}function*F6(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"&&le.asCID(n)==null&&(yield*GB(o,n))}}function zB(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=le.asCID(t);if(i!=null)return{value:i,remaining:e.slice(n+1).join("/")}}return{value:t}}var $6=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:G1(),bytes:G1(),value:G1(),asBlock:G1()})}links(){return U6(this.value,[])}tree(){return F6(this.value,[])}get(e="/"){return zB(this.value,e.split("/").filter(Boolean))}};function CE({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 $6({cid:e,bytes:r,value:o})}var RE="/pin/",kE="/pinned-block/",K6=Xo,PE=1;function z1(r){return r.version===0&&(r=r.toV1()),new ct(`${RE}${r.toString(K6)}`)}var X1=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=z1(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 $r({concurrency:PE});for await(let a of this.#e(e,i,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>ge(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,_s(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=CE({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 ct(`${kE}${K6.encode(e.multihash.bytes)}`),i={pinCount:0,pinnedBy:[]};try{i=Nn(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,_s(i),n),n.onProgress?.(new ae("helia:pin:add",e))}}async*rm(e,t={}){let n=z1(e),o=await this.datastore.get(n,t),i=Nn(o);await this.datastore.delete(n,t);let s=new $r({concurrency:PE});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=>ge(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:RE+(e.cid!=null?`${e.cid.toString(Xo)}`:"")},e)){let o=le.parse(t.toString().substring(5),Xo),i=Nn(n);yield{cid:o,...i}}}async isPinned(e,t={}){let n=new ct(`${kE}${K6.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=z1(e),o=await this.datastore.get(n,t);return Nn(o)}async setMetadata(e,t,n){let o=z1(e),i=await this.datastore.get(o,n),s=Nn(i);s.metadata=t??{},await this.datastore.put(o,_s(s),n)}};var V6=1,H6=5;var hf=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Is=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},pf=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},mf=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}};var XB=5,Y1=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??XB,this.findProviders=e.metrics?.traceFunction("helia.routing.findProviders",this.findProviders.bind(this),{optionsIndex:1})??this.findProviders,this.provide=e.metrics?.traceFunction("helia.routing.provide",this.provide.bind(this),{optionsIndex:1})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("helia.routing.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1})??this.cancelReprovide,this.put=e.metrics?.traceFunction("helia.routing.put",this.put.bind(this),{optionsIndex:2})??this.put,this.get=e.metrics?.traceFunction("helia.routing.get",this.get.bind(this),{optionsIndex:1})??this.get,this.findPeer=e.metrics?.traceFunction("helia.routing.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("helia.routing.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async start(){await cr(...this.routers)}async stop(){await Tr(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Is("No content routers available");let n=new lr({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let o of Kr(n.toGenerator(),...Ha(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 Is("No content routers available");await Promise.all(Ha(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){await Promise.all(Ha(this.routers,"cancelReprovide").map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){await Promise.all(Ha(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(Ha(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new Is("No peer routers available");let n=this,o=Kr(...Ha(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 ze("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Is("No peer routers available");for await(let n of Kr(...Ha(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function Ha(r,e){return r.filter(t=>t[e]!=null)}var Ts={},Gl=r=>{r.addEventListener("message",e=>{Gl.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{Gl.dispatchEvent("message",r,e)})};Gl.addEventListener=(r,e)=>{Ts[r]==null&&(Ts[r]=[]),Ts[r].push(e)};Gl.removeEventListener=(r,e)=>{Ts[r]!=null&&(Ts[r]=Ts[r].filter(t=>t===e))};Gl.dispatchEvent=function(r,e,t){Ts[r]!=null&&Ts[r].forEach(n=>n(e,t))};var q6=Gl;var j6="lock:worker:request-read",W6="lock:worker:release-read",G6="lock:master:grant-read",z6="lock:worker:request-write",X6="lock:worker:release-write",Y6="lock:master:grant-write";var NE=(r=21)=>Math.random().toString().substring(2);var DE=(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=u=>{if(u?.data==null)return;let d={type:u.data.type,name:u.data.name,identifier:u.data.identifier};d.type===n&&d.identifier===a.identifier&&(i.removeEventListener("message",l),c())};i.addEventListener("message",l)})}}}))},OE=(r,e,t,n)=>async()=>{let o=NE();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)})},YB={singleProcess:!1},LE=r=>{if(r=Object.assign({},YB,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return q6.addEventListener("message",DE(t,"requestReadLock",j6,W6,G6)),q6.addEventListener("message",DE(t,"requestWriteLock",z6,X6,Y6)),t}return{isWorker:!0,readLock:t=>OE(t,j6,G6,W6),writeLock:t=>OE(t,z6,Y6,X6)}};var qa={},Cs;async function Q6(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>Ao((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var QB=(r,e)=>{if(Cs.isWorker===!0)return{readLock:Cs.readLock(r,e),writeLock:Cs.writeLock(r,e)};let t=new ti({concurrency:1}),n;return{async readLock(){if(n!=null)return Q6(n,e);n=new ti({concurrency:e.concurrency,autoStart:!1});let o=n,i=Q6(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),i},async writeLock(){return n=null,Q6(t,e)}}},ZB={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function ja(r){let e=Object.assign({},ZB,r);return Cs==null&&(Cs=LE(e),Cs.isWorker!==!0&&(Cs.addEventListener("requestReadLock",t=>{qa[t.data.name]!=null&&qa[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),Cs.addEventListener("requestWriteLock",async t=>{qa[t.data.name]!=null&&qa[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),qa[e.name]==null&&(qa[e.name]=QB(e.name,e)),qa[e.name]}var Q1=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=ja({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await cr(this.child),this.started=!0}async stop(){await Tr(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 Z6=new ct("/version"),BE=1;async function ME(r){if(!await r.has(Z6)){await r.put(Z6,V(`${BE}`));return}let e=await r.get(Z6),t=M(e);if(parseInt(t,10)!==BE)throw new Error("Unknown datastore version, a datastore migration may be required")}var t5={};Pt(t5,{code:()=>e5,decode:()=>aM,decodeOptions:()=>oM,encode:()=>sM,encodeOptions:()=>rM,name:()=>iM,toByteView:()=>FE});var UE=42;function FE(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function JB(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=le.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new G(E.tag,UE),new G(E.bytes,t)]}function eM(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function tM(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 J6={float64:!0,typeEncoders:{Object:JB,undefined:eM,number:tM}},rM={...J6,typeEncoders:{...J6.typeEncoders}};function nM(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return le.decode(r.subarray(1))}var Z1={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Z1.tags[UE]=nM;var oM={...Z1,tags:Z1.tags.slice()},iM="dag-cbor",e5=113,sM=r=>_s(r,J6),aM=r=>Nn(FE(r),Z1);var c5={};Pt(c5,{code:()=>a5,decode:()=>KE,encode:()=>$E,format:()=>wM,name:()=>yM,parse:()=>xM,stringify:()=>wM});var r5=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(`${ki} unsupported type: Uint8Array`)}[E.string.major](e,t){this.prefix(e);let n=O1(JSON.stringify(t.value));e.push(n.length>32?af(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(`${ki} 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 cM(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${ki} 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(`${ki} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${ki} unexpected duplicate map keys, this is not supported`)}var lM={addBreakTokens:!0,mapSorter:cM};function n5(r,e){return e=Object.assign({},lM,e),L6(r,new r5,e)}var zl=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(`${me} 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(`${me} 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 G(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(`${me} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${me} 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 G(E.float,s,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(s)?new G(s>=0?E.uint:E.negint,s,this._pos-e):new G(s>=0?E.uint:E.negint,BigInt(i),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${me} 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 G(E.string,c,s)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${me} 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(`${me} 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(`${me} unexpected unicode sequence at position ${this._pos}`);let c,l,u,d;switch(a){case 1:i<128&&(s=i);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(d=(i&31)<<6|c&63,d>127&&(s=d));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(d=(i&15)<<12|(c&63)<<6|l&63,d>2047&&(d<55296||d>57343)&&(s=d));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],u=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(u&192)===128&&(d=(i&15)<<18|(c&63)<<12|(l&63)<<6|u&63,d>65535&&d<1114112&&(s=d))}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(`${me} 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(`${me} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new G(E.string,k6(t),this._pos-e);default:if(i<32)throw new Error(`${me} invalid control character at position ${this._pos}`);i<128?(t.push(i),this._pos++):o()}}throw new Error(`${me} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new G(E.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new G(E.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new G(E.null,null,4);case 102:return this.expect([102,97,108,115,101]),new G(E.false,!1,5);case 116:return this.expect([116,114,117,101]),new G(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(`${me} 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 G(E.break,void 0,1);if(this.ch()!==44)throw new Error(`${me} 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 G(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 G(E.break,void 0,1);if(this.ch()!==44)throw new Error(`${me} 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 G(E.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${me} 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(`${me} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function o5(r,e){return e=Object.assign({tokenizer:new zl(r,e)},e),Nn(r,e)}function dM(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function fM(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=le.asCID(r);if(!e)return null;let t=e.toString();return[new G(E.map,1/0,1),new G(E.string,"/",1),new G(E.string,t,t.length),new G(E.break,void 0,1)]}function J1(r){let e=Ht.encode(r).slice(1);return[new G(E.map,1/0,1),new G(E.string,"/",1),new G(E.map,1/0,1),new G(E.string,"bytes",5),new G(E.string,e,e.length),new G(E.break,void 0,1),new G(E.break,void 0,1)]}function To(r){return J1(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function hM(r){return J1(new Uint8Array(r))}function pM(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function mM(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 gM={typeEncoders:{Object:fM,Buffer:J1,Uint8Array:J1,Int8Array:To,Uint16Array:To,Int16Array:To,Uint32Array:To,Int32Array:To,Float32Array:To,Float64Array:To,Uint8ClampedArray:To,BigInt64Array:To,BigUint64Array:To,DataView:To,ArrayBuffer:hM,undefined:pM,number:mM}},i5=class extends zl{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 G(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=Ht.decode(`m${i.value}`);return new G(E.bytes,s,i.value.length)}this.tokenBuffer.push(i)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},s5={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};s5.tags[42]=le.parse;var yM="dag-json",a5=297,$E=r=>n5(r,gM),KE=r=>{let e=dM(r),t=Object.assign(s5,{tokenizer:new i5(e,s5)});return o5(e,t)},wM=r=>bM.decode($E(r));var bM=new TextDecoder,xM=r=>KE(vM.encode(r)),vM=new TextEncoder;var p5={};Pt(p5,{code:()=>h5,createLink:()=>QE,createNode:()=>YE,decode:()=>OM,encode:()=>DM,name:()=>NM,prepare:()=>d5,validate:()=>f5});var EM=new TextDecoder;function l5(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 em(r,e){let t;[t,e]=l5(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 VE(r,e){let t;return[t,e]=l5(r,e),[t&7,t>>3,e]}function SM(r){let e={},t=r.length,n=0;for(;n<t;){let o,i;if([o,i,n]=VE(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]=em(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]=em(r,n),e.Name=EM.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]=l5(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 HE(r){let e=r.length,t=0,n,o=!1,i;for(;t<e;){let a,c;if([a,c,t]=VE(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]=em(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]=em(r,t),n.push(SM(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 jE=new TextEncoder,qE=2**32,AM=2**31;function _M(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=gf(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=jE.encode(r.Name);t-=n.length,e.set(n,t),t=gf(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=gf(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function WE(r){let e=TM(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=gf(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let i=_M(r.Links[o],t.subarray(0,n));n-=i,n=gf(t,n,i)-1,t[n]=18}return t}function IM(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+Xl(t)}if(typeof r.Name=="string"){let t=jE.encode(r.Name).length;e+=1+t+Xl(t)}return typeof r.Tsize=="number"&&(e+=1+Xl(r.Tsize)),e}function TM(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+Xl(t)}if(r.Links)for(let t of r.Links){let n=IM(t);e+=1+n+Xl(n)}return e}function gf(r,e,t){e-=Xl(t);let n=e;for(;t>=AM;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function Xl(r){return r%2===0&&r++,Math.floor((CM(r)+6)/7)}function CM(r){let e=0;return r>=qE&&(r=Math.floor(r/qE),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+kM[r]}var kM=[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 PM=["Data","Links"],RM=["Hash","Name","Tsize"],u5=new TextEncoder;function zE(r,e){if(r===e)return 0;let t=r.Name?u5.encode(r.Name):[],n=e.Name?u5.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 GE(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function XE(r){if(typeof r.asCID=="object"){let t=le.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=le.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=le.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=le.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 d5(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=u5.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(XE),e.Links.sort(zE);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function f5(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!GE(r,PM))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(!GE(t,RM))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&&zE(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function YE(r,e=[]){return d5({Data:r,Links:e})}function QE(r,e,t){return XE({Hash:t,Name:r,Tsize:e})}function ZE(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var NM="dag-pb",h5=112;function DM(r){f5(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),WE(e)}function OM(r){let e=ZE(r),t=HE(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let i={};try{i.Hash=le.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 Yl(r){return r?.then!=null}function JE(r=[],e){let t={[h5]:p5,[Ea]:vl,[e5]:t5,[a5]:c5,[s4]:zp};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Yl(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new mf(`Could not load codec for ${n}`)}}function eS(r=[],e){let t={[yt.code]:yt,[Yp.code]:Yp,[Nr.code]:Nr};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Yl(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new pf(`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 Gn=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 Ni=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 tm=0,rm=class extends Ni{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===tm||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===tm)return e.multihash.digest;if(this.child==null)throw new Gn;return this.child.get(e)}has(e){return e.multihash.code===tm?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==tm&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function LM(r){return r[Symbol.asyncIterator]!=null}function BM(r,e){let t=0;if(LM(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=bl(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 Co=BM;function MM(r){return r[Symbol.asyncIterator]!=null}function tS(r){return r?.then!=null}function UM(r,e){let t=0;if(MM(r))return async function*(){for await(let c of r){let l=e(c,t++);tS(l)&&await l,yield c}}();let n=bl(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++);tS(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var Wa=UM;var nm=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 rm(e.blockstore),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new ae("blocks:put:duplicate",e)),e):(n.onProgress?.(new ae("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,t,n))),n.onProgress?.(new ae("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=Co(e,async({cid:i})=>{let s=await this.child.has(i,t);return s&&t.onProgress?.(new ae("blocks:put-many:duplicate",i)),!s}),o=Wa(n,async({cid:i,block:s})=>{t.onProgress?.(new ae("blocks:put-many:providers:notify",i)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(i,s,t)))});t.onProgress?.(new ae("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 ae("blocks:get:providers:get",e));let o=await rS(e,this.components.blockBrokers,n,{...t,log:this.log});return t.onProgress?.(new ae("blocks:get:blockstore:put",e)),await this.child.put(e,o,t),t.onProgress?.(new ae("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async i=>i.announce?.(e,o,t))),o}return t.onProgress?.(new ae("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new ae("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(Wa(e,async n=>{if(t.offline!==!0&&!await this.child.has(n,t)){let o=await this.getHasher(n.multihash.code);t.onProgress?.(new ae("blocks:get-many:providers:get",n));let i=await rS(n,this.components.blockBrokers,o,{...t,log:this.log});t.onProgress?.(new ae("blocks:get-many:blockstore:put",n)),await this.child.put(n,i,t),t.onProgress?.(new ae("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 ae("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new ae("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 ae("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}},om=class extends nm{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await cr(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await Tr(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 m5({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}},m5=class extends nm{closeController;constructor(e,t){super(e),this.closeController=new AbortController,this.closeController.signal,this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async put(e,t,n={}){let o=Ne([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=Ne([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function FM(r){return typeof r.retrieve=="function"}var $M=(r,e)=>{if(e==null)throw new D(`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(Yl(o)?n=await o:n=o,!ge(n.digest,r.multihash.digest))throw new is("Hash of downloaded block did not match multihash from passed CID")}};async function rS(r,e,t,n){let o=$M(r,t),i=new AbortController,s=Ne([i.signal,n.signal]);i.signal;let a=[];for(let c of e)FM(c)&&a.push(c);try{return await Promise.any(a.map(async c=>{try{let l=!1,u=await c.retrieve(r,{...n,signal:s,validateFn:async d=>{await o(d),l=!0}});return l||await o(u),u}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{i.abort(),s.clear()}}var Ga=class extends Le{initialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),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=tn(this.maxProviders)}async retrieve(e,t={}){let n=Ht.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o;let i=de();if(this.requests.set(n,i.promise),this.providers.length===0){let l=!1;this.initialPeerSearchComplete==null&&(l=!0,this.log=this.logger.forComponent(`${this.name}:${e}`),this.initialPeerSearchComplete=this.findProviders(e,this.minProviders,t)),await this.initialPeerSearchComplete,l&&this.log("found initial session peers for %c",e)}let s=!1,a=new $r({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 u=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(u)}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(u=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,u)})};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=de(),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 hf(`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 im=class{blockstore;datastore;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??Es(),this.log=this.logger.forComponent("helia"),this.getHasher=eS(e.hashers,e.loadHasher),this.getCodec=JE(e.codecs,e.loadCodec),this.dns=e.dns??N1(),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 Y1(t,{routers:(e.routers??[]).flatMap(o=>{let i=[o];return o[jo]!=null&&i.push(o[jo]),o[Wo]!=null&&i.push(o[Wo]),i}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new om(t);this.pins=new X1(e.datastore,n,this.getCodec),this.blockstore=new Q1(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await ME(this.datastore),await cr(this.blockstore,this.datastore,this.routing)}async stop(){await Tr(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 Cr(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 ae("helia:gc:deleted",i))}catch(s){n.log.error("Error during gc",s),e.onProgress?.(new ae("helia:gc:error",s))}}()))}finally{t()}this.log("gc finished")}};var g5=class extends Ga{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 nS(r,e){return new g5(r,e)}var sm=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 y5=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 am(r){let{name:e,metrics:t}=r,n;return t!=null?n=new y5({name:e,metrics:t}):n=new Map,n}function KM(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=nt(r);e.push(t),r=r.slice(Ce(t))}return e}var oS=KM;var cm=class extends Le{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=rf({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=am({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=M(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??Ft.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===Ft.WantHave&&t.wantType===Ft.WantBlock&&(o.wantType=Ft.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===Ft.WantBlock?(await tr(this,"block",t?.signal,{filter:a=>ge(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await tr(this,"presence",t?.signal,{filter:s=>ge(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=de(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new Ci;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=M(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new Ci;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Ft.WantHave,priority:1}),await this.network.sendMessage(t,o),(await tr(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&ge(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:Ft.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new Ci;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Ft.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await tr(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&ge(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=M(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=oS(o.prefix),s=i[0],a=i[1],c=i[2],l=c===yt.code?yt:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let u=l.digest(o.data);u.then!=null&&(u=await u);let d=le.create(s===0?0:1,a,u);this.log("received block from %p for %c",e,d),this.safeDispatchEvent("block",{detail:{sender:e,cid:d,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:d,has:!0,block:o.data}});let h=M(d.multihash.bytes,"base64"),m=this.wants.get(h);m!=null&&(m.cancel=!0,n=!0)}for(let{cid:o,type:i}of t.blockPresences){let s=le.decode(o);this.log("received %s from %p for %c",i,e,s),this.safeDispatchEvent("presence",{detail:{sender:e,cid:s,has:i===Kn.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new Ci(!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:Ft.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 lm=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 sm(e),this.network=new n1(e,t),this.peerWantLists=new A1({...e,network:this.network},t),this.wantList=new cm({...e,network:this.network},t)}createSession(e={}){return nS({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,o=Ne([n.signal,t.signal]);n.signal,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 iS=(r,e={})=>new lm(r,e);var w5=class{bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=iS(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 b5(r={}){return e=>new w5(e,r)}var um=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 u=this.readAtomically(()=>{let d=this.readChar();if(d===void 0)return;let h=Number.parseInt(d,e);if(!Number.isNaN(h))return h});if(u===void 0)break;if(i*=e,i+=u,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 sS=45,VM=15,Ql=new um;function dm(r){if(!(r.length>VM))return Ql.new(r).parseWith(()=>Ql.readIPv4Addr())}function fm(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>sS))return Ql.new(r).parseWith(()=>Ql.readIPv6Addr())}function za(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>sS)return;let t=Ql.new(r).parseWith(()=>Ql.readIPAddr());if(t)return e&&t.length===4?Uint8Array.from([0,0,0,0,0,0,0,0,0,0,255,255,t[0],t[1],t[2],t[3]]):t}function ko(r){return!!dm(r)}function Zl(r){return!!fm(r)}function hm(r){return!!za(r)}var cS=Vt(aS(),1),HM=["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"],qM=HM.map(r=>new cS.Netmask(r));function x5(r){for(let e of qM)if(e.contains(r))return!0;return!1}function jM(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function WM(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 x5(o)}function GM(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function zM(r){let e=r.split(":"),t=e[e.length-1];return x5(t)}function XM(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 Gr(r){return ko(r)?x5(r):jM(r)?WM(r):GM(r)?zM(r):Zl(r)?XM(r):void 0}var YM=r=>r.toString().split("/").slice(1),Jl=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),Be=r=>({match:e=>Jl(t=>t===r).match(e),pattern:r}),Xa=()=>({match:r=>Jl(e=>typeof e=="string").match(r),pattern:"{string}"}),wf=()=>({match:r=>Jl(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),ot=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{He.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),bf=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{va.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),et=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Lr=(...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(", ")})`}),qe=(...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 it(...r){function e(o){let i=YM(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 QM=ot(),lS=it(QM),mm=qe(Be("dns4"),Xa()),gm=qe(Be("dns6"),Xa()),ym=qe(Be("dnsaddr"),Xa()),E5=qe(Be("dns"),Xa()),vne=it(mm,et(ot())),Ene=it(gm,et(ot())),Sne=it(ym,et(ot())),xf=it(Lr(E5,ym,mm,gm),et(ot())),uS=qe(Be("ip4"),Jl(ko)),dS=qe(Be("ip6"),Jl(Zl)),S5=Lr(uS,dS),Di=Lr(S5,E5,mm,gm,ym),fS=it(Lr(S5,qe(Lr(E5,ym,mm,gm),et(ot())))),A5=it(uS),_5=it(dS),hS=it(S5),I5=qe(Di,Be("tcp"),wf()),vf=qe(Di,Be("udp"),wf()),Ya=it(qe(I5,et(ot()))),Ane=it(vf),T5=qe(vf,Be("quic"),et(ot())),wm=qe(vf,Be("quic-v1"),et(ot())),ZM=Lr(T5,wm),_ne=it(T5),pS=it(wm),v5=Lr(Di,I5,vf,T5,wm),mS=Lr(qe(v5,Be("ws"),et(ot()))),Oi=it(mS),gS=Lr(qe(v5,Be("wss"),et(ot())),qe(v5,Be("tls"),et(qe(Be("sni"),Xa())),Be("ws"),et(ot()))),Qa=it(gS),yS=qe(vf,Be("webrtc-direct"),et(bf()),et(bf()),et(ot())),Ef=it(yS),wS=qe(wm,Be("webtransport"),et(bf()),et(bf()),et(ot())),C5=it(wS),pm=Lr(mS,gS,qe(I5,et(ot())),qe(ZM,et(ot())),qe(Di,et(ot())),yS,wS,ot()),bm=it(pm),JM=qe(pm,Be("p2p-circuit"),ot()),nn=it(JM),eU=Lr(qe(pm,Be("p2p-circuit"),Be("webrtc"),et(ot())),qe(pm,Be("webrtc"),et(ot())),qe(Be("webrtc"),et(ot()))),Sf=it(eU),tU=Lr(qe(Di,Be("tcp"),wf(),Be("http"),et(ot())),qe(Di,Be("http"),et(ot()))),bS=it(tU),rU=Lr(qe(Di,Be("tcp"),Lr(qe(Be("443"),Be("http")),qe(wf(),Be("https"))),et(ot())),qe(Di,Be("tls"),Be("http"),et(ot())),qe(Di,Be("https"),et(ot()))),xS=it(rU),nU=Lr(qe(Be("memory"),Xa(),et(ot()))),Ine=it(nU);function vS(r,e,t){let n=0;for(let o of r)if(!(n<e)){if(n>t)break;if(o!==255)return!1;n++}return!0}function ES(r,e,t,n){let o=0;for(let i of r)if(!(o<t)){if(o>n)break;if(i!==e[o])return!1;o++}return!0}function k5(r){switch(r.length){case Za:return r.join(".");case Ja:{let e=[];for(let t=0;t<r.length;t++)t%2===0&&e.push(r[t].toString(16).padStart(2,"0")+r[t+1].toString(16).padStart(2,"0"));return e.join(":")}default:throw new Error("Invalid ip length")}}function SS(r){let e=0;for(let[t,n]of r.entries()){if(n===255){e+=8;continue}for(;(n&128)!=0;)e++,n=n<<1;if((n&128)!=0)return-1;for(let o=t+1;o<r.length;o++)if(r[o]!=0)return-1;break}return e}function AS(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var Za=4,Ja=16,Nne=parseInt("0xFFFF",16),oU=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function Af(r,e){e.length===Ja&&r.length===Za&&vS(e,0,11)&&(e=e.slice(12)),e.length===Za&&r.length===Ja&&ES(r,oU,0,11)&&(r=r.slice(12));let t=r.length;if(t!=e.length)throw new Error("Failed to mask ip");let n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=r[o]&e[o];return n}function _S(r,e){if(typeof e=="string"&&(e=za(e)),e==null)throw new Error("Invalid ip");if(e.length!==r.network.length)return!1;for(let t=0;t<e.length;t++)if((r.network[t]&r.mask[t])!==(e[t]&r.mask[t]))return!1;return!0}function P5(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=Za,o=dm(e);if(o==null&&(n=Ja,o=fm(e),o==null))throw new Error("Failed to parse given CIDR: "+r);let i=parseInt(t,10);if(Number.isNaN(i)||String(i).length!==t.length||i<0||i>n*8)throw new Error("Failed to parse given CIDR: "+r);let s=R5(i,8*n);return{network:Af(o,s),mask:s}}function R5(r,e){if(e!==8*Za&&e!==8*Ja)throw new Error("Invalid CIDR mask");if(r<0||r>e)throw new Error("Invalid CIDR mask");let t=e/8,n=new Uint8Array(t);for(let o=0;o<t;o++){if(r>=8){n[o]=255,r-=8;continue}n[o]=255-(255>>r),r=0}return n}var ec=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=P5(e));else{let n=za(e);if(n==null)throw new Error("Failed to parse network");t=String(t);let o=parseInt(t,10);if(Number.isNaN(o)||String(o).length!==t.length||o<0||o>n.length*8){let i=za(t);if(i==null)throw new Error("Failed to parse mask");this.mask=i}else this.mask=R5(o,8*n.length);this.network=Af(n,this.mask)}}contains(e){return _S({network:this.network,mask:this.mask},e)}toString(){let e=SS(this.mask),t=e!==-1?String(e):AS(this.mask);return k5(this.network)+"/"+t}};function IS(r,e){return new ec(r).contains(e)}var TS=ko,iU=Zl,N5=function(r){let e=0;if(r=r.toString().trim(),TS(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(iU(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let i=TS(t[n]),s;i&&(s=N5(t[n]),t[n]=M(s.slice(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,M(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")},CS=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 eu={},D5={},aU=[[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"]];aU.forEach(r=>{let e=cU(...r);D5[e.code]=e,eu[e.name]=e});function cU(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function Ie(r){if(typeof r=="number"){if(D5[r]!=null)return D5[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(eu[r]!=null)return eu[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var lU=Ie("ip4"),uU=Ie("ip6"),dU=Ie("ipcidr");function M5(r,e){switch(Ie(r).code){case 4:case 41:return hU(e);case 42:return B5(e);case 43:return M(e,"base10");case 6:case 273:case 33:case 132:return RS(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return B5(e);case 421:return yU(e);case 444:return PS(e);case 445:return PS(e);case 466:return gU(e);case 481:return globalThis.encodeURIComponent(B5(e));default:return M(e,"base16")}}function U5(r,e){switch(Ie(r).code){case 4:return kS(e);case 41:return kS(e);case 42:return L5(e);case 43:return V(e,"base10");case 6:case 273:case 33:case 132:return $5(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return L5(e);case 421:return pU(e);case 444:return wU(e);case 445:return bU(e);case 466:return mU(e);case 481:return L5(globalThis.decodeURIComponent(e));default:return V(e,"base16")}}function F5(r){let e,t;if(r.stringTuples().forEach(([n,o])=>{(n===lU.code||n===uU.code)&&(t=o),n===dU.code&&(e=o)}),e==null||t==null)throw new Error("Invalid multiaddr");return new ec(t,e)}var O5=Object.values(Aa).map(r=>r.decoder),fU=function(){let r=O5[0].or(O5[1]);return O5.slice(2).forEach(e=>r=r.or(e)),r}();function kS(r){if(!hm(r))throw new Error("invalid ip address");return N5(r)}function hU(r){let e=CS(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!hm(e))throw new Error("invalid ip address");return e}function $5(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function RS(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function L5(r){let e=V(r),t=Uint8Array.from(Fe(e.length));return st([t,e],t.length+e.length)}function B5(r){let e=nt(r);if(r=r.slice(Ce(e)),r.length!==e)throw new Error("inconsistent lengths");return M(r)}function pU(r){let e;r[0]==="Q"||r[0]==="1"?e=Ye(He.decode(`z${r}`)).bytes:e=le.parse(r).multihash.bytes;let t=Uint8Array.from(Fe(e.length));return st([t,e],t.length+e.length)}function mU(r){let e=fU.decode(r),t=Uint8Array.from(Fe(e.length));return st([t,e],t.length+e.length)}function gU(r){let e=nt(r),t=r.slice(Ce(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+M(t,"base64url")}function yU(r){let e=nt(r),t=r.slice(Ce(e));if(t.length!==e)throw new Error("inconsistent lengths");return M(t,"base58btc")}function wU(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=Xt.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=$5(n);return st([t,o],t.length+o.length)}function bU(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=Xt.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=$5(n);return st([t,o],t.length+o.length)}function PS(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=M(e,"base32"),o=RS(t);return`${n}:${o}`}function NS(r){r=K5(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=Ie(s);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(i++,i>=o.length)throw new xm("invalid address: "+r);if(a.path===!0){n=K5(o.slice(i).join("/")),e.push([a.code,U5(a.code,n)]),t.push([a.code,n]);break}let c=U5(a.code,o[i]);e.push([a.code,c]),t.push([a.code,M5(a.code,c)])}return{string:DS(t),bytes:vm(e),tuples:e,stringTuples:t,path:n}}function V5(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let i=nt(r,o),s=Ce(i),a=Ie(i),c=xU(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 new xm("Invalid address Uint8Array: "+M(r,"base16"));e.push([i,l]);let u=M5(i,l);if(t.push([i,u]),a.path===!0){n=u;break}}return{bytes:Uint8Array.from(r),string:DS(t),tuples:e,stringTuples:t,path:n}}function DS(r){let e=[];return r.map(t=>{let n=Ie(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),K5(e.join("/"))}function vm(r){return st(r.map(e=>{let t=Ie(e[0]),n=Uint8Array.from(Fe(t.code));return e.length>1&&e[1]!=null&&(n=st([n,e[1]])),n}))}function xU(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=nt(e instanceof Uint8Array?e:Uint8Array.from(e));return t+Ce(t)}}function K5(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}var xm=class extends Error{static name="ParseError";name="ParseError";constructor(e){super(`Error parsing address: ${e}`)}};var vU=Symbol.for("nodejs.util.inspect.custom"),q5=Symbol.for("@multiformats/js-multiaddr/multiaddr"),EU=[Ie("dns").code,Ie("dns4").code,Ie("dns6").code,Ie("dnsaddr").code],H5=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},Em=class r{bytes;#e;#t;#r;#o;[q5]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=V5(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=NS(e)}else if(ks(e))t=V5(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=Ie("tcp"),a=Ie("udp"),c=Ie("ip4"),l=Ie("ip6"),u=Ie("dns6"),d=Ie("ip6zone");for(let[m,g]of this.stringTuples())m===d.code&&(i=`%${g??""}`),EU.includes(m)&&(t=s.name==="tcp"?"tcp":"udp",o=443,n=`${g??""}${i}`,e=m===u.code?6:4),(m===s.code||m===a.code)&&(t=Ie(m).name==="tcp"?"tcp":"udp",o=parseInt(g??"")),(m===c.code||m===l.code)&&(t=Ie(m).name==="tcp"?"tcp":"udp",n=`${g??""}${i}`,e=m===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({},Ie(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>Ie(e).name)}tuples(){return this.#t.map(([e,t])=>t==null?[e]:[e,t])}stringTuples(){return this.#r.map(([e,t])=>t==null?[e]:[e,t])}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(vm(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===eu.p2p.code&&e.push([n,o]),n===eu["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?M(He.decode(`z${n}`),"base58btc"):M(le.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#o}equals(e){return ge(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(i=>i.resolvable);if(t==null)return[this];let n=tu.get(t.name);if(n==null)throw new H5(`no available resolver for ${t.name}`);return(await n(this,e)).map(i=>oe(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)}[vU](){return`Multiaddr(${this.#e})`}};var tu=new Map;function ks(r){return!!r?.[q5]}function oe(r){return new Em(r)}var SU=[Ie("tcp").code,Ie("dns").code,Ie("dnsaddr").code,Ie("dns4").code,Ie("dns6").code];function OS(r){return MS("sni",r)?.[1]}function LS(r){let e=MS("tcp",r)?.[1];return e==null?"":`:${e}`}function MS(r,e){let t;try{t=Ie(r).code}catch{return}for(let[n,o]of e)if(n===t&&o!=null)return[n,o]}function BS(r){return r.some(([e,t])=>e===Ie("tls").code)}function Po(r,e,t){let n=US[Ie(r).name];if(n==null)throw new Error(`Can't interpret protocol ${Ie(r).name}`);let o=n(e,t);return r===Ie("ip6").code?`[${o}]`:o}var US={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://${Po(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://${Po(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`${Po(t[0],t[1]??"",e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${Po(t[0],t[1]??"",e)}`},http:(r,e)=>{let t=BS(e),n=OS(e),o=LS(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=Po(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=Po(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 Po(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return Po(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Po(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=BS(e),n=OS(e),o=LS(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=Po(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=Po(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`}};function Sm(r,e){let n=oe(r).stringTuples(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let i=Ie(o[0]),s=US[i.name];if(s==null)throw new Error(`No interpreter found for ${i.name}`);let a=s(o[1]??"",n);return e?.assumeHttp!==!1&&SU.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 Am=class{url;#e=0;#t=0;#r=0;#o=0;#a=new Map;log;transformRequestInit;constructor(e,{logger:t,transformRequestInit:n}){this.url=e instanceof URL?e:new URL(e),this.transformRequestInit=n,this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}#l(e){let t=e.multihash.bytes;return Ht.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);if(a==null){this.#e++;let c={signal:i.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"},l=this.transformRequestInit!=null?await this.transformRequestInit(c):c;a=fetch(n.toString(),l).then(async u=>{if(this.log("GET %s %d",n,u.status),!u.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#o++,new Uint8Array(await u.arrayBuffer())}),this.#a.set(o,a)}return 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 AU(r,e,t){return r.filter(n=>{if(xS.matches(n)||e&&bS.matches(n))return t||xf.matches(n)?!0:Gr(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*_m(r,e,t,n,o,i={}){for await(let s of e.findProviders(r,i)){let a=AU(s.multiaddrs,n,o);if(a.length===0)continue;let c=Sm(a[0]);yield new Am(c,{logger:t,transformRequestInit:i.transformRequestInit})}}var j5=class extends Ga{routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??Im,this.allowLocal=t.allowLocal??Tm,this.transformRequestInit=t.transformRequestInit}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*_m(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})}toEvictionKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}};function FS(r,e){return new j5(r,e)}var Cm=class{allowInsecure;allowLocal;transformRequestInit;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??Im,this.allowLocal=t.allowLocal??Tm,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let o of _m(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})){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 FS({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var Im=!1,Tm=!1;function W5(r={}){return e=>new Cm(e,r)}async function*km(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 PU=Vt(Pm(),1);var Ro=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},Rm=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},ru=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},Nm=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},Dm=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},Om=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},_f=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var on;(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=()=>Et(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=_e((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=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(on||(on={}));var _U=In("ipns:utils"),$S=V("/ipns/");var IU=0,TU=18;function KS(r){let e;if(r.pubKey!=null)try{e=$t(r.pubKey)}catch(t){throw _U.error(t),t}if(e!=null)return e}function VS(r){let e=V("ipns-signature:");return st([e,r])}function If(r){return"signatureV1"in r?on.encode({value:V(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:V(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):on.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function ni(r){let e=on.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 Ro("Missing data or signatureV2");let t=HS(e.data),n=CU(t.Value),o=M(t.Validity);if(e.value!=null&&e.signatureV1!=null)return kU(e),{value:n,validityType:on.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:on.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 Tf(r){return st([$S,r.bytes])}function nu(r){let e=Ye(r.slice($S.length));if(!Lm(e,IU)&&!Lm(e,TU))throw new is("Multihash in IPNS key was not identity or sha2-256");return e}function HS(r){let e=Nn(r);if(e.ValidityType===0)e.ValidityType=on.ValidityType.EOL;else throw new ru("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 CU(r){let e=M(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${le.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${le.parse(e).toV1().toString()}`}catch{}throw new Dm("Value must be a valid content path starting with /")}function kU(r){if(r.data==null)throw new Om("Record data is missing");let e=HS(r.data);if(!ge(e.Value,r.value??new Uint8Array(0)))throw new Ro('Field "value" did not match between protobuf and CBOR');if(!ge(e.Validity,r.validity??new Uint8Array(0)))throw new Ro('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new Ro('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new Ro('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new Ro('Field "ttl" did not match between protobuf and CBOR')}function Lm(r,e){return r.code===e}var Eie=In("ipns"),Sie=5*60*1e9,RU="/ipns/",Aie=RU.length;var qS=Vt(Pm(),1);var Bm=In("ipns:validator"),NU=1024*10,DU=async(r,e)=>{let t=ni(e),n;try{let o=VS(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw Bm.error("record signature verification failed"),new Ro("Record signature verification failed");if(t.validityType===on.ValidityType.EOL){if(qS.default.fromString(t.validity).toDate().getTime()<Date.now())throw Bm.error("record has expired"),new Rm("record has expired")}else if(t.validityType!=null)throw Bm.error("the validity type is unsupported"),new ru("The validity type is unsupported");Bm("ipns record for %s is valid",t.value)};async function Mm(r,e){if(e.byteLength>NU)throw new Nm("The record is too large");let t=nu(r),n;Lm(t,0)&&(n=g1(t));let o=ni(e),i=KS(o)??n;if(i==null)throw new _f("Could not extract public key from IPNS record or routing key");let s=Tf(i.toMultihash());if(!ge(s,r))throw new _f("Embedded public key did not match routing key");await DU(i,e)}var Um=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*Cf(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),o="";for await(let i of r){if(typeof i=="string"&&(i=new TextEncoder().encode(i)),yl(i)&&(i=i.subarray()),o+=n.decode(i,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new Um("Incoming message too long");let s=o.split(t);o=s.pop()??"";for(let a=0;a<s.length;a++)yield JSON.parse(s[a])}o+=n.decode(),o!==""&&(yield JSON.parse(o))}var ou=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},No=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function OU(r){return r[Symbol.asyncIterator]!=null}function LU(r){if(OU(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var jS=LU;var WS=V("/ipns/");function GS(r){return ge(r.subarray(0,WS.byteLength),WS)}var Fm=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*Jr(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!GS(e))return;let o=nu(e),i=le.createV1(114,o),s=ni(t);await this.client.putIPNS(i,s,n)}async get(e,t){if(!GS(e))throw new ze("Not found");let n=nu(e),o=le.createV1(114,n);try{let i=await this.client.getIPNS(o,t);return If(i)}catch(i){throw i.name==="BadResponseError"?new ze("Not found"):i}}},$m=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await jS(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new ze("Not found")}async*getClosestPeers(e,t={}){}};var ar=In("delegated-routing-v1-http-api-client"),Km={concurrentRequests:4,timeout:3e4,cacheTTL:5*60*1e3,cacheName:"delegated-routing-v1-cache"},Vm=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new ti({concurrency:t.concurrentRequests??Km.concurrentRequests}),this.inFlightRequests=new Map,this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??Km.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new Fm(this),this.peerRouting=new $m(this),this.cacheName=t.cacheName??Km.cacheName,this.cacheTTL=t.cacheTTL??Km.cacheTTL}get[jo](){return this.contentRouting}get[Wo](){return this.peerRouting}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cacheTTL>0&&(this.cache=await globalThis.caches?.open(this.cacheName),this.cache!=null&&ar("cache enabled with ttl %d",this.cacheTTL)))}async stop(){this.httpQueue.clear(),this.shutDownController.abort(),await globalThis.caches?.delete(this.cacheName),this.started=!1}async*getProviders(e,t={}){ar("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=Ne([this.shutDownController.signal,n,t.signal]);let i=de(),s=de();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 c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l==null)throw new No("No response received");if(!l.ok)throw l.status===404?new ze("No matching records found"):l.status===422?new ou("Request does not conform to schema or semantic constraints"):new No(`Unexpected status code: ${l.status}`);if(l.body==null)throw new No("Routing response had no body");let u=l.headers.get("Content-Type");if(u==null)throw new No("No Content-Type header received");if(u?.startsWith("application/json")){let d=await l.json();for(let h of d.Providers){let m=this.#e(h);m!=null&&(yield m)}}else if(u.includes("application/x-ndjson"))for await(let d of Cf(km(l.body))){let h=this.#e(d);h!=null&&(yield h)}else throw new No(`Unsupported Content-Type: ${u}`)}catch(a){ar.error("getProviders errored:",a)}finally{o.clear(),s.resolve(),ar("getProviders finished: %c",e)}}async*getPeers(e,t={}){ar("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=Ne([this.shutDownController.signal,n,t.signal]);let i=de(),s=de();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 c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l.status===404)throw new ze("No matching records found");if(l.status===422)throw new ou("Request does not conform to schema or semantic constraints");if(l.body==null)throw new No("Routing response had no body");if(l.headers.get("Content-Type")==="application/json"){let d=await l.json();for(let h of d.Peers){let m=this.#e(h);m!=null&&(yield m)}}else for await(let d of Cf(km(l.body))){let h=this.#e(d);h!=null&&(yield h)}}catch(a){ar.error("getPeers errored:",a)}finally{o.clear(),s.resolve(),ar("getPeers finished: %c",e)}}async getIPNS(e,t={}){ar("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=Ne([this.shutDownController.signal,n,t.signal]);let i=de(),s=de();this.httpQueue.add(async()=>(i.resolve(),s.promise));let a=`${this.clientUrl}routing/v1/ipns/${e}`;try{await i.promise;let c={headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o},l=await this.#r(a,c);if(ar("getIPNS GET %s %d",a,l.status),l.status===404)throw new ze("No matching records found");if(l.status===422)throw new ou("Request does not conform to schema or semantic constraints");if(l.body==null)throw new No("GET ipns response had no body");let u=await l.arrayBuffer(),d=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await Mm(Tf(e.multihash),d),ni(d)}catch(c){throw ar.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),s.resolve(),ar("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){ar("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),i=Ne([this.shutDownController.signal,o,n.signal]);let s=de(),a=de();this.httpQueue.add(async()=>(s.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e}`;try{await s.promise;let l=If(t),u={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:i},d=await this.#r(c,u);if(ar("putIPNS PUT %s %d",c,d.status),d.status!==200)throw new No("PUT ipns response had status other than 200")}catch(l){throw ar.error("putIPNS PUT %s error:",c,l.stack),l}finally{i.clear(),a.resolve(),ar("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(oe)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:bt(e.ID),Addrs:n,Protocols:t}}catch(t){ar.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)}}async#r(e,t){let n=t.method??"GET",o=`${n}-${e}`;if(n==="GET"){let c=await this.cache?.match(e);if(c!=null){if(parseInt(c.headers.get("x-cache-expires")??"0",10)>Date.now())return ar("returning cached response for %s",o),c;await this.cache?.delete(e)}}let i=this.inFlightRequests.get(o);if(i!=null){let c=await i;return ar("deduplicating outgoing request for %s",o),c.clone()}let s=fetch(e,t).then(async c=>{if(this.cache!=null&&c.ok&&n==="GET"){let l=Date.now()+this.cacheTTL,u=new Headers(c.headers);u.set("x-cache-expires",l.toString());let d=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:u});await this.cache.put(e,d)}return c}).finally(()=>{this.inFlightRequests.delete(o)});return this.inFlightRequests.set(o,s),await s}};function zS(r,e={}){return new Vm(new URL(r),e)}function z5(){return{filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var XS="[a-fA-F\\d:]",Ps=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${XS})|(?<=${XS})(?=\\s|$))`:"",Do="(?: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}",jt="[a-fA-F\\d]{1,4}",Hm=`
|
|
4
4
|
(?:
|
|
5
|
-
(?:${
|
|
6
|
-
(?:${
|
|
7
|
-
(?:${
|
|
8
|
-
(?:${
|
|
9
|
-
(?:${
|
|
10
|
-
(?:${
|
|
11
|
-
(?:${
|
|
12
|
-
(?::(?:(?::${
|
|
5
|
+
(?:${jt}:){7}(?:${jt}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
|
|
6
|
+
(?:${jt}:){6}(?:${Do}|:${jt}|:)| // 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
|
|
7
|
+
(?:${jt}:){5}(?::${Do}|(?::${jt}){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
|
|
8
|
+
(?:${jt}:){4}(?:(?::${jt}){0,1}:${Do}|(?::${jt}){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
|
|
9
|
+
(?:${jt}:){3}(?:(?::${jt}){0,2}:${Do}|(?::${jt}){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
|
|
10
|
+
(?:${jt}:){2}(?:(?::${jt}){0,3}:${Do}|(?::${jt}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
|
|
11
|
+
(?:${jt}:){1}(?:(?::${jt}){0,4}:${Do}|(?::${jt}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
|
|
12
|
+
(?::(?:(?::${jt}){0,5}:${Do}|(?::${jt}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
|
|
13
13
|
)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
|
|
14
|
-
`.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),__=new RegExp(`(?:^${sn}$)|(?:^${Pd}$)`),C_=new RegExp(`^${sn}$`),k_=new RegExp(`^${Pd}$`),Dm=r=>r&&r.exact?__:new RegExp(`(?:${No(r)}${sn}${No(r)})|(?:${No(r)}${Pd}${No(r)})`,"g");Dm.v4=r=>r&&r.exact?C_:new RegExp(`${No(r)}${sn}${No(r)}`,"g");Dm.v6=r=>r&&r.exact?k_:new RegExp(`${No(r)}${Pd}${No(r)}`,"g");var Lm=Dm;function Nm(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function I7(){return!1}var{toString:P_}=Object.prototype;function Om(r){return P_.call(r)==="[object RegExp]"}var T7={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function Mm(r,e={}){if(!Om(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(T7).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?T7[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function Bm(r,e,{timeout:t}={}){try{return Nm(()=>Mm(r).test(e),{timeout:t})()}catch(n){if(I7(n))return!1;throw n}}var R_=15,D_=45,_7={timeout:400};function Um(r){return r.length>D_?!1:Bm(Lm.v6({exact:!0}),r,_7)}function C7(r){return r.length>R_?!1:Bm(Lm.v4({exact:!0}),r,_7)}var k7={http:"80",https:"443",ws:"80",wss:"443"},L_=["http","https","ws","wss"];function P7(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:i}=N_(r),a="/"+[O_(o,t),M_(i,n),B_(n)].filter(c=>!!c).reduce((c,l)=>c.concat(l),[]).join("/");return $(a)}function N_(r){let[e]=r.split(":");L_.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o}=new URL(r);if(o==null||o===""){let i=U_(e);i!=null&&(o=i),i==null&&t==="http:"&&(o="80")}return{scheme:e,hostname:n,port:o}}function O_(r,e){if(!(r==null||r==="")){if(C7(r))return["ip4",r];if(Um(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(Um(t))return["ip6",t]}return[e,r]}}function M_(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function B_(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function U_(r){if(!(r==null||r===""||k7[r]==null))return k7[r]}var F_=["https://trustless-gateway.link","https://4everland.io"],V_=2336;function $_(r){return r=r.toString(),{id:Qr(Q.createV1(V_,Jt.digest(N(r)))),multiaddrs:[P7(r)]}}var Fm=class{gateways;constructor(e={}){this.gateways=(e.gateways??F_).map(t=>$_(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function Vm(r={}){return new Fm(r)}var $m=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async cancelReprovide(e,t){await this.libp2p.contentRouting.cancelReprovide(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 Km(r){return new $m(r)}var Ac=class extends qn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(at.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(at.encode(e.multihash.bytes));if(t==null)throw new Pr;return t}has(e){return this.data.has(at.encode(e.multihash.bytes))}async delete(e){this.data.delete(at.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:Q.createV1(ri,ve(at.decode(e))),block:t}}};var tQ=hr("blockstore:core:tiered");var L7="SHARDING";function H_(r){return r[Symbol.asyncIterator]!=null}function q_(r){if(H_(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 Ri=q_;function z_(r){return r[Symbol.asyncIterator]!=null}function W_(r,e){return z_(r)?async function*(){yield*(await Ri(r)).sort(e)}():function*(){yield*Ri(r).sort(e)}()}var Rd=W_;var Gn=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 Rt(this.putMany(e,n)),e=[],await Rt(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=en(n,i=>i.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>en(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>Rd(o,i),n)),e.offset!=null){let o=0,i=e.offset;n=en(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=en(n,i=>i.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>en(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>Rd(o,i),n)),e.offset!=null){let o=e.offset,i=0;n=en(n,()=>i++>=o)}return e.limit!=null&&(n=uo(n,e.limit)),n}};var Di=class extends Gn{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 Pr;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 Ne(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new Ne(e)}};var NQ=new Ne(L7);var QQ=hr("datastore:core:tiered");var Dd=class extends Wu{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()}};function Ld(r){return r[Symbol.asyncIterator]!=null}var Nd=r=>{let e=ue(r),t=Be(e);return De(r,t),Nd.bytes=e,t};Nd.bytes=0;function O7(r,e){e=e??{};let t=e.lengthEncoder??Nd;function*n(o){let i=t(o.byteLength);i instanceof Uint8Array?yield i:yield*i,o instanceof Uint8Array?yield o:yield*o}return Ld(r)?async function*(){for await(let o of r)yield*n(o)}():function*(){for(let o of r)yield*n(o)}()}O7.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Nd;return new ee(t(r.byteLength),r)};var Od=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Md=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Bd=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},Ic=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var G_=8,Q_=1024*1024*4,Li;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(Li||(Li={}));var Hm=r=>{let e=yt(r);return Hm.bytes=ue(e),e};Hm.bytes=0;function Tc(r,e){let t=new ee,n=Li.LENGTH,o=-1,i=e?.lengthDecoder??Hm,s=e?.maxLengthLength??G_,a=e?.maxDataLength??Q_;function*c(){for(;t.byteLength>0;){if(n===Li.LENGTH)try{if(o=i(t),o<0)throw new Od("Invalid message length");if(o>a)throw new Md("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=Li.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new Bd("Message length length too long");break}throw l}if(n===Li.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=Li.LENGTH}}}return Ld(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Ic("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Ic("Unexpected end of input")}()}Tc.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 Tc(n,{...e??{},onLength:i=>{t=i}})};var qm=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 this.ended=!0,this.nextResult=e,this.haveNext.resolve(),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 et(this.readNext.promise,t?.signal,t)}};function M7(){return new qm}var Ud=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var zm=class extends Error{code;constructor(e,t){super(e),this.code=t}},Wm=class extends zm{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function Ni(r,e){let t=M7();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 ee;return{read:async(s,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((u,d)=>{c=()=>{d(new Wm("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(s==null){let{done:d,value:f}=await Promise.race([n.next(),l]);return d===!0?new ee:f}for(;o.byteLength<s;){let{value:d,done:f}=await Promise.race([n.next(),l]);if(f===!0)throw new Ud("unexpected end of input");o.append(d)}let u=o.sublist(0,s);return o.consume(s),u}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 Fd=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Vd=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},$d=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function An(r,e={}){let t=Ni(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=ue(e.maxDataLength));let n=e?.lengthDecoder??yt,o=e?.lengthEncoder??De;return{read:async s=>{let a=-1,c=new ee;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 Fd("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new $d("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new Vd("message length too long");return t.read(a,s)},write:async(s,a)=>{await t.write(new ee(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new ee(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function Gm(){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=Gm(),e=Gm();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var Ks=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function Kd(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function Qm(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Ut(r,...e){if(!Qm(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function Ym(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 U7(r,e){Ut(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function Xm(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}var Qn=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),F7=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),Y_=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!Y_)throw new Error("Non little-endian hardware is not supported");function X_(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function Hd(r){if(typeof r=="string")r=X_(r);else if(Qm(r))r=qd(r);else throw new Error("Uint8Array expected, got "+typeof r);return r}function V7(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function $7(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 Zm=(r,e)=>{function t(n,...o){if(Ut(n),r.nonceLength!==void 0){let u=o[0];if(!u)throw new Error("nonce / iv required");r.varSizeNonce?Ut(u):Ut(u,r.nonceLength)}let i=r.tagLength;i&&o[1]!==void 0&&Ut(o[1]);let s=e(n,...o),a=(u,d)=>{if(d!==void 0){if(u!==2)throw new Error("cipher output not supported");Ut(d)}},c=!1;return{encrypt(u,d){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,Ut(u),a(s.encrypt.length,d),s.encrypt(u,d)},decrypt(u,d){if(Ut(u),i&&u.length<i)throw new Error("invalid ciphertext length: smaller than tagLength="+i);return a(s.decrypt.length,d),s.decrypt(u,d)}}}return Object.assign(t,r),t};function jm(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error("invalid output length, expected "+r+", got: "+e.length);if(t&&!Z_(e))throw new Error("invalid output, must be aligned");return e}function Jm(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 Z_(r){return r.byteOffset%4===0}function qd(r){return Uint8Array.from(r)}function Yn(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var H7=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),j_=H7("expand 16-byte k"),J_=H7("expand 32-byte k"),eC=Qn(j_),tC=Qn(J_);function Y(r,e){return r<<e|r>>>32-e}function e3(r){return r.byteOffset%4===0}var zd=64,rC=16,q7=2**32-1,K7=new Uint32Array;function nC(r,e,t,n,o,i,s,a){let c=o.length,l=new Uint8Array(zd),u=Qn(l),d=e3(o)&&e3(i),f=d?Qn(o):K7,h=d?Qn(i):K7;for(let p=0;p<c;s++){if(r(e,t,n,u,s,a),s>=q7)throw new Error("arx: counter overflow");let g=Math.min(zd,c-p);if(d&&g===zd){let m=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let y=0,x;y<rC;y++)x=m+y,h[x]=f[x]^u[y];p+=zd;continue}for(let m=0,y;m<g;m++)y=p+m,i[y]=o[y]^l[m];p+=g}}function t3(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=V7({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return Kd(o),Kd(s),Xm(i),Xm(t),(a,c,l,u,d=0)=>{Ut(a),Ut(c),Ut(l);let f=l.length;if(u===void 0&&(u=new Uint8Array(f)),Ut(u),Kd(d),d<0||d>=q7)throw new Error("arx: counter overflow");if(u.length<f)throw new Error(`arx: output (${u.length}) is shorter than data (${f})`);let h=[],p=a.length,g,m;if(p===32)h.push(g=qd(a)),m=tC;else if(p===16&&t)g=new Uint8Array(32),g.set(a),g.set(a,16),m=eC,h.push(g);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);e3(c)||h.push(c=qd(c));let y=Qn(g);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(m,y,Qn(c.subarray(0,16)),y),c=c.subarray(16)}let x=16-o;if(x!==c.length)throw new Error(`arx: nonce must be ${x} or 16 bytes`);if(x!==12){let I=new Uint8Array(12);I.set(c,i?0:12-c.length),c=I,h.push(c)}let w=Qn(c);return nC(r,m,y,w,l,u,d,s),Yn(...h),u}}var xt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,r3=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=Hd(e),Ut(e,32);let t=xt(e,0),n=xt(e,2),o=xt(e,4),i=xt(e,6),s=xt(e,8),a=xt(e,10),c=xt(e,12),l=xt(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 u=0;u<8;u++)this.pad[u]=xt(e,16+2*u)}process(e,t,n=!1){let o=n?0:2048,{h:i,r:s}=this,a=s[0],c=s[1],l=s[2],u=s[3],d=s[4],f=s[5],h=s[6],p=s[7],g=s[8],m=s[9],y=xt(e,t+0),x=xt(e,t+2),w=xt(e,t+4),I=xt(e,t+6),M=xt(e,t+8),D=xt(e,t+10),R=xt(e,t+12),S=xt(e,t+14),A=i[0]+(y&8191),F=i[1]+((y>>>13|x<<3)&8191),L=i[2]+((x>>>10|w<<6)&8191),U=i[3]+((w>>>7|I<<9)&8191),K=i[4]+((I>>>4|M<<12)&8191),C=i[5]+(M>>>1&8191),k=i[6]+((M>>>14|D<<2)&8191),v=i[7]+((D>>>11|R<<5)&8191),E=i[8]+((R>>>8|S<<8)&8191),_=i[9]+(S>>>5|o),T=0,H=T+A*a+F*(5*m)+L*(5*g)+U*(5*p)+K*(5*h);T=H>>>13,H&=8191,H+=C*(5*f)+k*(5*d)+v*(5*u)+E*(5*l)+_*(5*c),T+=H>>>13,H&=8191;let q=T+A*c+F*a+L*(5*m)+U*(5*g)+K*(5*p);T=q>>>13,q&=8191,q+=C*(5*h)+k*(5*f)+v*(5*d)+E*(5*u)+_*(5*l),T+=q>>>13,q&=8191;let X=T+A*l+F*c+L*a+U*(5*m)+K*(5*g);T=X>>>13,X&=8191,X+=C*(5*p)+k*(5*h)+v*(5*f)+E*(5*d)+_*(5*u),T+=X>>>13,X&=8191;let ce=T+A*u+F*l+L*c+U*a+K*(5*m);T=ce>>>13,ce&=8191,ce+=C*(5*g)+k*(5*p)+v*(5*h)+E*(5*f)+_*(5*d),T+=ce>>>13,ce&=8191;let se=T+A*d+F*u+L*l+U*c+K*a;T=se>>>13,se&=8191,se+=C*(5*m)+k*(5*g)+v*(5*p)+E*(5*h)+_*(5*f),T+=se>>>13,se&=8191;let fe=T+A*f+F*d+L*u+U*l+K*c;T=fe>>>13,fe&=8191,fe+=C*a+k*(5*m)+v*(5*g)+E*(5*p)+_*(5*h),T+=fe>>>13,fe&=8191;let Ee=T+A*h+F*f+L*d+U*u+K*l;T=Ee>>>13,Ee&=8191,Ee+=C*c+k*a+v*(5*m)+E*(5*g)+_*(5*p),T+=Ee>>>13,Ee&=8191;let Oe=T+A*p+F*h+L*f+U*d+K*u;T=Oe>>>13,Oe&=8191,Oe+=C*l+k*c+v*a+E*(5*m)+_*(5*g),T+=Oe>>>13,Oe&=8191;let Me=T+A*g+F*p+L*h+U*f+K*d;T=Me>>>13,Me&=8191,Me+=C*u+k*l+v*c+E*a+_*(5*m),T+=Me>>>13,Me&=8191;let Ke=T+A*m+F*g+L*p+U*h+K*f;T=Ke>>>13,Ke&=8191,Ke+=C*d+k*u+v*l+E*c+_*a,T+=Ke>>>13,Ke&=8191,T=(T<<2)+T|0,T=T+H|0,H=T&8191,T=T>>>13,q+=T,i[0]=H,i[1]=q,i[2]=X,i[3]=ce,i[4]=se,i[5]=fe,i[6]=Ee,i[7]=Oe,i[8]=Me,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;Yn(n)}update(e){Ym(this);let{buffer:t,blockLen:n}=this;e=Hd(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(){Yn(this.h,this.r,this.buffer,this.pad)}digestInto(e){Ym(this),U7(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 oC(r){let e=(n,o)=>r(o).update(Hd(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var z7=oC(r=>new r3(r));function Q7(r,e,t,n,o,i=20){let s=r[0],a=r[1],c=r[2],l=r[3],u=e[0],d=e[1],f=e[2],h=e[3],p=e[4],g=e[5],m=e[6],y=e[7],x=o,w=t[0],I=t[1],M=t[2],D=s,R=a,S=c,A=l,F=u,L=d,U=f,K=h,C=p,k=g,v=m,E=y,_=x,T=w,H=I,q=M;for(let ce=0;ce<i;ce+=2)D=D+F|0,_=Y(_^D,16),C=C+_|0,F=Y(F^C,12),D=D+F|0,_=Y(_^D,8),C=C+_|0,F=Y(F^C,7),R=R+L|0,T=Y(T^R,16),k=k+T|0,L=Y(L^k,12),R=R+L|0,T=Y(T^R,8),k=k+T|0,L=Y(L^k,7),S=S+U|0,H=Y(H^S,16),v=v+H|0,U=Y(U^v,12),S=S+U|0,H=Y(H^S,8),v=v+H|0,U=Y(U^v,7),A=A+K|0,q=Y(q^A,16),E=E+q|0,K=Y(K^E,12),A=A+K|0,q=Y(q^A,8),E=E+q|0,K=Y(K^E,7),D=D+L|0,q=Y(q^D,16),v=v+q|0,L=Y(L^v,12),D=D+L|0,q=Y(q^D,8),v=v+q|0,L=Y(L^v,7),R=R+U|0,_=Y(_^R,16),E=E+_|0,U=Y(U^E,12),R=R+U|0,_=Y(_^R,8),E=E+_|0,U=Y(U^E,7),S=S+K|0,T=Y(T^S,16),C=C+T|0,K=Y(K^C,12),S=S+K|0,T=Y(T^S,8),C=C+T|0,K=Y(K^C,7),A=A+F|0,H=Y(H^A,16),k=k+H|0,F=Y(F^k,12),A=A+F|0,H=Y(H^A,8),k=k+H|0,F=Y(F^k,7);let X=0;n[X++]=s+D|0,n[X++]=a+R|0,n[X++]=c+S|0,n[X++]=l+A|0,n[X++]=u+F|0,n[X++]=d+L|0,n[X++]=f+U|0,n[X++]=h+K|0,n[X++]=p+C|0,n[X++]=g+k|0,n[X++]=m+v|0,n[X++]=y+E|0,n[X++]=x+_|0,n[X++]=w+T|0,n[X++]=I+H|0,n[X++]=M+q|0}function iC(r,e,t,n){let o=r[0],i=r[1],s=r[2],a=r[3],c=e[0],l=e[1],u=e[2],d=e[3],f=e[4],h=e[5],p=e[6],g=e[7],m=t[0],y=t[1],x=t[2],w=t[3];for(let M=0;M<20;M+=2)o=o+c|0,m=Y(m^o,16),f=f+m|0,c=Y(c^f,12),o=o+c|0,m=Y(m^o,8),f=f+m|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+u|0,x=Y(x^s,16),p=p+x|0,u=Y(u^p,12),s=s+u|0,x=Y(x^s,8),p=p+x|0,u=Y(u^p,7),a=a+d|0,w=Y(w^a,16),g=g+w|0,d=Y(d^g,12),a=a+d|0,w=Y(w^a,8),g=g+w|0,d=Y(d^g,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+u|0,m=Y(m^i,16),g=g+m|0,u=Y(u^g,12),i=i+u|0,m=Y(m^i,8),g=g+m|0,u=Y(u^g,7),s=s+d|0,y=Y(y^s,16),f=f+y|0,d=Y(d^f,12),s=s+d|0,y=Y(y^s,8),f=f+y|0,d=Y(d^f,7),a=a+c|0,x=Y(x^a,16),h=h+x|0,c=Y(c^h,12),a=a+c|0,x=Y(x^a,8),h=h+x|0,c=Y(c^h,7);let I=0;n[I++]=o,n[I++]=i,n[I++]=s,n[I++]=a,n[I++]=m,n[I++]=y,n[I++]=x,n[I++]=w}var sC=t3(Q7,{counterRight:!1,counterLength:4,allowShortKeys:!1}),aC=t3(Q7,{counterRight:!1,counterLength:8,extendNonceFn:iC,allowShortKeys:!1});var cC=new Uint8Array(16),W7=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(cC.subarray(t))},lC=new Uint8Array(32);function G7(r,e,t,n,o){let i=r(e,t,lC),s=z7.create(i);o&&W7(s,o),W7(s,n);let a=new Uint8Array(16),c=F7(a);Jm(c,0,BigInt(o?o.length:0),!0),Jm(c,8,BigInt(n.length),!0),s.update(a);let l=s.digest();return Yn(i,a),l}var Y7=r=>(e,t,n)=>({encrypt(i,s){let a=i.length;s=jm(a+16,s,!1),s.set(i);let c=s.subarray(0,-16);r(e,t,c,c,1);let l=G7(r,e,t,c,n);return s.set(l,a),Yn(l),s},decrypt(i,s){s=jm(i.length-16,s,!1);let a=i.subarray(0,-16),c=i.subarray(-16),l=G7(r,e,t,a,n);if(!$7(c,l))throw new Error("invalid tag");return s.set(i.subarray(0,-16)),r(e,t,s,s,1),Yn(l),s}}),n3=Zm({blockSize:64,nonceLength:12,tagLength:16},Y7(sC)),oX=Zm({blockSize:64,nonceLength:24,tagLength:16},Y7(aC));function Z7(r,e,t){return ai(r),t===void 0&&(t=new Uint8Array(r.outputLen)),Ao(r,qr(t),qr(e))}var o3=new Uint8Array([0]),X7=new Uint8Array;function j7(r,e,t,n=32){if(ai(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=X7);let i=new Uint8Array(o*r.outputLen),s=Ao.create(r,e),a=s._cloneInto(),c=new Uint8Array(s.outputLen);for(let l=0;l<o;l++)o3[0]=l+1,a.update(l===0?X7:c).update(t).update(o3).digestInto(c),i.set(c,r.outputLen*l),s._cloneInto(a);return s.destroy(),a.destroy(),c.fill(0),o3.fill(0),i.slice(0,n)}var i3={hashSHA256(r){return Ir(r.subarray())},getHKDF(r,e){let t=Z7(Ir,e,r),o=j7(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=La.utils.randomPrivateKey();return{publicKey:La.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:La.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return La.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return n3(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return n3(n,e,t).decrypt(r.subarray(),o)}};var J7=i3;function e9(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 Hs=r=>{let e=Be(2);return e[0]=r>>8,e[1]=r,e};Hs.bytes=2;var _c=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)};_c.bytes=2;function t9(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 s3(r,e){!e.enabled||!Ks||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${O(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${O(r.privateKey,"hex")}`)):e("Missing local static keys."))}function a3(r,e){!e.enabled||!Ks||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${O(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${O(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function r9(r,e){!e.enabled||!Ks||e(r?`REMOTE_STATIC_PUBLIC_KEY ${O(r.subarray(),"hex")}`:"Missing remote static public key.")}function c3(r,e){!e.enabled||!Ks||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${O(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function l3(r,e,t){!t.enabled||!Ks||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&O(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&O(e.k,"hex")}`))}function sr(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Be(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var qs=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var uC=0,dC=4294967295,fC="Cipherstate has reached maximum n, a new handshake must be performed",Wd=class{n;bytes;view;constructor(e=uC){this.n=e,this.bytes=ae(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>dC)throw new Error(fC)}};var Oi=ae(0),zs=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new Wd(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}},u3=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=N(t,"utf-8");this.h=hC(e,n),this.ck=this.h,this.cs=new zs(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new zs(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ee(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,Oi);return[new zs(this.crypto,e),new zs(this.crypto,t)]}},d3=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 u3(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()}},Cc=class extends d3{writeMessageA(e){return new ee(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ee(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ee(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new qs(`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 qs(`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 qs(`handshake stage 2 validation fail: ${t.message}`)}}};function hC(r,e){if(e.length<=32){let t=ae(32);return t.set(e),t}else return r.hash(e)}var Gd;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Gd||(Gd={}));var kc;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),Gd.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={identityKey:ae(0),identitySig:ae(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=Gd.codec().decode(t,t.uint32());break}default:{t.skipType(s&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(kc||(kc={}));async function f3(r,e,t){let n=await r.sign(n9(e));return kc.encode({identityKey:Ot(r.publicKey),identitySig:n,extensions:t})}async function h3(r,e,t){try{let n=kc.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=n9(e);if(!await o.verify(i,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new fl(n.message)}}function n9(r){let e=N("noise-libp2p-static-key:");return r instanceof Uint8Array?ke([e,r],e.length+r.length):(r.prepend(e),r)}async function o9(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await f3(i,a.publicKey,l),d=new Cc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});s3(d.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(d.writeMessageA(Oi),e),t.trace("Stage 0 - Initiator finished sending first message."),a3(d.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let f=d.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),c3(d.re,t),r9(d.rs,t),t.trace("Initiator going to check remote's signature...");let h=await h3(f,d.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(d.writeMessageC(u),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[p,g]=d.ss.split();return l3(p,g,t),{payload:h,encrypt:m=>p.encryptWithAd(Oi,m),decrypt:(m,y)=>g.decryptWithAd(Oi,m,y)}}async function i9(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await f3(i,a.publicKey,l),d=new Cc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});s3(d.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),d.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),c3(d.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(d.writeMessageB(u),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),a3(d.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let f=d.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let h=await h3(f,d.rs,c),[p,g]=d.ss.split();return l3(p,g,t),{payload:h,encrypt:m=>g.encryptWithAd(Oi,m),decrypt:(m,y)=>p.decryptWithAd(Oi,m,y)}}var a9=16;function c9(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 ee(Hs(s.byteLength),s)}}}function l9(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-a9<o)throw new Error("Invalid chunk");let s=n.sublist(o,i),a=n.subarray(o,i-a9);try{let c=r.decrypt(s,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var Qd=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??J7;this.crypto=e9(c),this.extensions=o,this.metrics=a?t9(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??ae(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Ae]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=An(e,{lengthEncoder:Hs,lengthDecoder:_c,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:Hs,lengthDecoder:_c,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 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 performHandshakeResponder(e,t,n,o){let i;try{i=await i9({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 ut(n,c9(t,this.metrics),i,s=>Tc(s,{lengthDecoder:_c}),l9(t,this.metrics),n),o}};function Yd(r={}){return e=>new Qd(e,r)}function Xd(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"}},Ws=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},Gs=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},Zd=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},jd=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},Jd=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},e1=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},Qs=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var u9=new Set([an.name,Ws.name,Gs.name,jd.name,Jd.name,e1.name,Qs.name]),Rc=256*1024,d9=16*1024*1024;var f9={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Rc,maxStreamWindowSize:d9,maxMessageSize:64*1024};function h9(r){if(r.keepAliveInterval<=0)throw new P("keep-alive interval must be positive");if(r.maxInboundStreams<0)throw new P("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams<0)throw new P("max outbound streams must be larger or equal 0");if(r.initialStreamWindowSize<Rc)throw new P("InitialStreamWindowSize must be larger or equal 256 kB");if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new P("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.maxStreamWindowSize>2**32-1)throw new P("MaxStreamWindowSize must be less than equal MAX_UINT32");if(r.maxMessageSize<1024)throw new P("MaxMessageSize must be greater than a kilobyte")}var Je;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Je||(Je={}));var We;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(We||(We={}));var MZ=Object.values(We).filter(r=>typeof r!="string"),p9=0,Rr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Rr||(Rr={}));var Oo=12;var m9=2**24;function pC(r){if(r[0]!==p9)throw new an("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*m9+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*m9+(r[9]<<16)+(r[10]<<8)+r[11]}}var t1=class{source;buffer;frameInProgress;constructor(e){this.source=mC(e),this.buffer=new ee,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===Je.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new Zd("decoding frame already in progress");if(this.buffer.length<Oo)return;let e=pC(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 mC(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 p3(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 g9(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function r1(r,e){let t=Xd(r).return?.();g9(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var gC=5e3;function m3(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Mo=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??gC,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 jo(`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);m3(o)&&await o}let n=()=>{r1(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 ee(o):o;let i=this.sendData(o,t);m3(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.status==="open"&&(this.log.trace("closing gracefully"),this.status="closing",await et(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 et(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await et(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await et(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();m3(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 pl("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 Dr;(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"})(Dr||(Dr={}));var n1=class extends Mo{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Dr.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=vi(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:Je.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:Je.WindowUpdate,flag:We.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|We.FIN;this.sendFrame({type:Je.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 Kt("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 Qs("Receive window exceeded");let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&We.ACK)===We.ACK&&this.state===Dr.SYNSent&&(this.state=Dr.Established),(e&We.FIN)===We.FIN&&this.remoteCloseWrite(),(e&We.RST)===We.RST&&this.reset()}getSendFlags(){switch(this.state){case Dr.Init:return this.state=Dr.SYNSent,We.SYN;case Dr.SYNReceived:return this.state=Dr.Established,We.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:Je.WindowUpdate,flag:e,streamID:this._id,length:o})}};var y9="/yamux/1.0.0",yC=500,o1=class{protocol=y9;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Ae]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new g3(this._components,{...this._init,...e})}},g3=class{protocol=y9;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={...f9,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),h9(this.config),this.closeController=new AbortController,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=Xd(n);if(a.return!=null){let c=a.return();wC(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},i,s;try{let a=new t1(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=Rr.NormalTermination}catch(a){u9.has(a.name)?(this.log?.error("protocol error in sink",a),i=Rr.ProtocolError):(this.log?.error("internal error in sink",a),i=Rr.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 mn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new mn("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,Dr.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new mn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new mn("Muxer closed locally");if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,i)=>{let s=()=>{i(new mn("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??Rr.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(yC);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??Rr.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 P("Stream already exists with that id");let i=new n1({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 Je.Ping:{this.handlePing(e);return}case Je.GoAway:{this.handleGoAway(i);return}default:throw new an("Invalid frame type")}else switch(e.type){case Je.Data:case Je.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new an("Invalid frame type")}}handlePing(e){if(e.flag===We.SYN)this.log?.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,We.ACK);else if(e.flag===We.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 Ws("ping not requested");if(this.activePing.id!==e)throw new Gs("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Rr[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&We.SYN)===We.SYN&&this.incomingStream(n);let s=this._streams.get(n);if(s===void 0){if(i===Je.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 Je.WindowUpdate:{s.handleWindowUpdate(e);return}case Je.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 P("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:Je.WindowUpdate,flag:We.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Je.WindowUpdate,flag:We.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,Dr.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===Je.Data){if(t===void 0)throw new an("Invalid frame");this.source.push(new ee(p3(e),t))}else this.source.push(p3(e))}sendPing(e,t=We.SYN){t===We.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:Je.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Rr.NormalTermination){this.log?.("sending GoAway reason=%s",Rr[e]),this.localGoAway=e,this.sendFrame({type:Je.GoAway,flag:0,streamID:0,length:e})}};function wC(r){return r!=null&&typeof r.then=="function"}function w9(r={}){return e=>new o1(e,r)}var bC=41;function i1(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===bC)return t7("2000::/3",t)}catch{}return!1}function s1(r){try{let[[e]]=r.stringTuples();return e===4||e===41}catch{}return!1}function Lr(r){try{if(!s1(r))return!1;let[[,e]]=r.stringTuples();return e==null?!1:Qt(e)??!1}catch{}return!0}function b9(r,e,t){let n,o;function i(){let a={signal:o.signal};if(t?.timeout!=null){let c=le([o.signal,AbortSignal.timeout(t.timeout)]);a.signal=c}Promise.resolve().then(async()=>{await r(a)}).catch(()=>{}).finally(()=>{o.signal.aborted||(n=setTimeout(i,e))})}let s=!1;return{setInterval:a=>{e=a,n!=null&&(clearTimeout(n),n=setTimeout(i,e))},setTimeout:a=>{t==null&&(t={}),t.timeout=a},start:()=>{s||(s=!0,o=new AbortController,o.signal,t?.runImmediately===!0?queueMicrotask(()=>{i()}):n=setTimeout(i,e))},stop:()=>{clearTimeout(n),o?.abort(),s=!1}}}function Ge(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 x9="libp2p",E9="autonat",v9="1.0.0";var $e;(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=()=>qe(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=()=>qe(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let u;l.codec=()=>(u==null&&(u=ne((d,f,h={})=>{if(h.lengthDelimited!==!1&&f.fork(),d.id!=null&&(f.uint32(10),f.bytes(d.id)),d.addrs!=null)for(let p of d.addrs)f.uint32(18),f.bytes(p);h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={addrs:[]},g=f==null?d.len:d.pos+f;for(;d.pos<g;){let m=d.uint32();switch(m>>>3){case 1:{p.id=d.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(d.bytes());break}default:{d.skipType(m&7);break}}}return p})),u),l.encode=d=>re(d,l.codec()),l.decode=(d,f)=>te(d,l.codec(),f)})(i=r.PeerInfo||(r.PeerInfo={}));let s;(function(l){let u;l.codec=()=>(u==null&&(u=ne((d,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),d.peer!=null&&(f.uint32(10),r.PeerInfo.codec().encode(d.peer,f)),h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={},g=f==null?d.len:d.pos+f;for(;d.pos<g;){let m=d.uint32();switch(m>>>3){case 1:{p.peer=r.PeerInfo.codec().decode(d,d.uint32(),{limits:h.limits?.peer});break}default:{d.skipType(m&7);break}}}return p})),u),l.encode=d=>re(d,l.codec()),l.decode=(d,f)=>te(d,l.codec(),f)})(s=r.Dial||(r.Dial={}));let a;(function(l){let u;l.codec=()=>(u==null&&(u=ne((d,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),d.status!=null&&(f.uint32(8),r.ResponseStatus.codec().encode(d.status,f)),d.statusText!=null&&(f.uint32(18),f.string(d.statusText)),d.addr!=null&&(f.uint32(26),f.bytes(d.addr)),h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={},g=f==null?d.len:d.pos+f;for(;d.pos<g;){let m=d.uint32();switch(m>>>3){case 1:{p.status=r.ResponseStatus.codec().decode(d);break}case 2:{p.statusText=d.string();break}case 3:{p.addr=d.bytes();break}default:{d.skipType(m&7);break}}}return p})),u),l.encode=d=>re(d,l.codec()),l.decode=(d,f)=>te(d,l.codec(),f)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=ne((l,u,d={})=>{d.lengthDelimited!==!1&&u.fork(),l.type!=null&&(u.uint32(8),r.MessageType.codec().encode(l.type,u)),l.dial!=null&&(u.uint32(18),r.Dial.codec().encode(l.dial,u)),l.dialResponse!=null&&(u.uint32(26),r.DialResponse.codec().encode(l.dialResponse,u)),d.lengthDelimited!==!1&&u.ldelim()},(l,u,d={})=>{let f={},h=u==null?l.len:l.pos+u;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:d.limits?.dial});break}case 3:{f.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:d.limits?.dialResponse});break}default:{l.skipType(p&7);break}}}return f})),c),r.encode=l=>re(l,r.codec()),r.decode=(l,u)=>te(l,r.codec(),u)})($e||($e={}));var IC=4,TC=8,a1=class{components;protocol;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;started;log;topologyId;dialResults;findPeers;addressFilter;connectionThreshold;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:auto-nat"),this.started=!1,this.protocol=`/${t.protocolPrefix??x9}/${E9}/${v9}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??20,this.connectionThreshold=t.connectionThreshold??80,this.maxMessageSize=t.maxMessageSize??8192,this.dialResults=new Map,this.findPeers=b9(this.findRandomPeers.bind(this),6e4),this.addressFilter=rr(1024)}[Symbol.toStringTag]="@libp2p/autonat";[Ae]=["@libp2p/autonat"];get[dr](){return["@libp2p/identify"]}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 - %e",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.topologyId=await this.components.registrar.register(this.protocol,{onConnect:(e,t)=>{this.verifyExternalAddresses(t).catch(n=>{this.log.error("could not verify addresses - %e",n)})}}),this.findPeers.start(),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.topologyId!=null&&await this.components.registrar.unhandle(this.topologyId),this.dialResults.clear(),this.findPeers.stop(),this.started=!1}allAddressesAreVerified(){return this.components.addressManager.getAddressesWithMetadata().every(e=>e.expires>Date.now()?!0:e.verified)}async findRandomPeers(e){if(this.allAddressesAreVerified())return;let t=le([AbortSignal.timeout(1e4),e?.signal]);try{this.log("starting random walk to find peers to run AutoNAT");for await(let n of this.components.randomWalk.walk({signal:t})){if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable %s",n.id,n.multiaddrs.map(o=>o.toString()).join(", "));continue}try{this.log.trace("dial random peer %p",n.id),await this.components.connectionManager.openConnection(n.multiaddrs,{signal:t})}catch{}if(this.allAddressesAreVerified()){this.log("stopping random walk, all addresses are verified");return}if(!this.hasConnectionCapacity()){this.log("stopping random walk, too close to max connections");return}}}catch{}}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout);let n=Ge(e.stream,{maxDataLength:this.maxMessageSize}).pb($e);try{let o=await n.read({signal:t}),i=await this.handleAutonatMessage(o,e.connection,{signal:t});await n.write(i,{signal:t}),await n.unwrap().unwrap().close({signal:t})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.stream.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(d=>d.toOptions().host),i=e.dial;if(i==null)return this.log.error("dial was missing from message"),{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.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:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let d=ve(a.id);s=it(d)}catch(d){return this.log.error("invalid PeerId - %e",d),{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.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:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(d=>$(d)).filter(d=>{let f=d.toOptions();return Lr(d)?!1:f.host!==t.remoteAddr.toOptions().host?(this.log.trace("not dialing %a - target host did not match remote host %a",d,t.remoteAddr),!1):o.includes(f.host)?!1:this.components.transportManager.dialTransportForMultiaddr(d)==null?(this.log.trace("not dialing %a - transport unsupported",d),!1):!0}).map(d=>(d.getPeerId()==null&&(d=d.encapsulate(`/p2p/${s.toString()}`)),d));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",s),{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(d=>d.toString()).join(", "),s);let l="",u=c[0];for await(let d of c){let f;u=d;try{if(f=await this.components.connectionManager.openConnection(d,n),!f.remoteAddr.equals(d))throw this.log.error("tried to dial %a but dialed %a",d,f.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",s,d),{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.OK,addr:f.remoteAddr.decapsulateCode(oe("p2p").code).bytes}}}catch(h){this.log.error("could not dial %p - %e",s,h),l=h.message}finally{f!=null&&await f.close()}}return{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:u.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((o,i)=>o.type==="observed"&&i.type!=="observed"?1:i.type==="observed"&&o.type!=="observed"?-1:0).filter(o=>!(!(o.expires<Date.now())||o.multiaddr.toOptions().family===6&&(!t||!i1(o.multiaddr))||Lr(o.multiaddr)));for(let o of n){let i=o.multiaddr.toString(),s=this.dialResults.get(i);if(s!=null){if(s.networkSegments.includes(e)){this.log.trace("%a already has a network segment result from %s",s.multiaddr,e);continue}if(s.queue.size>10){this.log.trace("%a already has enough peers queued",s.multiaddr);continue}}if(s==null){let a=o.expires<Date.now();if(a&&this.addressFilter.remove?.(i),this.addressFilter.has(i))continue;this.addressFilter.add(i),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",i),s={multiaddr:o.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:X2(),queue:new gt({concurrency:3,maxSize:50}),type:o.type,lastVerified:o.lastVerified},this.dialResults.set(i,s)}return s}}removeOutdatedMultiaddrResults(){let e=new Set(this.components.addressManager.getAddressesWithMetadata().filter(({expires:t})=>t<Date.now()).map(({multiaddr:t})=>t.toString()));for(let t of this.dialResults.keys())e.has(t)||(this.log.trace("remove results for %a",t),this.dialResults.delete(t))}async verifyExternalAddresses(e){if(!this.isStarted())return;this.removeOutdatedMultiaddrResults();let n=(await this.components.peerStore.get(e.remotePeer)).addresses.some(({multiaddr:s})=>s.toOptions().family===6),o=this.getNetworkSegment(e.remoteAddr),i=this.getFirstUnverifiedMultiaddr(o,n);if(i==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){i.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",i.multiaddr),this.confirmAddress(i)):this.log("skipping verifying %a because we are too close to the connection limit",i.multiaddr);return}i.queue.add(async s=>{await this.askPeerToVerify(e,o,s)},{peerId:e.remotePeer,multiaddr:i.multiaddr}).catch(s=>{i?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,i?.multiaddr,s)})}async askPeerToVerify(e,t,n){let o=this.dialResults.get(n.multiaddr.toString());if(o==null){this.log("%a was verified while %p was queued",n.multiaddr,e.remotePeer);return}let i=AbortSignal.timeout(this.timeout);this.log.trace("asking %p to verify multiaddr %s",e.remotePeer,n.multiaddr);let s=await e.newStream(this.protocol,{signal:i});try{let a=Ge(s).pb($e),[,c]=await Promise.all([a.write({type:$e.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:i}),a.read({signal:i})]);if(c.type!==$e.MessageType.DIAL_RESPONSE||c.dialResponse==null){this.log("invalid autonat response from %p - %j",e.remotePeer,c);return}let l=c.dialResponse.status;if(this.log.trace("autonat response from %p for %a is %s",e.remotePeer,n.multiaddr,l),l!==$e.ResponseStatus.OK&&l!==$e.ResponseStatus.E_DIAL_ERROR)return;if(o=this.dialResults.get(n.multiaddr.toString()),o==null){this.log.trace("peer reported %a as %s but there is no result object",n.multiaddr,c.dialResponse.status);return}if(o.networkSegments.includes(t)){this.log.trace("%a results included network segment %s",n.multiaddr,t);return}if(o.result!=null){this.log.trace("already resolved result for %a, ignoring response from",n.multiaddr,e.remotePeer);return}if(o.verifyingPeers.has(e.remotePeer)){this.log.trace("peer %p has already verified %a, ignoring response",e.remotePeer,n.multiaddr);return}if(o.verifyingPeers.add(e.remotePeer),o.networkSegments.push(t),l===$e.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===$e.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===IC&&this.confirmAddress(o),o.failure===TC&&this.unconfirmAddress(o)}finally{try{await s.close({signal:i})}catch(a){s.abort(a)}}}hasConnectionCapacity(){let t=this.components.connectionManager.getConnections().length,n=this.components.connectionManager.getMaxConnections();return t/n*100<this.connectionThreshold}confirmAddress(e){this.log("%s address %a is externally dialable",e.type,e.multiaddr),this.components.addressManager.confirmObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!0,e.queue.abort()}unconfirmAddress(e){this.log("%s address %a is not externally dialable",e.type,e.multiaddr),this.components.addressManager.removeObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!1,e.queue.abort()}getNetworkSegment(e){let t=e.toOptions();return t.family===4?t.host.split(".")[0].padStart(3,"0"):t.host.split(":")[0].padStart(4,"0")}};function S9(r={}){return e=>new a1(e,r)}var _C=z("dns4"),CC=z("dns6"),kC=z("dnsaddr"),Bi=nt(z("dns"),kC,_C,CC),u1=nt(z("ip4"),z("ip6")),Ys=nt(ie(u1,z("tcp")),ie(Bi,z("tcp"))),d1=ie(u1,z("udp")),PC=ie(d1,z("utp")),RC=ie(d1,z("quic")),DC=ie(d1,z("quic-v1")),y3=nt(ie(Ys,z("ws")),ie(Bi,z("ws"))),c1=nt(ie(y3,z("p2p")),y3),w3=nt(ie(Ys,z("wss")),ie(Bi,z("wss")),ie(Ys,z("tls"),z("ws")),ie(Bi,z("tls"),z("ws"))),l1=nt(ie(w3,z("p2p")),w3),b3=nt(ie(Ys,z("http")),ie(u1,z("http")),ie(Bi,z("http"))),x3=nt(ie(Ys,z("https")),ie(u1,z("https")),ie(Bi,z("https"))),A9=ie(d1,z("webrtc-direct"),z("certhash")),_9=nt(ie(A9,z("p2p")),A9),I9=ie(DC,z("webtransport"),z("certhash"),z("certhash")),C9=nt(ie(I9,z("p2p")),I9),k9=nt(ie(c1,z("p2p-webrtc-star"),z("p2p")),ie(l1,z("p2p-webrtc-star"),z("p2p")),ie(c1,z("p2p-webrtc-star")),ie(l1,z("p2p-webrtc-star"))),eJ=nt(ie(c1,z("p2p-websocket-star"),z("p2p")),ie(l1,z("p2p-websocket-star"),z("p2p")),ie(c1,z("p2p-websocket-star")),ie(l1,z("p2p-websocket-star"))),P9=nt(ie(b3,z("p2p-webrtc-direct"),z("p2p")),ie(x3,z("p2p-webrtc-direct"),z("p2p")),ie(b3,z("p2p-webrtc-direct")),ie(x3,z("p2p-webrtc-direct"))),Ui=nt(y3,w3,b3,x3,k9,P9,Ys,PC,RC,Bi,_9,C9),tJ=nt(ie(Ui,z("p2p-stardust"),z("p2p")),ie(Ui,z("p2p-stardust"))),Bo=nt(ie(Ui,z("p2p")),k9,P9,_9,C9,z("p2p")),T9=nt(ie(Bo,z("p2p-circuit"),Bo),ie(Bo,z("p2p-circuit")),ie(z("p2p-circuit"),Bo),ie(Ui,z("p2p-circuit")),ie(z("p2p-circuit"),Ui),z("p2p-circuit")),R9=()=>nt(ie(T9,R9),T9),Mi=R9(),D9=nt(ie(Mi,Bo,Mi),ie(Bo,Mi),ie(Mi,Bo),Mi,Bo);var rJ=nt(ie(Mi,z("webrtc"),z("p2p")),ie(Mi,z("webrtc")),ie(Ui,z("webrtc"),z("p2p")),ie(Ui,z("webrtc")),z("webrtc"));function L9(r){function e(t){let n;try{n=$(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:L9(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:L9(e),partialMatch:e}}function z(r){let e=r;function t(o){let i;try{i=$(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 LC="bootstrap",NC=50,OC=1e3,E3=class extends me{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??OC,this.list=[];for(let n of t.list){if(!D9.matches(n)){this.log.error("Invalid multiaddr");continue}let o=$(n),i=o.getPeerId();if(i==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let s={id:Ve(i),multiaddrs:[o]};this.list.push(s)}this._init=t}[Xo]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Ae]=["@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??LC]:{value:this._init.tagValue??NC,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 N9(r){return e=>new E3(e,r)}var Dc;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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:ae(0),payloadType:ae(0),payload:ae(0),signature:ae(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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Dc||(Dc={}));var f1=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var xr=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=O9(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 f1("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:Ot(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return j(this.marshal(),e.marshal())}async validate(e){let t=O9(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},O9=(r,e,t)=>{let n=N(r),o=De(n.byteLength),i=De(e.length),s=De(t.length);return new ee(o,n,i,e,s,t)};function M9(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",U9=Uint8Array.from([3,1]);var Lc;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=ne((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:ae(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.multiaddr=i.bytes();break}default:{i.skipType(u&7);break}}}return c})),o),n.encode=i=>re(i,n.codec()),n.decode=(i,s)=>te(i,n.codec(),s)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=ne((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:ae(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=>re(n,r.codec()),r.decode=(n,o)=>te(n,r.codec(),o)})(Lc||(Lc={}));var Yt=class r{static createFromProtobuf=e=>{let t=Lc.decode(e),n=it(ve(t.peerId)),o=(t.addresses??[]).map(s=>$(s.multiaddr)),i=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:i})};static DOMAIN=B9;static CODEC=U9;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||!M9(this.multiaddrs,e.multiaddrs))}};var v3=1e3,F9=60*v3,V9=290;var OJ=2*60*F9,$9=1,h1=2e3,K9=100;var Nc=`${io}-circuit-relay`,MJ=`${io}-circuit-relay-source`,BJ=2*F9,UJ=BigInt(1<<17),Fi="/libp2p/circuit/relay/0.2.0/hop",S3="/libp2p/circuit/relay/0.2.0/stop",FJ=30*v3,VJ=30*v3,A3=300,H9=4096,q9=.001;var Uo;(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=()=>qe(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((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),Xs.codec().encode(o.peer,i)),o.reservation!=null&&(i.uint32(26),p1.codec().encode(o.reservation,i)),o.limit!=null&&(i.uint32(34),Zs.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(40),Et.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=Xs.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.reservation=p1.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=Et.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,i)=>te(o,r.codec(),i)})(Uo||(Uo={}));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=()=>qe(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((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),Xs.codec().encode(o.peer,i)),o.limit!=null&&(i.uint32(26),Zs.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(32),Et.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=Xs.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=Et.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,i)=>te(o,r.codec(),i)})(In||(In={}));var Xs;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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:ae(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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Xs||(Xs={}));var p1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),g1.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=g1.codec().decode(t,t.uint32(),{limits:o.limits?.voucher});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(p1||(p1={}));var Zs;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Zs||(Zs={}));var Et;(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"})(Et||(Et={}));var I3;(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"})(I3||(I3={}));(function(r){r.codec=()=>qe(I3)})(Et||(Et={}));var m1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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:ae(0),peer:ae(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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(m1||(m1={}));var g1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),m1.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:ae(0),payloadType:ae(0),signature:ae(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=m1.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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(g1||(g1={}));var Oc=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},y1=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},w1=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function T3(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Mc=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}},b1=Re(ge(sd.matchers[0],pe("p2p-circuit"))),x1=Re(pe("p2p-circuit"));function _3(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 u=e.abort.bind(e);e.abort=p=>{u(p),h(!0)};let d=e.sink.bind(e);e.sink=async p=>{try{await d(ut(p,g=>vi(g,m=>i?.(m))))}catch(g){g.type!=="aborted"&&s.error("%s error in sink",t,g)}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 E1=class extends me{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,this.discoveryController.signal}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(Fi,{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,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(Fi)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let i=z9(n),s=z9(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 gt({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=le([this.discoveryController.signal,AbortSignal.timeout(5e3)]);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 z9(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(O(e)).getTime()}var C3=class extends me{connectionManager;addressManager;reservationStore;listeningAddrs;log;listenTimeout;reservationId;relay;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.addressManager=e.addressManager,this.reservationStore=e.reservationStore,this.listeningAddrs=[],this.listenTimeout=t.listenTimeout??h1,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.forEach(t=>{this.addressManager.removeObservedAddr(t)}),this.listeningAddrs=[],this.safeDispatchEvent("listening"))};_onAddRelayPeer=e=>{let{details:t}=e.detail;t.type!=="configured"&&t.id===this.reservationId&&this.addedRelay(e.detail)};async listen(e){if(x1.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(b1.exactMatch(e)){this.log("listen on specific relay server %a",e);let t=AbortSignal.timeout(this.listenTimeout);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.addedRelay(i)}}else throw new Jo(`Could not listen on p2p-circuit address "${e}"`)}getAddrs(){return[...this.listeningAddrs.values()].flat()}updateAnnounceAddrs(){}async close(){this.reservationStore.cancelReservations(),this.listeningAddrs=[],this.reservationStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),queueMicrotask(()=>{this.safeDispatchEvent("close")})}addedRelay(e){this.log("relay peer added %p",e.relay),this.relay=e.relay,this.listeningAddrs=e.details.reservation.addrs.map(t=>$(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function W9(r){return new C3(r)}var G9="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var Q9=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=G9[t[r]&63];return e};var MC=60*1e3*10,BC=60*1e3*5,UC=30*1e3,v1=class extends me{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 ft,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??K9,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??h1,this.started=!1,this.relayFilter=rr(100),this.reserveQueue=new gt({concurrency:t?.reservationConcurrency??$9,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(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}})})),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=Q9();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 Jo("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new w1("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 Jo("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),g=!1;if(p.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),p.map(m=>m.id).includes(i.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),g=!0),g&&T3(i.reservation.expire)>MC)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 Oc("Not making reservation on discovered relay because we do not need any more relays");let s=AbortSignal.timeout(this.reservationCompletionTimeout);let a=await this.connectionManager.openConnection(e,{signal:s});if(or.matches(a.remoteAddr))throw new y1("not creating reservation over relayed connection");let c=await this.#e(a,{signal:s}),l=T3(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let u=Math.min(Math.max(l-BC,UC),Math.pow(2,31)-1),d=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)})},u),f;if(t==="discovered"){let p=this.pendingReservations.pop();if(p==null)throw new Oc("Made reservation on relay but did not need any more discovered relays");f={timeout:d,reservation:c,type:t,connection:a.id,id:p}}else f={timeout:d,reservation:c,type:t,connection:a.id};this.reservations.set(e,f),await this.peerStore.merge(e,{tags:{[Nc]:{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(Fi,t),i=Ge(n).pb(Uo);this.log.trace("send RESERVE to %p",e.remotePeer),await i.write({type:Uo.Type.RESERVE},t);let s;try{this.log.trace("reading 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 %o",s),s.status===Et.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let u=$(l);u.getPeerId()==null&&(u=u.encapsulate(`/p2p/${e.remotePeer}`)),u=$(u.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(u.toString())}return s.reservation.addrs=[...c].map(l=>$(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:{[Nc]: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=rr(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var FC=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach($)}catch{return!1}return!0},Y9={maxInboundStopStreams:A3,maxOutboundStopStreams:A3,stopTimeout:3e4},S1=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;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??Y9.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??Y9.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new E1(e,{filter:t.discoveryFilter??tp(H9,q9)}),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 v1(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";[Ae]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[dr](){return this.discovery!=null?["@libp2p/identify"]:[]}[so]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,await this.registrar.handle(S3,e=>{let t=this.upgrader.createInboundAbortSignal(this.shutdownController.signal);this.onStop(e,t).catch(n=>{this.log.error("error while handling STOP protocol",n),e.stream.abort(n)}).finally(()=>{t.clear()})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await mt(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await kt(this.discovery,this.reservationStore),await this.registrar.unhandle(S3),this.started=!1}async dial(e,t){if(e.protoCodes().filter(h=>h===V9).length!==1){let h="Invalid circuit relay address";throw this.log.error(h,e),new Rn(h)}let n=e.toString().split("/p2p-circuit"),o=$(n[0]),i=$(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 Rn(`C${h}`)}let c=Ve(s),l=Ve(a),d=this.connectionManager.getConnections(c)[0];d==null?(await this.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new W("circuit-relay:open-connection")),d=await this.connectionManager.openConnection(c,t)):t.onProgress?.(new W("circuit-relay:reuse-connection"));let f;try{t.onProgress?.(new W("circuit-relay:open-hop-stream")),f=await d.newStream(Fi,t);let h=Ge(f),p=h.pb(Uo);t.onProgress?.(new W("circuit-relay:write-connect-message")),await p.write({type:Uo.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[$(i).bytes]}},t),t.onProgress?.(new W("circuit-relay:read-connect-response"));let g=await p.read(t);if(g.status!==Et.OK)throw new he(`failed to connect via relay with status ${g?.status?.toString()??"undefined"}`);let m=new Mc(g.limit),y=_3({stream:h.unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger,onDataRead:m.onData,onDataWrite:m.onData});return this.log("new outbound relayed connection %a",y.remoteAddr),await this.upgrader.upgradeOutbound(y,{...t,limits:m.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 W9({peerId:this.peerId,connectionManager:this.connectionManager,addressManager:this.addressManager,reservationStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>b1.exactMatch(t)||x1.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>or.exactMatch(t))}async onStop({connection:e,stream:t},n){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(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",d)}let o=Ge(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:Et.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:Et.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!FC(i)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:In.Type.STATUS,status:Et.MALFORMED_MESSAGE},{signal:n}),await t.close({signal:n});return}let s=it(ve(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:Et.PERMISSION_DENIED},{signal:n}),await t.close({signal:n});return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:In.Type.STATUS,status:Et.OK},{signal:n});let a=new Mc(i.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.addressManager.getAddresses()[0],u=_3({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,logger:this.logger,onDataRead:a.onData,onDataWrite:a.onData});this.log("new inbound relayed connection %a",u.remoteAddr),await this.upgrader.upgradeInbound(u,{limits:a.getLimits(),signal:n}),this.log("%s connection %a upgraded","inbound",u.remoteAddr)}};function k3(r={}){return e=>new S1(e,r)}var X9=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},VC=new WeakMap;function $C({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(X9());let i,s,a,c=r??clearTimeout,l=()=>{c(i),a(X9())},u=()=>{o&&o.removeEventListener("abort",l)},d=new Promise((f,h)=>{s=()=>{u(),f(n)},a=h,i=(e??setTimeout)(s,t)});return o&&o.addEventListener("abort",l,{once:!0}),VC.set(d,()=>{c(i),i=null,s()}),d}}var KC=$C(),A1=KC;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=()=>qe(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((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=>re(o,r.codec()),r.decode=(o,i)=>te(o,r.codec(),i)})(cn||(cn={}));function P3(r,e){return or.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:mc.matches(r)?!0:K5.matches(r)?Qt(r.toOptions().host)===!1:!1}var Z9=1024*4,j9=100,I1={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},T1=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??I1.timeout,this.retries=t.retries??I1.retries,this.maxInboundStreams=t.maxInboundStreams??I1.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??I1.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[dr]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Bc,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{or.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Bc,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(Bc),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([Bc],{signal:o.signal,runOnLimitedConnection:!0});let i=Ge(t,{maxDataLength:Z9}).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(d=>d.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 he("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 he("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 A1(l/2),this.log("B dialing",c);let u=await this.connectionManager.openConnection(c,{signal:o.signal,priority:j9,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,u.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=>P3(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(or.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=Ge(e,{maxDataLength:Z9}).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 he("DCUtR message type was incorrect");if(i.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new he("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 he("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 he("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:j9,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=$(n);if(!P3(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Bc="/libp2p/dcutr";function J9(r={}){return e=>new T1(e,r)}var _1=globalThis.CustomEvent??Event;async function*ln(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,i=[],s=J(),a=J(),c=!1,l,u=!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),u)break;let g={done:!1};i.push(g),p().then(m=>{g.done=!0,g.ok=!0,g.value=m,o.dispatchEvent(new _1("task-complete"))},m=>{g.done=!0,g.err=m,o.dispatchEvent(new _1("task-complete"))})}c=!0,o.dispatchEvent(new _1("task-complete"))}catch(p){l=p,o.dispatchEvent(new _1("task-complete"))}});function d(){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 u=!0,s.resolve(),p.err;s.resolve()}}function*h(){for(;d();)for(let p=0;p<i.length;p++)if(i[p].done){let g=i[p];if(i.splice(p,1),p--,g.ok)yield g.value;else throw u=!0,s.resolve(),g.err;s.resolve()}}for(;;){if(d()||(a=J(),await a.promise),l!=null)throw l;if(n?yield*f():yield*h(),c&&i.length===0)break}}var ey="0.1.0",ty="id",ry="id/push",ny="1.0.0",oy="1.0.0";var Fo;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Fo||(Fo={}));var ar={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function iy(r){if(r!=null&&r.length>0)try{return $(r)}catch{}}function zC(r,e){return e??r.userAgent}async function C1(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new he("message was null or undefined");let i={};if(o.listenAddrs.length>0&&(i.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:$(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 he("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 xr.openAndCertify(c,Yt.DOMAIN),u=Yt.createFromProtobuf(l.payload),d=Qr(l.publicKey.toCID());if(!u.peerId.equals(d))throw new he("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(u.peerId))throw new he("signing key does not match remote PeerId");let f;try{f=await r.get(u.peerId)}catch(h){if(h.name!=="NotFoundError")throw h}if(f!=null&&(i.metadata=f.metadata,f.peerRecordEnvelope!=null)){let h=await xr.createFromProtobuf(f.peerRecordEnvelope),p=Yt.createFromProtobuf(h.payload);p.seqNumber>=u.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",p.seqNumber,u.seqNumber),u=p,c=f.peerRecordEnvelope)}i.peerRecordEnvelope=c,i.addresses=u.multiaddrs.map(h=>({isCertified:!0,multiaddr:h})),s={seq:u.seqNumber,addresses:u.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=N(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=N(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=>$(c)),observedAddr:o.observedAddr==null?void 0:$(o.observedAddr),protocols:o.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var js=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??ar.timeout,this.maxInboundStreams=t.maxInboundStreams??ar.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??ar.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??ar.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??ar.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??ar.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??ar.protocolPrefix}/${ey}`,agentVersion:zC(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:N(this.host.agentVersion),ProtocolVersion:N(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 k1=class extends js{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${ry}/${oy}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??ar.concurrency,(t.runOnSelfUpdate??ar.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})})}[Ae]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(u=>u.decapsulateCode(oe("p2p").code)),t=new Yt({peerId:this.peerId,multiaddrs:e}),n=await xr.seal(t,this.privateKey),o=this.registrar.getProtocols(),i=await this.peerStore.get(this.peerId),s=O(i.metadata.get("AgentVersion")??N(this.host.agentVersion)),a=O(i.metadata.get("ProtocolVersion")??N(this.host.protocolVersion)),c=this;async function*l(){for(let u of c.connectionManager.getConnections())(await c.peerStore.get(u.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let f,h=AbortSignal.timeout(c.timeout);try{f=await u.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await Ge(f,{maxDataLength:c.maxMessageSize}).pb(Fo).write({listenAddrs:e.map(g=>g.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 Rt(ln(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 Ge(n,{maxDataLength:this.maxMessageSize}).pb(Fo).read(o);await n.close(o),await C1(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 WC=41,P1=class extends js{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${ty}/${ny}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??ar.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(i=>{i.name!==Pn.name&&this.log.error("error during identify trigged by connection:open",i)})})}[Ae]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);t={...t,signal:o}}try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let i=await Ge(n,{maxDataLength:this.maxMessageSize}).pb(Fo).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 he("public key was missing from identify message");let a=rt(o),c=Qr(a.toCID());if(!e.remotePeer.equals(c))throw new he("identified peer does not match the expected peer");if(this.peerId.equals(c))throw new he("identified peer is our own peer id?");return this.maybeAddObservedAddress(s),this.log("identify completed for peer %p and protocols %o",c,i),C1(this.peerStore,this.events,this.log,e,n)}maybeAddObservedAddress(e){let t=iy(e);if(t==null)return;if(this.log.trace("our observed address was %a",t),Lr(t)){this.log.trace("our observed address was private");return}if(t.stringTuples()[0][0]===WC&&!i1(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}Ti.exactMatch(t)||(this.log.trace("storing the observed address"),this.addressManager.addObservedAddr(t))}async handleProtocol(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);try{let i=await this.peerStore.get(this.peerId),s=this.addressManager.getAddresses().map(u=>u.decapsulateCode(oe("p2p").code)),a=i.peerRecordEnvelope;if(s.length>0&&a==null){let u=new Yt({peerId:this.peerId,multiaddrs:s});a=(await xr.seal(u,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;$5.matches(t.remoteAddr)||(c=void 0),await Ge(n).pb(Fo).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:Ot(this.privateKey.publicKey),listenAddrs:s.map(u=>u.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 sy(r={}){return e=>new P1(e,r)}function ay(r={}){return e=>new k1(e,r)}var Js=1e3,R3=60*Js,R1=60*R3,cy=36*R1,ly="/ipfs/kad/1.0.0",uy=48*R1;var dy=24*R1,fy=10,hy=16384,py=R1,Jte=10*Js;var D1=20,ea=3,my=5*R3,gy=Js,yy=5*Js,wy=5*R3,by=30*Js,xy=180*Js,D3=`${io}-kad-dht`;var Uc;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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:ae(0),value:ae(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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Uc||(Uc={}));function Ey(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 vy(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 vt=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:Ey(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=vy(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"}},L1=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},N1=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},O1=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var Sy;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Sy||(Sy={}));var xe;(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"})(xe||(xe={}));var M1;(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"})(M1||(M1={}));(function(r){r.codec=()=>qe(M1)})(xe||(xe={}));var ra;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(ra||(ra={}));var L3;(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"})(L3||(L3={}));(function(r){r.codec=()=>qe(L3)})(ra||(ra={}));var ta;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),ra.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:ae(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=ra.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(ta||(ta={}));var Xn;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&M1[t.type]!==0&&(n.uint32(8),xe.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),ta.codec().encode(i,n);if(t.providers!=null)for(let i of t.providers)n.uint32(74),ta.codec().encode(i,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={type:xe.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=xe.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(ta.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(ta.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Xn||(Xn={}));function N3(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 B1(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function Er(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function O3(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function Vc(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function M3(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function Ay(r,e,t){if(t.length===0)throw new P("No records given");let o=O(e).split("/");if(o.length<3)throw new P("Record key does not have a selector function");let i=r[o[1].toString()];if(i==null)throw new O1(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function QC(r,e){return 0}var Iy={pk:QC};async function na(r,e){let t=e.key,o=O(t).split("/");if(o.length<3)return;let i=r[o[1].toString()];if(i==null)throw new P(`No validator available for key type "${o[1]}"`);await i(t,e.value)}var YC=async(r,e)=>{if(!(r instanceof Uint8Array))throw new P('"key" must be a Uint8Array');if(r.byteLength<5)throw new P("Invalid public key record");if(O(r.subarray(0,4))!=="/pk/")throw new P("key was not prefixed with /pk/");let n=rt(e),o=r.slice(4);if(!j(o,n.toMultihash().bytes))throw new P("public key does not match passed in key")},Ty={pk:YC};var XC=N("/pk/");function _y(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=Qt(n);return o==null?!0:!o})}}async function $o(r){return(await Qe.digest(r)).digest}async function St(r){return $o(r.toMultihash().bytes)}function Ko(r,e){return new Ne(`${r}/${O(e,"base32")}`,!1)}function Cy(r){return ke([XC,r.toMultihash().bytes])}function ky(r){return O(r.subarray(0,4))==="/pk/"}function Py(r){let e=ve(r.subarray(4));return it(e)}function B3(r,e){let t=new Date;return new vt(r,e,t).serialize()}var ZC=290,jC=54,JC=55,ek=56,tk=4,rk=41;function Ry(r){let e=r.stringTuples();for(let t of e)if(t[0]===ZC)return!1;if(e[0][0]===jC||e[0][0]===JC||e[0][0]===ek)return!0;if(e[0][0]===tk||e[0][0]===rk){let t=Qt(`${e[0][1]}`);return t==null||!t}return!1}function U1(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:Q.createV1(ri,ve(N(n,"base32"))),peerId:Ve(t)}}function F1(r,e,t){let n=typeof e=="string"?e:O(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new Ne(o.join("/"))}function V1(r){return new Date(yt(r))}function Vi(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 $1(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 K1=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.datastorePrefix}/record`,this.validators=n,this.selectors=o,this.peerRouting=i,this.queryManager=s,this.network=a,this.get=e.metrics?.traceFunction("libp2p.kadDHT.get",this.get.bind(this),{optionsIndex:1})??this.get,this.put=e.metrics?.traceFunction("libp2p.kadDHT.put",this.put.bind(this),{optionsIndex:2})??this.put}async getLocal(e){this.log("getLocal %b",e);let t=Ko(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=vt.deserialize(n);return await na(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let i=B3(e,n);for(let{value:s,from:a}of t){if(j(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let u=Ko(this.datastorePrefix,e);this.log(`Storing corrected record for key ${u.toString()}`),await this.components.datastore.put(u,i.subarray())}catch(u){this.log.error("Failed error correcting self",u)}continue}let c=!1,l={type:xe.PUT_VALUE,key:e,record:i};for await(let u of this.network.sendRequest(a,l,o))u.name==="PEER_RESPONSE"&&u.record!=null&&j(u.record.value,vt.deserialize(i).value)&&(c=!0),yield u;c||(yield Er({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=B3(e,t),i=Ko(this.datastorePrefix,e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray()),yield*ut(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>jt(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:xe.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let u of this.network.sendRequest(a.peer.id,l,n))c.push(u),u.name==="PEER_RESPONSE"&&(u.record!=null&&j(u.record.value,vt.deserialize(o).value)||c.push(Er({from:a.peer.id,error:new Vo("Value not put correctly")},n)));return c}),s=>ln(s,{ordered:!1,concurrency:ea}),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=Ay(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 Ce("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 Vc({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,{...t,signal:s}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield Vc({from:i,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function Dy(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function $c(r){if(r.id==null)throw new Error("Invalid peer in message");let e=ve(r.id);return{id:it(e),multiaddrs:(r.multiaddrs??[]).map(t=>$(t))}}var H1=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,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PROVIDER"&&(u.providers??=[],u.providers.push(...l.providers.map(d=>d.id.toString()))),u)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(u.providers??=[],u.providers.push(l.from.toString())),u)})??this.provide}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:xe.ADD_PROVIDER,key:o,providers:[Dy({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 u of this.network.sendMessage(c.peer.id,i,n))u.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,c.peer.id),s++),l.push(u)}catch(u){this.log.error("error sending provide record to peer %p",c.peer.id,u),l.push(Er({from:c.peer.id,error:u},n))}return l};yield*ut(this.peerRouting.getClosestPeers(o,n),c=>jt(c,l=>a(l)),c=>ln(c,{ordered:!1,concurrency:ea}),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 u=[];for(let d of a.slice(0,n))try{let f=await this.components.peerStore.get(d);u.push({id:d,multiaddrs:f.addresses.map(({multiaddr:h})=>h)})}catch(f){if(f.name!=="NotFoundError")throw f;this.log("no peer store entry for %p",d)}if(yield Fc({from:this.components.peerId,messageType:xe.GET_PROVIDERS,providers:u},t),yield O3({from:this.components.peerId,providers:u},t),o+=u.length,o>=n)return}let c=async function*({peer:u,signal:d}){let f={type:xe.GET_PROVIDERS,key:i};yield*s.network.sendRequest(u,f,{...t,signal:d})},l=new Wt(a);for await(let u of this.queryManager.run(i,c,t))if(yield u,u.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",u.providers.length,e,u.closer.length);let d=[];for(let f of u.providers)l.has(f.id)||(l.add(f.id),d.push(f));if(d.length>0&&(yield O3({from:u.from,providers:d},t),o+=d.length,o>=n))return}}};var oa=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 ok=1.2,ik=2,sk=2e3,un=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new oa(e.interval??5e3),this.failure=new oa(e.interval??5e3),this.next=new oa(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??ik,this.timeoutMultiplier=e.timeoutMultiplier??ok,this.minTimeout=e.minTimeout??sk,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=le([e.signal,n]);return 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 q1=class extends me{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 un({...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`)},this.sendRequest=e.metrics?.traceFunction("libp2p.kadDHT.sendRequest",this.sendRequest.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendMessage}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 P("Message type was missing");this.log("sending %s to %p",t.type,e),yield M3({peer:e},n),yield N3({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($c),providers:c.providers.map($c),record:c.record==null?void 0:vt.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 Er({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 P("Message type was missing");this.log("sending %s to %p",t.type,e),yield M3({peer:e},n),yield N3({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 Er({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await Ge(e).write(t,Xn,n)}async _writeReadMessage(e,t,n){let o=Ge(e);await o.write(t,Xn,n);let i=await o.read(Xn,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:$c(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:$c(s)})}),i}};function Ho(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 St(e.id);this.addWithKadId(e,t)}addWithKadId(e,t){if(this.peerDistances.find(i=>i.peer.id.equals(e.id))!=null)return;let n={peer:e,distance:sr(this.originDhtKey,t)},o=!1;for(let i=0;i<this.peerDistances.length;i++){let s=Ho(this.peerDistances[i].distance,n.distance);if(s===0||s===1){o=!0,this.peerDistances.splice(i,0,n);break}}o||this.peerDistances.push(n),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await St(e),n=sr(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return Ho(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var z1=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`),this.findPeer=e.metrics?.traceFunction("libp2p.kadDHT.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.kadDHT.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}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:xe.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=Cy(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 Vc({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 B1({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:xe.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 u=l.closer.find(d=>d.id.equals(e));u!=null&&(yield B1({from:l.from,peer:u},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}n||(yield Er({from:this.peerId,error:new Ce("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await $o(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",O(e,"base32"),c);let u={type:xe.FIND_NODE,key:e};yield*i.network.sendRequest(c,u,{...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 B1({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 Er({from:o.from,error:new Vo(s)},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new N1("invalid record received");await na(this.validators,new vt(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=[];try{let c=ve(e),l=it(c),u=await this.peerStore.get(l);n.push({id:u.id,multiaddrs:u.addresses.map(({multiaddr:d})=>d)})}catch{}let o=await $o(e),i=this.routingTable.closestPeers(o),s=await St(t),a=sr(s,o);for(let c of i){let l=await St(c),u=sr(l,o);if(Ho(u,a)===-1)try{let d=await this.peerStore.get(c);n.push({id:c,multiaddrs:d.addresses.map(({multiaddr:f})=>f)})}catch(d){if(d.name!=="NotFoundError")throw d}}return n.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",n.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),n}};var W1=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=F1(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{this.log("get providers for %c",e);let n=await this.loadProviders(e);return this.log("got %d providers for %c",n.size,e),[...n.keys()]}finally{t()}}async writeProviderEntry(e,t,n=new Date){let o=F1(this.datastorePrefix,e,t),i=De(n.getTime());await this.datastore.put(o,i)}async loadProviders(e){let t=new ft,n=F1(this.datastorePrefix,e);for await(let o of this.datastore.query({prefix:n.toString()})){let{peerId:i}=U1(o.key);t.set(i,V1(o.value))}return t}};async function*Ly(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:i,alpha:s,pathIndex:a,numPaths:c,queryFuncTimeout:l,log:u,peersSeen:d,connectionManager:f}=r,h=new Ht({concurrency:s,sort:(m,y)=>Ho(m.options.distance,y.options.distance)}),p=await $o(e);function g(m,y){if(m==null)return;d.add(m);let x=sr(y,p);h.add(async()=>{let w=[o];l!=null&&w.push(AbortSignal.timeout(l));let I=le(w);try{for await(let M of i({...r,key:e,peer:m,signal:I,pathIndex:a,numPaths:c})){if(I.aborted)return;if(M.name==="PEER_RESPONSE")for(let D of M.closer){if(d.has(D.id)){u.trace("already seen %p in query",D.id);continue}if(n.equals(D.id)){u("not querying ourselves");continue}if(!await f.isDialable(D.multiaddrs)){u("not querying undialable peer");continue}let R=await St(D.id),S=sr(R,p);if(Ho(S,x)!==-1){u.trace("skipping %p as they are not closer to %b than %p",D.id,e,m);continue}u.trace("querying closer peer %p",D.id),g(D.id,R)}h.safeDispatchEvent("completed",{detail:M})}}catch(M){if(!o.aborted)return Er({from:m,error:M},r)}finally{I.clear()}},{distance:x}).catch(w=>{u.error(w)})}g(t,await St(t));try{for await(let m of h.toGenerator({signal:o}))m!=null&&(yield m)}catch(m){throw o.aborted?new L1("Query aborted"):m}}var G1=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??D1,this.alpha=t.alpha??ea,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.shutDownController=new AbortController,this.shutDownController.signal,this.running=!1}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutDownController=new AbortController,this.shutDownController.signal,void 0)}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(xy);n={...n,signal:c}}let o=new AbortController,i=le([this.shutDownController.signal,o.signal,n.signal]);o.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+O(e,"base58btc")),a=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial query-self query before continuing"),await et(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await $o(e),l=this.routingTable.closestPeers(c),u=l.slice(0,Math.min(this.disjointPaths,l.length));if(l.length===0){s.error("Running query with no peers");return}let d=new Wt,f=u.map((h,p)=>Ly({...n,key:e,startingPeer:h,ourPeerId:this.peerId,signal:i,query:t,pathIndex:p,numPaths:u.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:s,peersSeen:d,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let h of qt(...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 ak(r){return r[Symbol.asyncIterator]!=null}function ck(r){if(ak(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 Q1=ck;var lk=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 uk(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:u}=lk(r),d=(...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)u(h,d);for(let h of t.rejectionEvents)u(h,f)};for(let h of a)l(h,d);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=Xr(o,{milliseconds:t.timeout});return i.cancel=n,i}return o}function Ny(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=uk(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}var Y1=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??D1,this.interval=t.interval??my,this.initialInterval=t.initialInterval??gy,this.queryTimeout=t.queryTimeout??yy,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=$1(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);e.push(n)}let t=le(e);this.controller.signal;try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await Ny(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 ut(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>uo(i,this.count),async i=>Q1(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 X1=class extends me{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 Ht({concurrency:t.concurrency??fy,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new un({...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??dy,this.maxQueueSize=t.maxQueueSize??hy,this.validity=t.validity??uy,this.interval=t.interval??py,this.contentRouting=t.contentRouting,this.lock=t.lock,this.running=!1,this.reprovide=$1(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,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}=U1(t.key),i=V1(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 Rt(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var dk=20,fk=5e3,hk="kad-close",pk=50,Z1=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??fk,this.peerSetSize=t.peerSetSize??dk,this.closeTagName=t.closeTagName??hk,this.closeTagValue=t.closeTagValue??pk,this.closestPeers=new Wt,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await St(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 Wt(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},[D3]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[D3]:void 0}})})])}};function Kc(r){return Array.isArray(r?.peers)}var j1=class{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e){this.prefixLength=e.prefixLength??Oy,this.kBucketSize=e.kBucketSize??U3,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfOldContactsToPing??My,this.lastPingThreshold=e.lastPingThreshold??By,this.ping=e.ping,this.verify=e.verify,this.onAdd=e.onAdd,this.onRemove=e.onRemove,this.addingPeerMap=new ft,this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e){this.localPeer={peerId:e,kadId:await St(e),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await St(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(!gk(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.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*jt(n.peers,o=>o.id)}count(){function e(t){if(Kc(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(Kc(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+O(sr(e,t),"base16"))}_determineBucket(e){let t=O(e,"base2");function n(o,i=0){return Kc(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=>j(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)O(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));mk(e,t,n)}};function mk(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function gk(r,e){return r.lastPing<Date.now()-e}var U3=20,Oy=6;var yk=20,wk=100,My=3;var bk=20,xk=100,Uy="kad-peer",Ek=1,By=6e5,vk=!0,Sk=1e3,J1=class extends me{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??Uy,this.peerTagValue=t.peerTagValue??Ek,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??vk,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??Sk,this.pingOldContactQueue=new gt({concurrency:t.pingOldContactConcurrency??bk,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??xk}),this.pingOldContactTimeout=new un({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new gt({concurrency:t.pingNewContactConcurrency??yk,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??wk}),this.pingNewContactTimeout=new un({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new j1({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 Z1(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 mt(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(Uy)],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 kt(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=le([c,a?.signal]);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 ln(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=le([n,t?.signal]);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:xe.PING},t))if(o.type===ef.PEER_RESPONSE)return o.messageType===xe.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 St(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 St(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(Kc(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 Fy=[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 tf=15,rf=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??wy,this.refreshQueryTimeout=s??by,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);let s=await Q1(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>tf&&(e=tf);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=zt(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=ve(o);return it(i)}async _makePeerId(e,t,n){if(n>tf)throw new Error(`Cannot generate peer ID for common prefix length greater than ${tf}`);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=Fy[c],u=new ArrayBuffer(34),d=new DataView(u,0,u.byteLength);return d.setUint8(0,Qe.code),d.setUint8(1,32),d.setUint32(2,l,!1),new Uint8Array(d.buffer,d.byteOffset,d.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=sr(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var nf=class{peerId;providers;peerStore;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.peerId=e.peerId,this.providers=t.providers,this.peerStore=e.peerStore}async handle(e,t){if(t.key==null||t.key.length===0)throw new he("Missing key");let n;try{n=Q.decode(t.key)}catch{throw new he("Invalid CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),this.log("%p asked us, %p to store provider record for for %c",e,this.peerId,n),await Promise.all(t.providers.map(async o=>{let i=ve(o.id),s=it(i),a=o.multiaddrs.map(c=>$(c));if(!e.equals(s)){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,a),await this.providers.addProvider(n,s),await this.peerStore.merge(s,{multiaddrs:a})}))}};var of=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 he("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);j(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(oe("p2p").code))});let o={type:xe.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 sf=class{peerId;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.peerId=e.peerId,this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new he("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=Q.decode(t.key)}catch{throw new he("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([Ri(jt(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:u})=>u)}})),this.peerRouting.getCloserPeersOffline(t.key,this.peerId)]),s={type:xe.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:i.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)})),providers:o.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))};return this.log("got %s providers %s closerPeers",s.providers.length,s.closer.length),s}async _getAddresses(e){return[]}};var af=class{peerStore;datastore;peerRouting;log;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.datastorePrefix=`${t.datastorePrefix}/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 he("Invalid key");let o={type:xe.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(ky(n)){this.log("is public key");let a=Py(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Ce("No public key found in key book");c=Ot(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new vt(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=Ko(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=vt.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>cy){await this.datastore.delete(t);return}return o}};var cf=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 lf=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.datastorePrefix}/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 he(o)}try{let o=vt.deserialize(t.record);await na(this.validators,o),o.timeReceived=new Date;let i=Ko(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 uf=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={[xe.GET_VALUE.toString()]:new af(e,t),[xe.PUT_VALUE.toString()]:new lf(e,t),[xe.FIND_NODE.toString()]:new of(e,t),[xe.ADD_PROVIDER.toString()]:new nf(e,t),[xe.GET_PROVIDERS.toString()]:new sf(e,t),[xe.PING.toString()]:new cf(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,s=this;await ut(n,a=>Dn(a),async function*(a){for await(let c of a){let l=Xn.decode(c);t=l.type,s.log("incoming %s from %p",l.type,i);let u=await s.handleMessage(i,l);u!=null&&(yield Xn.encode(u))}},a=>Vr(a),n)}).catch(n=>{this.log.error("error handling %s RPC message from %p - %e",t,e.connection.remotePeer,n)})}};var df=class extends me{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 F3=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await Rt(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 Rt(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 Ce("Could not find value for key")}},V3=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 Ce("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},Ak=32,Ik=64,ff=class extends me{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??ly,this.kBucketSize=t.kBucketSize??20,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??Ak,this.maxOutboundStreams=t.maxOutboundStreams??Ik,this.peerInfoMapper=t.peerInfoMapper??_y;let a=Ei();this.providers=new W1(e,{...t.providers,logPrefix:n,datastorePrefix:o,lock:a}),this.validators={...Ty,...t.validators},this.selectors={...Iy,...t.selectors},this.network=new q1(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:i}),this.routingTable=new J1(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 G1(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:n,metricsPrefix:i,initialQuerySelfHasRun:c,routingTable:this.routingTable}),this.peerRouting=new z1(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new K1(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new H1(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new rf(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new uf(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:i,datastorePrefix:o,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new df(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new Y1(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:c,routingTable:this.routingTable,operationMetrics:s}),this.reprovider=new X1(e,{...t.reprovide,logPrefix:n,metricsPrefix:i,datastorePrefix:o,contentRouting:this.contentRouting,lock:a,operationMetrics:s}),this.network.addEventListener("peer",l=>{let u=l.detail;this.onPeerConnect(u).catch(d=>{this.log.error("could not add %p to routing table",u.id,d)}),this.dispatchEvent(new CustomEvent("peer",{detail:u}))}),this.topologyListener.addEventListener("peer",l=>{let u=l.detail;Promise.resolve().then(async()=>{let d=await this.components.peerStore.get(u),f={id:u,multiaddrs:d.addresses.map(({multiaddr:h})=>h),protocols:d.protocols};await this.onPeerConnect(f)}).catch(d=>{this.log.error("could not add %p to routing table - %e",u,d)})}),this.dhtPeerRouting=new V3(this),this.dhtContentRouting=new F3(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",l=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let u=l.detail.peer.addresses.some(({multiaddr:f})=>Ry(f)),d=this.getMode();u&&d==="client"?await this.setMode("server"):d==="server"&&!u&&await this.setMode("client")}).catch(u=>{this.log.error("error setting dht server mode",u)})}),this.get=Vi(this.get.bind(this),s,"GET_VALUE"),this.findProviders=Vi(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=Vi(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=Vi(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=Vi(this.provide.bind(this),s,"PROVIDE"),this.put=Vi(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[Ae]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[dr]=["@libp2p/identify"];get[hn](){return this.dhtContentRouting}get[pn](){return this.dhtPeerRouting}get[Xo](){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 mt(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await mt(this.querySelf))}async stop(){this.running=!1,await kt(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 ef;(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"})(ef||(ef={}));function Vy(r={}){return e=>new ff(e,r)}var Yy=Br(Qy(),1),aa=Yy.default;var Xw=Br(ow(),1);var ca={};Xe(ca,{create:()=>Hk,derivedEmptyPasswordKey:()=>mf});var mf={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function Hk(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=tr.get();t*=8;async function c(d,f){let h=a.getRandomValues(new Uint8Array(i)),p=a.getRandomValues(new Uint8Array(n)),g={name:e,iv:p};typeof f=="string"&&(f=N(f));let m;if(f.length===0){m=await a.subtle.importKey("jwk",mf,{name:"AES-GCM"},!0,["encrypt"]);try{let x={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(x,w,{name:e,length:t},!0,["encrypt"])}catch{m=await a.subtle.importKey("jwk",mf,{name:"AES-GCM"},!0,["encrypt"])}}else{let x={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(x,w,{name:e,length:t},!0,["encrypt"])}let y=await a.subtle.encrypt(g,m,d);return ke([h,g.iv,new Uint8Array(y)])}async function l(d,f){let h=d.subarray(0,i),p=d.subarray(i,i+n),g=d.subarray(i+n),m={name:e,iv:p};typeof f=="string"&&(f=N(f));let y;if(f.length===0)try{let w={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,I,{name:e,length:t},!0,["decrypt"])}catch{y=await a.subtle.importKey("jwk",mf,{name:"AES-GCM"},!0,["decrypt"])}else{let w={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,I,{name:e,length:t},!0,["decrypt"])}let x=await a.subtle.decrypt(m,y,g);return new Uint8Array(x)}return{encrypt:c,decrypt:l}}var ye=Br(iw());function $i(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 zo(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 u=a-1;u>=0;u--){let d=Math.pow(2,u*e);l[i-u-1]=Math.floor(o/d),o-=l[i-u-1]*d}return c}s*=Math.pow(2,e)}return new ArrayBuffer(0)}function wf(...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 H3(){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=$i(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,$i(i,8)-n}function sw(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=zo(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=zo(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 aw(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 cr(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 gse=Math.log(2);function bf(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function q3(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 ro(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 qc=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return q3(this.items)}},Hc=[new Uint8Array([1])],cw="0123456789";var ua="",dn=new ArrayBuffer(0),z3=new Uint8Array(0),zc="EndOfContent",uw="OCTET STRING",dw="BIT STRING";function no(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):z3}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(!ro(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",dn)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:ye.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var jn=class{constructor({blockLength:e=0,error:t=ua,warnings:n=[],valueBeforeDecode:o=z3}={}){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)}}};jn.NAME="baseBlock";var Ft=class extends jn{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'")}};Ft.NAME="valueBlock";var xf=class extends no(jn){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):z3,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",dn}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=zo(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(!ro(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),u=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===u){u+=255;let f=new Uint8Array(u);for(let h=0;h<l.length;h++)f[h]=l[h];l=this.valueHexView=new Uint8Array(u)}}this.blockLength=c+1,l[c-1]=i[c]&127;let d=new Uint8Array(c);for(let f=0;f<c;f++)d[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(d),this.blockLength<=9?this.tagNumber=$i(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}}};xf.NAME="identificationBlock";var Ef=class extends jn{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(!ro(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=$i(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=zo(this.length,8);if(o.byteLength>127)return this.error="Too big length",dn;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}}};Ef.NAME="lengthBlock";var G={},At=class extends jn{constructor({name:e=ua,optional:t=!1,primitiveSchema:n,...o}={},i){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new xf(o),this.lenBlock=new Ef(o),this.valueBlock=i?new i(o):new Ft(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 qc;t||fw(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?dn: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 aw(t,n)}};At.NAME="BaseBlock";function fw(r){if(r instanceof G.Constructed)for(let e of r.valueBlock.value)fw(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var vf=class extends At{constructor({value:e=ua,...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}'`}};vf.NAME="BaseStringBlock";var Sf=class extends no(Ft){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};Sf.NAME="PrimitiveValueBlock";var hw,Af=class extends At{constructor(e={}){super(e,Sf),this.idBlock.isConstructed=!1}};hw=Af;G.Primitive=hw;Af.NAME="PRIMITIVE";function jk(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 oh(r,e=0,t=r.length){let n=e,o=new At({},Ft),i=new jn;if(!ro(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=At;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=jk(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 ih(r){if(!r.byteLength){let e=new At({},Ft);return e.error="Input buffer has zero length",{offset:-1,result:e}}return oh(ye.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function Jk(r,e){return r?1:e}var Tn=class extends Ft{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(!ro(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(;Jk(this.isIndefiniteForm,n)>0;){let s=oh(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===zc)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===zc?this.value.pop():this.warnings.push("No EndOfContent block encoded")),i}toBER(e,t){let n=t||new qc;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?dn:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};Tn.NAME="ConstructedValueBlock";var pw,Wo=class extends At{constructor(e={}){super(e,Tn),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(`
|
|
14
|
+
`.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),BU=new RegExp(`(?:^${Do}$)|(?:^${Hm}$)`),MU=new RegExp(`^${Do}$`),UU=new RegExp(`^${Hm}$`),X5=r=>r&&r.exact?BU:new RegExp(`(?:${Ps(r)}${Do}${Ps(r)})|(?:${Ps(r)}${Hm}${Ps(r)})`,"g");X5.v4=r=>r&&r.exact?MU:new RegExp(`${Ps(r)}${Do}${Ps(r)}`,"g");X5.v6=r=>r&&r.exact?UU:new RegExp(`${Ps(r)}${Hm}${Ps(r)}`,"g");var Y5=X5;function Q5(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function YS(){return!1}var{toString:FU}=Object.prototype;function Z5(r){return FU.call(r)==="[object RegExp]"}var QS={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function J5(r,e={}){if(!Z5(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(QS).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?QS[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function e8(r,e,{timeout:t}={}){try{return Q5(()=>J5(r).test(e),{timeout:t})()}catch(n){if(YS(n))return!1;throw n}}var $U=15,KU=45,ZS={timeout:400};function t8(r){return r.length>KU?!1:e8(Y5.v6({exact:!0}),r,ZS)}function JS(r){return r.length>$U?!1:e8(Y5.v4({exact:!0}),r,ZS)}var eA={http:"80",https:"443",ws:"80",wss:"443"},VU=["http","https","ws","wss"];function tA(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:i,path:s}=HU(r),a=[qU(o,t),jU(i,n),WU(n)];s!=null&&a.push(GU(s));let c="/"+a.filter(l=>!!l).reduce((l,u)=>l.concat(u),[]).join("/");return oe(c)}function HU(r){let[e]=r.split(":");VU.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o,pathname:i,search:s}=new URL(r);if(o==null||o===""){let c=zU(e);c!=null&&(o=c),c==null&&t==="http:"&&(o="80")}let a;return i!=null&&i!==""&&i!=="/"&&(i.startsWith("/")&&(i=i.substring(1)),a=i),s!=null&&s!==""&&(a=a??"",a+=s),{scheme:e,hostname:n,port:o,path:a}}function qU(r,e){if(!(r==null||r==="")){if(JS(r))return["ip4",r];if(t8(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(t8(t))return["ip6",t]}return[e,r]}}function jU(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function WU(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function GU(r){if(!(r==null||r===""))return["http-path",encodeURIComponent(r)]}function zU(r){if(!(r==null||r===""||eA[r]==null))return eA[r]}var XU=["https://trustless-gateway.link","https://4everland.io"],YU=2336;function QU(r){return r=r.toString(),{id:Eo(le.createV1(YU,Nr.digest(V(r)))),multiaddrs:[tA(r)]}}var r8=class{gateways;shuffle;constructor(e={}){this.gateways=(e.gateways??XU).map(t=>QU(t)),this.shuffle=e.shuffle??!0}async*findProviders(e,t){yield*(this.shuffle?this.gateways.toSorted(()=>Math.random()>.5?1:-1):this.gateways).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function n8(r={}){return new r8(r)}var o8=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async cancelReprovide(e,t){await this.libp2p.contentRouting.cancelReprovide(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 i8(r){return new o8(r)}var kf=class extends Ni{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(Xt.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(Xt.encode(e.multihash.bytes));if(t==null)throw new Gn;return t}has(e){return this.data.has(Xt.encode(e.multihash.bytes))}async delete(e){this.data.delete(Xt.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:le.createV1(Ea,Ye(Xt.decode(e))),block:t}}};var cae=In("blockstore:core:tiered");var oA="SHARDING";function JU(r){return r[Symbol.asyncIterator]!=null}function eF(r){if(JU(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 tc=eF;function tF(r){return r[Symbol.asyncIterator]!=null}function rF(r,e){return tF(r)?async function*(){yield*(await tc(r)).sort(e)}():function*(){yield*tc(r).sort(e)}()}var qm=rF;var Li=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 Cr(this.putMany(e,n)),e=[],await Cr(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=Co(n,i=>i.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>Co(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>qm(o,i),n)),e.offset!=null){let o=0,i=e.offset;n=Co(n,()=>o++>=i)}return e.limit!=null&&(n=as(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=Co(n,i=>i.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>Co(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>qm(o,i),n)),e.offset!=null){let o=e.offset,i=0;n=Co(n,()=>i++>=o)}return e.limit!=null&&(n=as(n,e.limit)),n}};var rc=class extends Li{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 Gn;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 ct(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new ct(e)}};var Kae=new ct(oA);var tce=In("datastore:core:tiered");var jm=class extends im{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 s8=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=de(),this.haveNext=de()}[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=de(),e}async throw(e){return this.ended=!0,this.error=e,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 this.ended=!0,this.nextResult=e,this.haveNext.resolve(),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 this.error??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=de(),await dt(this.readNext.promise,t?.signal,t)}};function sA(){return new s8}var Wm=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function Qt(r,e){let t=sA();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 J;return{read:async s=>{if(s?.signal?.throwIfAborted(),s?.bytes==null){let{done:c,value:l}=await dt(n.next(),s?.signal);return c===!0?null:l}for(;o.byteLength<s.bytes;){let{value:c,done:l}=await dt(n.next(),s?.signal);if(l===!0)throw new Wm("unexpected end of input");o.append(c)}let a=o.sublist(0,s.bytes);return o.consume(s.bytes),a},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 Gm=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},zm=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Xm=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function a8(r,e={}){let t=Qt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new Gm("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new Xm("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new zm("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function c8(){let r=de(),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 aA(){let r=c8(),e=c8();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var iu=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function Ym(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function l8(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Br(r,...e){if(!l8(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function u8(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 cA(r,e){Br(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function d8(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}var Bi=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),lA=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),nF=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!nF)throw new Error("Non little-endian hardware is not supported");function oF(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function Qm(r){if(typeof r=="string")r=oF(r);else if(l8(r))r=Zm(r);else throw new Error("Uint8Array expected, got "+typeof r);return r}function uA(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function dA(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 f8=(r,e)=>{function t(n,...o){if(Br(n),r.nonceLength!==void 0){let u=o[0];if(!u)throw new Error("nonce / iv required");r.varSizeNonce?Br(u):Br(u,r.nonceLength)}let i=r.tagLength;i&&o[1]!==void 0&&Br(o[1]);let s=e(n,...o),a=(u,d)=>{if(d!==void 0){if(u!==2)throw new Error("cipher output not supported");Br(d)}},c=!1;return{encrypt(u,d){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,Br(u),a(s.encrypt.length,d),s.encrypt(u,d)},decrypt(u,d){if(Br(u),i&&u.length<i)throw new Error("invalid ciphertext length: smaller than tagLength="+i);return a(s.decrypt.length,d),s.decrypt(u,d)}}}return Object.assign(t,r),t};function h8(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error("invalid output length, expected "+r+", got: "+e.length);if(t&&!iF(e))throw new Error("invalid output, must be aligned");return e}function p8(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 iF(r){return r.byteOffset%4===0}function Zm(r){return Uint8Array.from(r)}function Mi(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var hA=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),sF=hA("expand 16-byte k"),aF=hA("expand 32-byte k"),cF=Bi(sF),lF=Bi(aF);function fe(r,e){return r<<e|r>>>32-e}function m8(r){return r.byteOffset%4===0}var Jm=64,uF=16,pA=2**32-1,fA=new Uint32Array;function dF(r,e,t,n,o,i,s,a){let c=o.length,l=new Uint8Array(Jm),u=Bi(l),d=m8(o)&&m8(i),h=d?Bi(o):fA,m=d?Bi(i):fA;for(let g=0;g<c;s++){if(r(e,t,n,u,s,a),s>=pA)throw new Error("arx: counter overflow");let w=Math.min(Jm,c-g);if(d&&w===Jm){let y=g/4;if(g%4!==0)throw new Error("arx: invalid block position");for(let x=0,S;x<uF;x++)S=y+x,m[S]=h[S]^u[x];g+=Jm;continue}for(let y=0,x;y<w;y++)x=g+y,i[x]=o[x]^l[y];g+=w}}function g8(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=uA({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return Ym(o),Ym(s),d8(i),d8(t),(a,c,l,u,d=0)=>{Br(a),Br(c),Br(l);let h=l.length;if(u===void 0&&(u=new Uint8Array(h)),Br(u),Ym(d),d<0||d>=pA)throw new Error("arx: counter overflow");if(u.length<h)throw new Error(`arx: output (${u.length}) is shorter than data (${h})`);let m=[],g=a.length,w,y;if(g===32)m.push(w=Zm(a)),y=lF;else if(g===16&&t)w=new Uint8Array(32),w.set(a),w.set(a,16),y=cF,m.push(w);else throw new Error(`arx: invalid 32-byte key, got length=${g}`);m8(c)||m.push(c=Zm(c));let x=Bi(w);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(y,x,Bi(c.subarray(0,16)),x),c=c.subarray(16)}let S=16-o;if(S!==c.length)throw new Error(`arx: nonce must be ${S} or 16 bytes`);if(S!==12){let N=new Uint8Array(12);N.set(c,i?0:12-c.length),c=N,m.push(c)}let v=Bi(c);return dF(r,y,x,v,l,u,d,s),Mi(...m),u}}var fr=(r,e)=>r[e++]&255|(r[e++]&255)<<8,y8=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=Qm(e),Br(e,32);let t=fr(e,0),n=fr(e,2),o=fr(e,4),i=fr(e,6),s=fr(e,8),a=fr(e,10),c=fr(e,12),l=fr(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 u=0;u<8;u++)this.pad[u]=fr(e,16+2*u)}process(e,t,n=!1){let o=n?0:2048,{h:i,r:s}=this,a=s[0],c=s[1],l=s[2],u=s[3],d=s[4],h=s[5],m=s[6],g=s[7],w=s[8],y=s[9],x=fr(e,t+0),S=fr(e,t+2),v=fr(e,t+4),N=fr(e,t+6),W=fr(e,t+8),H=fr(e,t+10),$=fr(e,t+12),P=fr(e,t+14),R=i[0]+(x&8191),X=i[1]+((x>>>13|S<<3)&8191),q=i[2]+((S>>>10|v<<6)&8191),j=i[3]+((v>>>7|N<<9)&8191),ne=i[4]+((N>>>4|W<<12)&8191),B=i[5]+(W>>>1&8191),L=i[6]+((W>>>14|H<<2)&8191),K=i[7]+((H>>>11|$<<5)&8191),O=i[8]+(($>>>8|P<<8)&8191),I=i[9]+(P>>>5|o),k=0,z=k+R*a+X*(5*y)+q*(5*w)+j*(5*g)+ne*(5*m);k=z>>>13,z&=8191,z+=B*(5*h)+L*(5*d)+K*(5*u)+O*(5*l)+I*(5*c),k+=z>>>13,z&=8191;let re=k+R*c+X*a+q*(5*y)+j*(5*w)+ne*(5*g);k=re>>>13,re&=8191,re+=B*(5*m)+L*(5*h)+K*(5*d)+O*(5*u)+I*(5*l),k+=re>>>13,re&=8191;let F=k+R*l+X*c+q*a+j*(5*y)+ne*(5*w);k=F>>>13,F&=8191,F+=B*(5*g)+L*(5*m)+K*(5*h)+O*(5*d)+I*(5*u),k+=F>>>13,F&=8191;let xe=k+R*u+X*l+q*c+j*a+ne*(5*y);k=xe>>>13,xe&=8191,xe+=B*(5*w)+L*(5*g)+K*(5*m)+O*(5*h)+I*(5*d),k+=xe>>>13,xe&=8191;let Pe=k+R*d+X*u+q*l+j*c+ne*a;k=Pe>>>13,Pe&=8191,Pe+=B*(5*y)+L*(5*w)+K*(5*g)+O*(5*m)+I*(5*h),k+=Pe>>>13,Pe&=8191;let he=k+R*h+X*d+q*u+j*l+ne*c;k=he>>>13,he&=8191,he+=B*a+L*(5*y)+K*(5*w)+O*(5*g)+I*(5*m),k+=he>>>13,he&=8191;let Ue=k+R*m+X*h+q*d+j*u+ne*l;k=Ue>>>13,Ue&=8191,Ue+=B*c+L*a+K*(5*y)+O*(5*w)+I*(5*g),k+=Ue>>>13,Ue&=8191;let rt=k+R*g+X*m+q*h+j*d+ne*u;k=rt>>>13,rt&=8191,rt+=B*l+L*c+K*a+O*(5*y)+I*(5*w),k+=rt>>>13,rt&=8191;let Ze=k+R*w+X*g+q*m+j*h+ne*d;k=Ze>>>13,Ze&=8191,Ze+=B*u+L*l+K*c+O*a+I*(5*y),k+=Ze>>>13,Ze&=8191;let ut=k+R*y+X*w+q*g+j*m+ne*h;k=ut>>>13,ut&=8191,ut+=B*d+L*u+K*l+O*c+I*a,k+=ut>>>13,ut&=8191,k=(k<<2)+k|0,k=k+z|0,z=k&8191,k=k>>>13,re+=k,i[0]=z,i[1]=re,i[2]=F,i[3]=xe,i[4]=Pe,i[5]=he,i[6]=Ue,i[7]=rt,i[8]=Ze,i[9]=ut}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;Mi(n)}update(e){u8(this);let{buffer:t,blockLen:n}=this;e=Qm(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(){Mi(this.h,this.r,this.buffer,this.pad)}digestInto(e){u8(this),cA(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 fF(r){let e=(n,o)=>r(o).update(Qm(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var mA=fF(r=>new y8(r));function wA(r,e,t,n,o,i=20){let s=r[0],a=r[1],c=r[2],l=r[3],u=e[0],d=e[1],h=e[2],m=e[3],g=e[4],w=e[5],y=e[6],x=e[7],S=o,v=t[0],N=t[1],W=t[2],H=s,$=a,P=c,R=l,X=u,q=d,j=h,ne=m,B=g,L=w,K=y,O=x,I=S,k=v,z=N,re=W;for(let xe=0;xe<i;xe+=2)H=H+X|0,I=fe(I^H,16),B=B+I|0,X=fe(X^B,12),H=H+X|0,I=fe(I^H,8),B=B+I|0,X=fe(X^B,7),$=$+q|0,k=fe(k^$,16),L=L+k|0,q=fe(q^L,12),$=$+q|0,k=fe(k^$,8),L=L+k|0,q=fe(q^L,7),P=P+j|0,z=fe(z^P,16),K=K+z|0,j=fe(j^K,12),P=P+j|0,z=fe(z^P,8),K=K+z|0,j=fe(j^K,7),R=R+ne|0,re=fe(re^R,16),O=O+re|0,ne=fe(ne^O,12),R=R+ne|0,re=fe(re^R,8),O=O+re|0,ne=fe(ne^O,7),H=H+q|0,re=fe(re^H,16),K=K+re|0,q=fe(q^K,12),H=H+q|0,re=fe(re^H,8),K=K+re|0,q=fe(q^K,7),$=$+j|0,I=fe(I^$,16),O=O+I|0,j=fe(j^O,12),$=$+j|0,I=fe(I^$,8),O=O+I|0,j=fe(j^O,7),P=P+ne|0,k=fe(k^P,16),B=B+k|0,ne=fe(ne^B,12),P=P+ne|0,k=fe(k^P,8),B=B+k|0,ne=fe(ne^B,7),R=R+X|0,z=fe(z^R,16),L=L+z|0,X=fe(X^L,12),R=R+X|0,z=fe(z^R,8),L=L+z|0,X=fe(X^L,7);let F=0;n[F++]=s+H|0,n[F++]=a+$|0,n[F++]=c+P|0,n[F++]=l+R|0,n[F++]=u+X|0,n[F++]=d+q|0,n[F++]=h+j|0,n[F++]=m+ne|0,n[F++]=g+B|0,n[F++]=w+L|0,n[F++]=y+K|0,n[F++]=x+O|0,n[F++]=S+I|0,n[F++]=v+k|0,n[F++]=N+z|0,n[F++]=W+re|0}function hF(r,e,t,n){let o=r[0],i=r[1],s=r[2],a=r[3],c=e[0],l=e[1],u=e[2],d=e[3],h=e[4],m=e[5],g=e[6],w=e[7],y=t[0],x=t[1],S=t[2],v=t[3];for(let W=0;W<20;W+=2)o=o+c|0,y=fe(y^o,16),h=h+y|0,c=fe(c^h,12),o=o+c|0,y=fe(y^o,8),h=h+y|0,c=fe(c^h,7),i=i+l|0,x=fe(x^i,16),m=m+x|0,l=fe(l^m,12),i=i+l|0,x=fe(x^i,8),m=m+x|0,l=fe(l^m,7),s=s+u|0,S=fe(S^s,16),g=g+S|0,u=fe(u^g,12),s=s+u|0,S=fe(S^s,8),g=g+S|0,u=fe(u^g,7),a=a+d|0,v=fe(v^a,16),w=w+v|0,d=fe(d^w,12),a=a+d|0,v=fe(v^a,8),w=w+v|0,d=fe(d^w,7),o=o+l|0,v=fe(v^o,16),g=g+v|0,l=fe(l^g,12),o=o+l|0,v=fe(v^o,8),g=g+v|0,l=fe(l^g,7),i=i+u|0,y=fe(y^i,16),w=w+y|0,u=fe(u^w,12),i=i+u|0,y=fe(y^i,8),w=w+y|0,u=fe(u^w,7),s=s+d|0,x=fe(x^s,16),h=h+x|0,d=fe(d^h,12),s=s+d|0,x=fe(x^s,8),h=h+x|0,d=fe(d^h,7),a=a+c|0,S=fe(S^a,16),m=m+S|0,c=fe(c^m,12),a=a+c|0,S=fe(S^a,8),m=m+S|0,c=fe(c^m,7);let N=0;n[N++]=o,n[N++]=i,n[N++]=s,n[N++]=a,n[N++]=y,n[N++]=x,n[N++]=S,n[N++]=v}var pF=g8(wA,{counterRight:!1,counterLength:4,allowShortKeys:!1}),mF=g8(wA,{counterRight:!1,counterLength:8,extendNonceFn:hF,allowShortKeys:!1});var gF=new Uint8Array(16),gA=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(gF.subarray(t))},yF=new Uint8Array(32);function yA(r,e,t,n,o){let i=r(e,t,yF),s=mA.create(i);o&&gA(s,o),gA(s,n);let a=new Uint8Array(16),c=lA(a);p8(c,0,BigInt(o?o.length:0),!0),p8(c,8,BigInt(n.length),!0),s.update(a);let l=s.digest();return Mi(i,a),l}var bA=r=>(e,t,n)=>({encrypt(i,s){let a=i.length;s=h8(a+16,s,!1),s.set(i);let c=s.subarray(0,-16);r(e,t,c,c,1);let l=yA(r,e,t,c,n);return s.set(l,a),Mi(l),s},decrypt(i,s){s=h8(i.length-16,s,!1);let a=i.subarray(0,-16),c=i.subarray(-16),l=yA(r,e,t,a,n);if(!dA(c,l))throw new Error("invalid tag");return s.set(i.subarray(0,-16)),r(e,t,s,s,1),Mi(l),s}}),w8=f8({blockSize:64,nonceLength:12,tagLength:16},bA(pF)),Jce=f8({blockSize:64,nonceLength:24,tagLength:16},bA(mF));function vA(r,e,t){return ka(r),t===void 0&&(t=new Uint8Array(r.outputLen)),xs(r,xo(t),xo(e))}var b8=new Uint8Array([0]),xA=new Uint8Array;function EA(r,e,t,n=32){if(ka(r),us(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=xA);let i=new Uint8Array(o*r.outputLen),s=xs.create(r,e),a=s._cloneInto(),c=new Uint8Array(s.outputLen);for(let l=0;l<o;l++)b8[0]=l+1,a.update(l===0?xA:c).update(t).update(b8).digestInto(c),i.set(c,r.outputLen*l),s._cloneInto(a);return s.destroy(),a.destroy(),c.fill(0),b8.fill(0),i.slice(0,n)}var x8={hashSHA256(r){return _n(r.subarray())},getHKDF(r,e){let t=vA(_n,e,r),o=EA(_n,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=Ud.utils.randomPrivateKey();return{publicKey:Ud.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Ud.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Ud.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return w8(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return w8(n,e,t).decrypt(r.subarray(),o)}};var SA=x8;function AA(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 su=r=>{let e=Ct(2);return e[0]=r>>8,e[1]=r,e};su.bytes=2;var Pf=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)};Pf.bytes=2;function _A(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 v8(r,e){!e.enabled||!iu||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${M(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${M(r.privateKey,"hex")}`)):e("Missing local static keys."))}function E8(r,e){!e.enabled||!iu||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${M(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${M(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function IA(r,e){!e.enabled||!iu||e(r?`REMOTE_STATIC_PUBLIC_KEY ${M(r.subarray(),"hex")}`:"Missing remote static public key.")}function S8(r,e){!e.enabled||!iu||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${M(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function A8(r,e,t){!t.enabled||!iu||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&M(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&M(e.k,"hex")}`))}function sn(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Ct(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var au=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var wF=0,bF=4294967295,xF="Cipherstate has reached maximum n, a new handshake must be performed",e0=class{n;bytes;view;constructor(e=wF){this.n=e,this.bytes=ke(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>bF)throw new Error(xF)}};var nc=ke(0),cu=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new e0(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}},_8=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=V(t,"utf-8");this.h=vF(e,n),this.ck=this.h,this.cs=new cu(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new cu(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new J(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,nc);return[new cu(this.crypto,e),new cu(this.crypto,t)]}},I8=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 _8(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()}},Rf=class extends I8{writeMessageA(e){return new J(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new J(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new J(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new au(`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 au(`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 au(`handshake stage 2 validation fail: ${t.message}`)}}};function vF(r,e){if(e.length<=32){let t=ke(32);return t.set(e),t}else return r.hash(e)}var t0;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let i of t.webtransportCerthashes)n.uint32(10),n.bytes(i);if(t.streamMuxers!=null)for(let i of t.streamMuxers)n.uint32(18),n.string(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={webtransportCerthashes:[],streamMuxers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.webtransportCerthashes!=null&&i.webtransportCerthashes.length===o.limits.webtransportCerthashes)throw new at('Decode error - map field "webtransportCerthashes" had too many elements');i.webtransportCerthashes.push(t.bytes());break}case 2:{if(o.limits?.streamMuxers!=null&&i.streamMuxers.length===o.limits.streamMuxers)throw new at('Decode error - map field "streamMuxers" had too many elements');i.streamMuxers.push(t.string());break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(t0||(t0={}));var Nf;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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),t0.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={identityKey:ke(0),identitySig:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.identityKey=t.bytes();break}case 2:{i.identitySig=t.bytes();break}case 4:{i.extensions=t0.codec().decode(t,t.uint32(),{limits:o.limits?.extensions});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Nf||(Nf={}));async function T8(r,e,t){let n=await r.sign(TA(e));return Nf.encode({identityKey:nr(r.publicKey),identitySig:n,extensions:t})}async function C8(r,e,t){try{let n=Nf.decode(r),o=$t(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=TA(e);if(!await o.verify(i,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new Cp(n.message)}}function TA(r){let e=V("noise-libp2p-static-key:");return r instanceof Uint8Array?st([e,r],e.length+r.length):(r.prepend(e),r)}async function CA(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await T8(i,a.publicKey,l),d=new Rf({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});v8(d.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(d.writeMessageA(nc),e),t.trace("Stage 0 - Initiator finished sending first message."),E8(d.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let h=d.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),S8(d.re,t),IA(d.rs,t),t.trace("Initiator going to check remote's signature...");let m=await C8(h,d.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(d.writeMessageC(u),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[g,w]=d.ss.split();return A8(g,w,t),{payload:m,encrypt:y=>g.encryptWithAd(nc,y),decrypt:(y,x)=>w.decryptWithAd(nc,y,x)}}async function kA(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await T8(i,a.publicKey,l),d=new Rf({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});v8(d.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),d.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),S8(d.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(d.writeMessageB(u),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),E8(d.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let h=d.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let m=await C8(h,d.rs,c),[g,w]=d.ss.split();return A8(g,w,t),{payload:m,encrypt:y=>w.encryptWithAd(nc,y),decrypt:(y,x)=>g.decryptWithAd(nc,y,x)}}var RA=16;function NA(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 J(su(s.byteLength),s)}}}function DA(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-RA<o)throw new Error("Invalid chunk");let s=n.sublist(o,i),a=n.subarray(o,i-RA);try{let c=r.decrypt(s,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var r0=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??SA;this.crypto=AA(c),this.extensions={webtransportCerthashes:[],...o},this.metrics=a?_A(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??ke(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Xe]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=a8(e,{lengthEncoder:su,lengthDecoder:Pf,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=$t(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:ei(s),streamMuxer:this.getStreamMuxer(o.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null)return;let t=this.components.upgrader.getStreamMuxers();if(t!=null)for(let n of e){let o=t.get(n);if(o!=null)return o}if(e.length)throw new kp("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,t){let n=a8(e,{lengthEncoder:su,lengthDecoder:Pf,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=$t(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:ei(s),streamMuxer:this.getStreamMuxer(o.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,t,n,o){let i;try{i=await CA({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:[...this.components.upgrader.getStreamMuxers().keys()],webtransportCerthashes:[],...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 kA({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:[...this.components.upgrader.getStreamMuxers().keys()],webtransportCerthashes:[],...this.extensions}},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return i}async createSecureConnection(e,t){let[n,o]=aA(),i=e.unwrap();return await rr(n,NA(t,this.metrics),i,s=>mo(s,{lengthDecoder:Pf}),DA(t,this.metrics),n),o}};function n0(r={}){return e=>new r0(e,r)}function o0(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 Oo=class extends Error{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e),this.name="InvalidFrameError"}},lu=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},uu=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},i0=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},s0=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},a0=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},c0=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},du=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var OA=new Set([Oo.name,lu.name,uu.name,s0.name,a0.name,c0.name,du.name]),Of=256*1024,LA=16*1024*1024;var BA={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Of,maxStreamWindowSize:LA,maxMessageSize:64*1024};function MA(r){if(r.keepAliveInterval<=0)throw new D("keep-alive interval must be positive");if(r.maxInboundStreams<0)throw new D("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams<0)throw new D("max outbound streams must be larger or equal 0");if(r.initialStreamWindowSize<Of)throw new D("InitialStreamWindowSize must be larger or equal 256 kB");if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new D("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.maxStreamWindowSize>2**32-1)throw new D("MaxStreamWindowSize must be less than equal MAX_UINT32");if(r.maxMessageSize<1024)throw new D("MaxMessageSize must be greater than a kilobyte")}var Dt;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Dt||(Dt={}));var At;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(At||(At={}));var Rue=Object.values(At).filter(r=>typeof r!="string"),UA=0,zn;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(zn||(zn={}));var Rs=12;var FA=2**24;function EF(r){if(r[0]!==UA)throw new Oo("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*FA+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*FA+(r[9]<<16)+(r[10]<<8)+r[11]}}var l0=class{source;buffer;frameInProgress;constructor(e){this.source=SF(e),this.buffer=new J,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===Dt.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new i0("decoding frame already in progress");if(this.buffer.length<Rs)return;let e=EF(this.buffer.subarray(0,Rs));return this.buffer.consume(Rs),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 SF(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 k8(r){let e=new Uint8Array(Rs);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 $A(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function u0(r,e){let t=o0(r).return?.();$A(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var AF=5e3;function P8(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Ns=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=de(),this.closed=de(),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??AF,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=Zr({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 ya(`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);P8(o)&&await o}let n=()=>{u0(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 J(o):o;let i=this.sendData(o,t);P8(i)&&(this.sendingData=de(),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.status==="open"&&(this.log.trace("closing gracefully"),this.status="closing",await dt(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 dt(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await dt(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await dt(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();P8(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 Rp("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 Xn;(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"})(Xn||(Xn={}));var d0=class extends Ns{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Xn.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=Of,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=Wa(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-Rs,e.length),o=this.getSendFlags();this.sendFrame({type:Dt.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:Dt.WindowUpdate,flag:At.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|At.FIN;this.sendFrame({type:Dt.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 Fr("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 du("Receive window exceeded");let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&At.ACK)===At.ACK&&this.state===Xn.SYNSent&&(this.state=Xn.Established),(e&At.FIN)===At.FIN&&this.remoteCloseWrite(),(e&At.RST)===At.RST&&this.reset()}getSendFlags(){switch(this.state){case Xn.Init:return this.state=Xn.SYNSent,At.SYN;case Xn.SYNReceived:return this.state=Xn.Established,At.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:Dt.WindowUpdate,flag:e,streamID:this._id,length:o})}};var KA="/yamux/1.0.0",_F=500,f0=class{protocol=KA;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Xe]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new R8(this._components,{...this._init,...e})}},R8=class{protocol=KA;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={...BA,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),MA(this.config),this.closeController=new AbortController,this.closeController.signal,this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=Zr({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=o0(n);if(a.return!=null){let c=a.return();IF(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},i,s;try{let a=new l0(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=zn.NormalTermination}catch(a){OA.has(a.name)?(this.log?.error("protocol error in sink",a),i=zn.ProtocolError):(this.log?.error("internal error in sink",a),i=zn.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 Go("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Go("Muxer closed locally");let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new ss("max outbound streams exceeded");this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,Xn.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new Go("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Go("Muxer closed locally");if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,i)=>{let s=()=>{i(new Go("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??zn.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(_F);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??zn.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 D("Stream already exists with that id");let i=new d0({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 Dt.Ping:{this.handlePing(e);return}case Dt.GoAway:{this.handleGoAway(i);return}default:throw new Oo("Invalid frame type")}else switch(e.type){case Dt.Data:case Dt.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new Oo("Invalid frame type")}}handlePing(e){if(e.flag===At.SYN)this.log?.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,At.ACK);else if(e.flag===At.ACK)this.log?.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new Oo("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new lu("ping not requested");if(this.activePing.id!==e)throw new uu("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",zn[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&At.SYN)===At.SYN&&this.incomingStream(n);let s=this._streams.get(n);if(s===void 0){if(i===Dt.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 Dt.WindowUpdate:{s.handleWindowUpdate(e);return}case Dt.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 D("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:Dt.WindowUpdate,flag:At.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Dt.WindowUpdate,flag:At.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,Xn.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===Dt.Data){if(t===void 0)throw new Oo("Invalid frame");this.source.push(new J(k8(e),t))}else this.source.push(k8(e))}sendPing(e,t=At.SYN){t===At.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:Dt.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=zn.NormalTermination){this.log?.("sending GoAway reason=%s",zn[e]),this.localGoAway=e,this.sendFrame({type:Dt.GoAway,flag:0,streamID:0,length:e})}};function IF(r){return r!=null&&typeof r.then=="function"}function VA(r={}){return e=>new f0(e,r)}var TF=41;function h0(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===TF)return IS("2000::/3",t)}catch{}return!1}function p0(r){try{let[[e]]=r.stringTuples();return e===4||e===41}catch{}return!1}function Yn(r){try{if(!p0(r))return!1;let[[,e]]=r.stringTuples();return e==null?!1:Gr(e)??!1}catch{}return!0}function HA(r,e,t){let n,o;function i(){let a={signal:o.signal};if(t?.timeout!=null){let c=Ne([o.signal,AbortSignal.timeout(t.timeout)]);a.signal=c}Promise.resolve().then(async()=>{await r(a)}).catch(()=>{}).finally(()=>{o.signal.aborted||(n=setTimeout(i,e))})}let s=!1;return{setInterval:a=>{e=a,n!=null&&(clearTimeout(n),n=setTimeout(i,e))},setTimeout:a=>{t==null&&(t={}),t.timeout=a},start:()=>{s||(s=!0,o=new AbortController,o.signal,t?.runImmediately===!0?queueMicrotask(()=>{i()}):n=setTimeout(i,e))},stop:()=>{clearTimeout(n),o?.abort(),s=!1}}}var m0=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},g0=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},y0=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function qA(r,e={}){let t=Qt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new m0("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new y0("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new g0("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function N8(r,e){let t=qA(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 jA="libp2p",WA="autonat",GA="1.0.0";var xt;(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=()=>Et(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=()=>Et(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let u;l.codec=()=>(u==null&&(u=_e((d,h,m={})=>{if(m.lengthDelimited!==!1&&h.fork(),d.id!=null&&(h.uint32(10),h.bytes(d.id)),d.addrs!=null)for(let g of d.addrs)h.uint32(18),h.bytes(g);m.lengthDelimited!==!1&&h.ldelim()},(d,h,m={})=>{let g={addrs:[]},w=h==null?d.len:d.pos+h;for(;d.pos<w;){let y=d.uint32();switch(y>>>3){case 1:{g.id=d.bytes();break}case 2:{if(m.limits?.addrs!=null&&g.addrs.length===m.limits.addrs)throw new at('Decode error - map field "addrs" had too many elements');g.addrs.push(d.bytes());break}default:{d.skipType(y&7);break}}}return g})),u),l.encode=d=>Ae(d,l.codec()),l.decode=(d,h)=>Se(d,l.codec(),h)})(i=r.PeerInfo||(r.PeerInfo={}));let s;(function(l){let u;l.codec=()=>(u==null&&(u=_e((d,h,m={})=>{m.lengthDelimited!==!1&&h.fork(),d.peer!=null&&(h.uint32(10),r.PeerInfo.codec().encode(d.peer,h)),m.lengthDelimited!==!1&&h.ldelim()},(d,h,m={})=>{let g={},w=h==null?d.len:d.pos+h;for(;d.pos<w;){let y=d.uint32();switch(y>>>3){case 1:{g.peer=r.PeerInfo.codec().decode(d,d.uint32(),{limits:m.limits?.peer});break}default:{d.skipType(y&7);break}}}return g})),u),l.encode=d=>Ae(d,l.codec()),l.decode=(d,h)=>Se(d,l.codec(),h)})(s=r.Dial||(r.Dial={}));let a;(function(l){let u;l.codec=()=>(u==null&&(u=_e((d,h,m={})=>{m.lengthDelimited!==!1&&h.fork(),d.status!=null&&(h.uint32(8),r.ResponseStatus.codec().encode(d.status,h)),d.statusText!=null&&(h.uint32(18),h.string(d.statusText)),d.addr!=null&&(h.uint32(26),h.bytes(d.addr)),m.lengthDelimited!==!1&&h.ldelim()},(d,h,m={})=>{let g={},w=h==null?d.len:d.pos+h;for(;d.pos<w;){let y=d.uint32();switch(y>>>3){case 1:{g.status=r.ResponseStatus.codec().decode(d);break}case 2:{g.statusText=d.string();break}case 3:{g.addr=d.bytes();break}default:{d.skipType(y&7);break}}}return g})),u),l.encode=d=>Ae(d,l.codec()),l.decode=(d,h)=>Se(d,l.codec(),h)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=_e((l,u,d={})=>{d.lengthDelimited!==!1&&u.fork(),l.type!=null&&(u.uint32(8),r.MessageType.codec().encode(l.type,u)),l.dial!=null&&(u.uint32(18),r.Dial.codec().encode(l.dial,u)),l.dialResponse!=null&&(u.uint32(26),r.DialResponse.codec().encode(l.dialResponse,u)),d.lengthDelimited!==!1&&u.ldelim()},(l,u,d={})=>{let h={},m=u==null?l.len:l.pos+u;for(;l.pos<m;){let g=l.uint32();switch(g>>>3){case 1:{h.type=r.MessageType.codec().decode(l);break}case 2:{h.dial=r.Dial.codec().decode(l,l.uint32(),{limits:d.limits?.dial});break}case 3:{h.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:d.limits?.dialResponse});break}default:{l.skipType(g&7);break}}}return h})),c),r.encode=l=>Ae(l,r.codec()),r.decode=(l,u)=>Se(l,r.codec(),u)})(xt||(xt={}));var DF=4,OF=8,w0=class{components;protocol;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;started;log;topologyId;dialResults;findPeers;addressFilter;connectionThreshold;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:auto-nat"),this.started=!1,this.protocol=`/${t.protocolPrefix??jA}/${WA}/${GA}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??20,this.connectionThreshold=t.connectionThreshold??80,this.maxMessageSize=t.maxMessageSize??8192,this.dialResults=new Map,this.findPeers=HA(this.findRandomPeers.bind(this),6e4),this.addressFilter=tn(1024)}[Symbol.toStringTag]="@libp2p/autonat";[Xe]=["@libp2p/autonat"];get[Sn](){return["@libp2p/identify"]}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 - %e",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.topologyId=await this.components.registrar.register(this.protocol,{onConnect:(e,t)=>{this.verifyExternalAddresses(t).catch(n=>{this.log.error("could not verify addresses - %e",n)})}}),this.findPeers.start(),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.topologyId!=null&&await this.components.registrar.unhandle(this.topologyId),this.dialResults.clear(),this.findPeers.stop(),this.started=!1}allAddressesAreVerified(){return this.components.addressManager.getAddressesWithMetadata().every(e=>e.expires>Date.now()?!0:e.verified)}async findRandomPeers(e){if(this.allAddressesAreVerified())return;let t=Ne([AbortSignal.timeout(1e4),e?.signal]);try{this.log("starting random walk to find peers to run AutoNAT");for await(let n of this.components.randomWalk.walk({signal:t})){if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable %s",n.id,n.multiaddrs.map(o=>o.toString()).join(", "));continue}try{this.log.trace("dial random peer %p",n.id),await this.components.connectionManager.openConnection(n.multiaddrs,{signal:t})}catch{}if(this.allAddressesAreVerified()){this.log("stopping random walk, all addresses are verified");return}if(!this.hasConnectionCapacity()){this.log("stopping random walk, too close to max connections");return}}}catch{}}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout);let n=N8(e.stream,{maxDataLength:this.maxMessageSize}).pb(xt);try{let o=await n.read({signal:t}),i=await this.handleAutonatMessage(o,e.connection,{signal:t});await n.write(i,{signal:t}),await n.unwrap().unwrap().close({signal:t})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.stream.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(d=>d.toOptions().host),i=e.dial;if(i==null)return this.log.error("dial was missing from message"),{type:xt.MessageType.DIAL_RESPONSE,dialResponse:{status:xt.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:xt.MessageType.DIAL_RESPONSE,dialResponse:{status:xt.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let d=Ye(a.id);s=qt(d)}catch(d){return this.log.error("invalid PeerId - %e",d),{type:xt.MessageType.DIAL_RESPONSE,dialResponse:{status:xt.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:xt.MessageType.DIAL_RESPONSE,dialResponse:{status:xt.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(d=>oe(d)).filter(d=>{let h=d.toOptions();return Yn(d)?!1:h.host!==t.remoteAddr.toOptions().host?(this.log.trace("not dialing %a - target host did not match remote host %a",d,t.remoteAddr),!1):o.includes(h.host)?!1:this.components.transportManager.dialTransportForMultiaddr(d)==null?(this.log.trace("not dialing %a - transport unsupported",d),!1):!0}).map(d=>(d.getPeerId()==null&&(d=d.encapsulate(`/p2p/${s.toString()}`)),d));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",s),{type:xt.MessageType.DIAL_RESPONSE,dialResponse:{status:xt.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(d=>d.toString()).join(", "),s);let l="",u=c[0];for await(let d of c){let h;u=d;try{if(h=await this.components.connectionManager.openConnection(d,n),!h.remoteAddr.equals(d))throw this.log.error("tried to dial %a but dialed %a",d,h.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",s,d),{type:xt.MessageType.DIAL_RESPONSE,dialResponse:{status:xt.ResponseStatus.OK,addr:h.remoteAddr.decapsulateCode(Ie("p2p").code).bytes}}}catch(m){this.log.error("could not dial %p - %e",s,m),l=m.message}finally{h!=null&&await h.close()}}return{type:xt.MessageType.DIAL_RESPONSE,dialResponse:{status:xt.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:u.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((o,i)=>o.type==="observed"&&i.type!=="observed"?1:i.type==="observed"&&o.type!=="observed"?-1:0).filter(o=>!(!(o.expires<Date.now())||o.multiaddr.toOptions().family===6&&(!t||!h0(o.multiaddr))||Yn(o.multiaddr)));for(let o of n){let i=o.multiaddr.toString(),s=this.dialResults.get(i);if(s!=null){if(s.networkSegments.includes(e)){this.log.trace("%a already has a network segment result from %s",s.multiaddr,e);continue}if(s.queue.size>10){this.log.trace("%a already has enough peers queued",s.multiaddr);continue}}if(s==null){let a=o.expires<Date.now();if(a&&this.addressFilter.remove?.(i),this.addressFilter.has(i))continue;this.addressFilter.add(i),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",i),s={multiaddr:o.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:h6(),queue:new lr({concurrency:3,maxSize:50}),type:o.type,lastVerified:o.lastVerified},this.dialResults.set(i,s)}return s}}removeOutdatedMultiaddrResults(){let e=new Set(this.components.addressManager.getAddressesWithMetadata().filter(({expires:t})=>t<Date.now()).map(({multiaddr:t})=>t.toString()));for(let t of this.dialResults.keys())e.has(t)||(this.log.trace("remove results for %a",t),this.dialResults.delete(t))}async verifyExternalAddresses(e){if(!this.isStarted())return;this.removeOutdatedMultiaddrResults();let n=(await this.components.peerStore.get(e.remotePeer)).addresses.some(({multiaddr:s})=>s.toOptions().family===6),o=this.getNetworkSegment(e.remoteAddr),i=this.getFirstUnverifiedMultiaddr(o,n);if(i==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){i.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",i.multiaddr),this.confirmAddress(i)):this.log("skipping verifying %a because we are too close to the connection limit",i.multiaddr);return}i.queue.add(async s=>{await this.askPeerToVerify(e,o,s)},{peerId:e.remotePeer,multiaddr:i.multiaddr}).catch(s=>{i?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,i?.multiaddr,s)})}async askPeerToVerify(e,t,n){let o=this.dialResults.get(n.multiaddr.toString());if(o==null){this.log("%a was verified while %p was queued",n.multiaddr,e.remotePeer);return}let i=AbortSignal.timeout(this.timeout);this.log.trace("asking %p to verify multiaddr %s",e.remotePeer,n.multiaddr);let s=await e.newStream(this.protocol,{signal:i});try{let a=N8(s).pb(xt),[,c]=await Promise.all([a.write({type:xt.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:i}),a.read({signal:i})]);if(c.type!==xt.MessageType.DIAL_RESPONSE||c.dialResponse==null){this.log("invalid autonat response from %p - %j",e.remotePeer,c);return}let l=c.dialResponse.status;if(this.log.trace("autonat response from %p for %a is %s",e.remotePeer,n.multiaddr,l),l!==xt.ResponseStatus.OK&&l!==xt.ResponseStatus.E_DIAL_ERROR)return;if(o=this.dialResults.get(n.multiaddr.toString()),o==null){this.log.trace("peer reported %a as %s but there is no result object",n.multiaddr,c.dialResponse.status);return}if(o.networkSegments.includes(t)){this.log.trace("%a results included network segment %s",n.multiaddr,t);return}if(o.result!=null){this.log.trace("already resolved result for %a, ignoring response from",n.multiaddr,e.remotePeer);return}if(o.verifyingPeers.has(e.remotePeer)){this.log.trace("peer %p has already verified %a, ignoring response",e.remotePeer,n.multiaddr);return}if(o.verifyingPeers.add(e.remotePeer),o.networkSegments.push(t),l===xt.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===xt.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===DF&&this.confirmAddress(o),o.failure===OF&&this.unconfirmAddress(o)}finally{try{await s.close({signal:i})}catch(a){s.abort(a)}}}hasConnectionCapacity(){let t=this.components.connectionManager.getConnections().length,n=this.components.connectionManager.getMaxConnections();return t/n*100<this.connectionThreshold}confirmAddress(e){this.log("%s address %a is externally dialable",e.type,e.multiaddr),this.components.addressManager.confirmObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!0,e.queue.abort()}unconfirmAddress(e){this.log("%s address %a is not externally dialable",e.type,e.multiaddr),this.components.addressManager.removeObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!1,e.queue.abort()}getNetworkSegment(e){let t=e.toOptions();return t.family===4?t.host.split(".")[0].padStart(3,"0"):t.host.split(":")[0].padStart(4,"0")}};function zA(r={}){return e=>new w0(e,r)}var LF=se("dns4"),BF=se("dns6"),MF=se("dnsaddr"),ic=Kt(se("dns"),MF,LF,BF),v0=Kt(se("ip4"),se("ip6")),fu=Kt(Te(v0,se("tcp")),Te(ic,se("tcp"))),E0=Te(v0,se("udp")),UF=Te(E0,se("utp")),FF=Te(E0,se("quic")),$F=Te(E0,se("quic-v1")),D8=Kt(Te(fu,se("ws")),Te(ic,se("ws"))),b0=Kt(Te(D8,se("p2p")),D8),O8=Kt(Te(fu,se("wss")),Te(ic,se("wss")),Te(fu,se("tls"),se("ws")),Te(ic,se("tls"),se("ws"))),x0=Kt(Te(O8,se("p2p")),O8),L8=Kt(Te(fu,se("http")),Te(v0,se("http")),Te(ic,se("http"))),B8=Kt(Te(fu,se("https")),Te(v0,se("https")),Te(ic,se("https"))),XA=Te(E0,se("webrtc-direct"),se("certhash")),ZA=Kt(Te(XA,se("p2p")),XA),YA=Te($F,se("webtransport"),se("certhash"),se("certhash")),JA=Kt(Te(YA,se("p2p")),YA),e_=Kt(Te(b0,se("p2p-webrtc-star"),se("p2p")),Te(x0,se("p2p-webrtc-star"),se("p2p")),Te(b0,se("p2p-webrtc-star")),Te(x0,se("p2p-webrtc-star"))),efe=Kt(Te(b0,se("p2p-websocket-star"),se("p2p")),Te(x0,se("p2p-websocket-star"),se("p2p")),Te(b0,se("p2p-websocket-star")),Te(x0,se("p2p-websocket-star"))),t_=Kt(Te(L8,se("p2p-webrtc-direct"),se("p2p")),Te(B8,se("p2p-webrtc-direct"),se("p2p")),Te(L8,se("p2p-webrtc-direct")),Te(B8,se("p2p-webrtc-direct"))),sc=Kt(D8,O8,L8,B8,e_,t_,fu,UF,FF,ic,ZA,JA),tfe=Kt(Te(sc,se("p2p-stardust"),se("p2p")),Te(sc,se("p2p-stardust"))),Ds=Kt(Te(sc,se("p2p")),e_,t_,ZA,JA,se("p2p")),QA=Kt(Te(Ds,se("p2p-circuit"),Ds),Te(Ds,se("p2p-circuit")),Te(se("p2p-circuit"),Ds),Te(sc,se("p2p-circuit")),Te(se("p2p-circuit"),sc),se("p2p-circuit")),r_=()=>Kt(Te(QA,r_),QA),oc=r_(),n_=Kt(Te(oc,Ds,oc),Te(Ds,oc),Te(oc,Ds),oc,Ds);var rfe=Kt(Te(oc,se("webrtc"),se("p2p")),Te(oc,se("webrtc")),Te(sc,se("webrtc"),se("p2p")),Te(sc,se("webrtc")),se("webrtc"));function o_(r){function e(t){let n;try{n=oe(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function Te(...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:o_(e),partialMatch:e}}function Kt(...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:o_(e),partialMatch:e}}function se(r){let e=r;function t(o){let i;try{i=oe(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 KF="bootstrap",VF=50,HF=1e3,M8=class extends Le{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??HF,this.list=[];for(let n of t.list){if(!n_.matches(n)){this.log.error("Invalid multiaddr");continue}let o=oe(n),i=o.getPeerId();if(i==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let s={id:bt(i),multiaddrs:[o]};this.list.push(s)}this._init=t}[ma]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Xe]=["@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??KF]:{value:this._init.tagValue??VF,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 i_(r){return e=>new M8(e,r)}var Lf;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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:ke(0),payloadType:ke(0),payload:ke(0),signature:ke(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=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Lf||(Lf={}));var S0=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var Dn=class r{static createFromProtobuf=async e=>{let t=Lf.decode(e),n=$t(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=s_(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 S0("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=Lf.encode({publicKey:nr(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return ge(this.marshal(),e.marshal())}async validate(e){let t=s_(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},s_=(r,e,t)=>{let n=V(r),o=Fe(n.byteLength),i=Fe(e.length),s=Fe(t.length);return new J(o,n,i,e,s,t)};function a_(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 c_="libp2p-peer-record",l_=Uint8Array.from([3,1]);var Bf;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=_e((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:ke(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.multiaddr=i.bytes();break}default:{i.skipType(u&7);break}}}return c})),o),n.encode=i=>Ae(i,n.codec()),n.decode=(i,s)=>Se(i,n.codec(),s)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=_e((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:ke(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 at('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=>Ae(n,r.codec()),r.decode=(n,o)=>Se(n,r.codec(),o)})(Bf||(Bf={}));var zr=class r{static createFromProtobuf=e=>{let t=Bf.decode(e),n=qt(Ye(t.peerId)),o=(t.addresses??[]).map(s=>oe(s.multiaddr)),i=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:i})};static DOMAIN=c_;static CODEC=l_;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=Bf.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||!a_(this.multiaddrs,e.multiaddrs))}};var A0=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},_0=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},I0=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function u_(r,e={}){let t=Qt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new A0("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new I0("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new _0("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function Mf(r,e){let t=u_(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 U8=1e3,d_=60*U8,f_=290;var Vfe=2*60*d_,h_=1,T0=2e3,p_=100;var Uf=`${rs}-circuit-relay`,Hfe=`${rs}-circuit-relay-source`,qfe=2*d_,jfe=BigInt(1<<17),ac="/libp2p/circuit/relay/0.2.0/hop",F8="/libp2p/circuit/relay/0.2.0/stop",Wfe=30*U8,Gfe=30*U8,$8=300,m_=4096,g_=.001;var Os;(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=()=>Et(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=_e((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),hu.codec().encode(o.peer,i)),o.reservation!=null&&(i.uint32(26),C0.codec().encode(o.reservation,i)),o.limit!=null&&(i.uint32(34),pu.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(40),hr.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=hu.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.reservation=C0.codec().decode(o,o.uint32(),{limits:s.limits?.reservation});break}case 4:{a.limit=pu.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 5:{a.status=hr.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(Os||(Os={}));var oi;(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=()=>Et(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=_e((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),hu.codec().encode(o.peer,i)),o.limit!=null&&(i.uint32(26),pu.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(32),hr.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=hu.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.limit=pu.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 4:{a.status=hr.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(oi||(oi={}));var hu;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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:ke(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 at('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=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(hu||(hu={}));var C0;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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),P0.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 at('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}case 3:{i.voucher=P0.codec().decode(t,t.uint32(),{limits:o.limits?.voucher});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(C0||(C0={}));var pu;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(pu||(pu={}));var hr;(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"})(hr||(hr={}));var K8;(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"})(K8||(K8={}));(function(r){r.codec=()=>Et(K8)})(hr||(hr={}));var k0;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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:ke(0),peer:ke(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=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(k0||(k0={}));var P0;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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),k0.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:ke(0),payloadType:ke(0),signature:ke(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=k0.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=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(P0||(P0={}));var Ff=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},R0=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},N0=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function V8(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var $f=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}},D0=it(qe(bm.matchers[0],Be("p2p-circuit"))),O0=it(Be("p2p-circuit"));function H8(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 g=>{await l(g),m(!0)};let u=e.abort.bind(e);e.abort=g=>{u(g),m(!0)};let d=e.sink.bind(e);e.sink=async g=>{try{await d(rr(g,w=>Wa(w,y=>i?.(y))))}catch(w){w.type!=="aborted"&&s.error("%s error in sink",t,w)}finally{c=!0,m()}};let h={log:s,sink:e.sink,source:async function*(){try{for await(let g of e.source)o?.(g),yield g}finally{a=!0,m()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function m(g){g===!0&&(a=!0,c=!0),a&&c&&h.timeline.close==null&&(h.timeline.close=Date.now())}return h}var L0=class extends Le{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,this.discoveryController.signal}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(ac,{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,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(ac)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let i=y_(n),s=y_(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 lr({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=Ne([this.discoveryController.signal,AbortSignal.timeout(5e3)]);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 y_(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(M(e)).getTime()}var q8=class extends Le{connectionManager;addressManager;reservationStore;listeningAddrs;log;listenTimeout;reservationId;relay;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.addressManager=e.addressManager,this.reservationStore=e.reservationStore,this.listeningAddrs=[],this.listenTimeout=t.listenTimeout??T0,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.forEach(t=>{this.addressManager.removeObservedAddr(t)}),this.listeningAddrs=[],this.safeDispatchEvent("listening"))};_onAddRelayPeer=e=>{let{details:t}=e.detail;t.type!=="configured"&&t.id===this.reservationId&&this.addedRelay(e.detail)};async listen(e){if(O0.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(D0.exactMatch(e)){this.log("listen on specific relay server %a",e);let t=AbortSignal.timeout(this.listenTimeout);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.addedRelay(i)}}else throw new wa(`Could not listen on p2p-circuit address "${e}"`)}getAddrs(){return[...this.listeningAddrs.values()].flat()}updateAnnounceAddrs(){}async close(){this.reservationStore.cancelReservations(),this.listeningAddrs=[],this.reservationStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),queueMicrotask(()=>{this.safeDispatchEvent("close")})}addedRelay(e){this.log("relay peer added %p",e.relay),this.relay=e.relay,this.listeningAddrs=e.details.reservation.addrs.map(t=>oe(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function w_(r){return new q8(r)}var b_="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var x_=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=b_[t[r]&63];return e};var qF=60*1e3*10,jF=60*1e3*5,WF=30*1e3,B0=class extends Le{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 ir,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??p_,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??T0,this.started=!1,this.relayFilter=tn(100),this.reserveQueue=new lr({concurrency:t?.reservationConcurrency??h_,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(Uf)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[Uf]: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=x_();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 wa("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new N0("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 wa("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 g=this.connectionManager.getConnections(e),w=!1;if(g.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),g.map(y=>y.id).includes(i.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),w=!0),w&&V8(i.reservation.expire)>qF)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 Ff("Not making reservation on discovered relay because we do not need any more relays");let s=AbortSignal.timeout(this.reservationCompletionTimeout);let a=await this.connectionManager.openConnection(e,{signal:s});if(nn.matches(a.remoteAddr))throw new R0("not creating reservation over relayed connection");let c=await this.#e(a,{signal:s}),l=V8(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let u=Math.min(Math.max(l-jF,WF),Math.pow(2,31)-1),d=setTimeout(()=>{this.log("refresh reservation to relay %p",e),this.addRelay(e,t).catch(async g=>{this.log.error("could not refresh reservation to relay %p - %e",e,g),await this.#t(e)}).catch(g=>{this.log.error("could not remove expired reservation to relay %p - %e",e,g)})},u),h;if(t==="discovered"){let g=this.pendingReservations.pop();if(g==null)throw new Ff("Made reservation on relay but did not need any more discovered relays");h={timeout:d,reservation:c,type:t,connection:a.id,id:g}}else h={timeout:d,reservation:c,type:t,connection:a.id};this.reservations.set(e,h),await this.peerStore.merge(e,{tags:{[Uf]:{value:1,ttl:l}}}),this.#r();let m={relay:e,details:h};return this.safeDispatchEvent("relay:created-reservation",{detail:m}),m}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(ac,t),i=Mf(n).pb(Os);this.log.trace("send RESERVE to %p",e.remotePeer),await i.write({type:Os.Type.RESERVE},t);let s;try{this.log.trace("reading 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 %o",s),s.status===hr.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let u=oe(l);u.getPeerId()==null&&(u=u.encapsulate(`/p2p/${e.remotePeer}`)),u=oe(u.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(u.toString())}return s.reservation.addrs=[...c].map(l=>oe(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:{[Uf]: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=tn(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var GF=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(oe)}catch{return!1}return!0},v_={maxInboundStopStreams:$8,maxOutboundStopStreams:$8,stopTimeout:3e4},M0=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;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??v_.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??v_.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new L0(e,{filter:t.discoveryFilter??w6(m_,g_)}),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 B0(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";[Xe]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[Sn](){return this.discovery!=null?["@libp2p/identify"]:[]}[ns]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,await this.registrar.handle(F8,e=>{let t=this.upgrader.createInboundAbortSignal(this.shutdownController.signal);this.onStop(e,t).catch(n=>{this.log.error("error while handling STOP protocol",n),e.stream.abort(n)}).finally(()=>{t.clear()})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await cr(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await Tr(this.discovery,this.reservationStore),await this.registrar.unhandle(F8),this.started=!1}async dial(e,t){if(e.protoCodes().filter(m=>m===f_).length!==1){let m="Invalid circuit relay address";throw this.log.error(m,e),new Ei(m)}let n=e.toString().split("/p2p-circuit"),o=oe(n[0]),i=oe(n[n.length-1]),s=o.getPeerId(),a=i.getPeerId();if(s==null||a==null){let m=`ircuit relay dial to ${e.toString()} failed as address did not have both relay and destination PeerIDs`;throw this.log.error(`c${m}`),new Ei(`C${m}`)}let c=bt(s),l=bt(a),d=this.connectionManager.getConnections(c)[0];d==null?(await this.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new ae("circuit-relay:open-connection")),d=await this.connectionManager.openConnection(c,t)):t.onProgress?.(new ae("circuit-relay:reuse-connection"));let h;try{t.onProgress?.(new ae("circuit-relay:open-hop-stream")),h=await d.newStream(ac,t);let m=Mf(h),g=m.pb(Os);t.onProgress?.(new ae("circuit-relay:write-connect-message")),await g.write({type:Os.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[oe(i).bytes]}},t),t.onProgress?.(new ae("circuit-relay:read-connect-response"));let w=await g.read(t);if(w.status!==hr.OK)throw new Oe(`failed to connect via relay with status ${w?.status?.toString()??"undefined"}`);let y=new $f(w.limit),x=H8({stream:m.unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger,onDataRead:y.onData,onDataWrite:y.onData});return this.log("new outbound relayed connection %a",x.remoteAddr),await this.upgrader.upgradeOutbound(x,{...t,limits:y.getLimits()})}catch(m){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,m),h?.abort(m),m}}createListener(e){return w_({peerId:this.peerId,connectionManager:this.connectionManager,addressManager:this.addressManager,reservationStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>D0.exactMatch(t)||O0.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>nn.exactMatch(t))}async onStop({connection:e,stream:t},n){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(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",d)}let o=Mf(t).pb(oi),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:oi.Type.STATUS,status:hr.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(i.type!==oi.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:oi.Type.STATUS,status:hr.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!GF(i)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:oi.Type.STATUS,status:hr.MALFORMED_MESSAGE},{signal:n}),await t.close({signal:n});return}let s=qt(Ye(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:oi.Type.STATUS,status:hr.PERMISSION_DENIED},{signal:n}),await t.close({signal:n});return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:oi.Type.STATUS,status:hr.OK},{signal:n});let a=new $f(i.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.addressManager.getAddresses()[0],u=H8({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,logger:this.logger,onDataRead:a.onData,onDataWrite:a.onData});this.log("new inbound relayed connection %a",u.remoteAddr),await this.upgrader.upgradeInbound(u,{limits:a.getLimits(),signal:n}),this.log("%s connection %a upgraded","inbound",u.remoteAddr)}};function j8(r={}){return e=>new M0(e,r)}var E_=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},zF=new WeakMap;function XF({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(E_());let i,s,a,c=r??clearTimeout,l=()=>{c(i),a(E_())},u=()=>{o&&o.removeEventListener("abort",l)},d=new Promise((h,m)=>{s=()=>{u(),h(n)},a=m,i=(e??setTimeout)(s,t)});return o&&o.addEventListener("abort",l,{once:!0}),zF.set(d,()=>{c(i),i=null,s()}),d}}var YF=XF(),U0=YF;var F0=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},$0=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},K0=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function S_(r,e={}){let t=Qt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new F0("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new K0("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new $0("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function W8(r,e){let t=S_(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 Lo;(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=()=>Et(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=_e((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 at('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=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(Lo||(Lo={}));function G8(r,e){return nn.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:xf.matches(r)?!0:hS.matches(r)?Gr(r.toOptions().host)===!1:!1}var A_=1024*4,__=100,V0={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},H0=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??V0.timeout,this.retries=t.retries??V0.retries,this.maxInboundStreams=t.maxInboundStreams??V0.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??V0.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[Sn]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Kf,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{nn.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Kf,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(Kf),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([Kf],{signal:o.signal,runOnLimitedConnection:!0});let i=W8(t,{maxDataLength:A_}).pb(Lo);this.log("B sending connect to %p",e.remotePeer);let s=Date.now();await i.write({type:Lo.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(d=>d.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await i.read(o);if(a.type!==Lo.Type.CONNECT)throw this.log("A sent wrong message type"),new Oe("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 Oe("DCUtR connect message had no multiaddrs");let l=Date.now()-s;this.log("A sending sync, rtt %dms",l),await i.write({type:Lo.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await U0(l/2),this.log("B dialing",c);let u=await this.connectionManager.openConnection(c,{signal:o.signal,priority:__,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,u.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=>G8(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(nn.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=W8(e,{maxDataLength:A_}).pb(Lo);this.log("A receiving connect");let i=await o.read(n);if(i.type!==Lo.Type.CONNECT)throw this.log("B sent wrong message type"),new Oe("DCUtR message type was incorrect");if(i.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new Oe("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 Oe("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:Lo.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==Lo.Type.SYNC)throw new Oe("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:__,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=oe(n);if(!G8(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Kf="/libp2p/dcutr";function I_(r={}){return e=>new H0(e,r)}var q0=globalThis.CustomEvent??Event;async function*Bo(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,i=[],s=de(),a=de(),c=!1,l,u=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let g of r){if(i.length===t&&(s=de(),await s.promise),u)break;let w={done:!1};i.push(w),g().then(y=>{w.done=!0,w.ok=!0,w.value=y,o.dispatchEvent(new q0("task-complete"))},y=>{w.done=!0,w.err=y,o.dispatchEvent(new q0("task-complete"))})}c=!0,o.dispatchEvent(new q0("task-complete"))}catch(g){l=g,o.dispatchEvent(new q0("task-complete"))}});function d(){return n?i[0]?.done:!!i.find(g=>g.done)}function*h(){for(;i.length>0&&i[0].done;){let g=i[0];if(i.shift(),g.ok)yield g.value;else throw u=!0,s.resolve(),g.err;s.resolve()}}function*m(){for(;d();)for(let g=0;g<i.length;g++)if(i[g].done){let w=i[g];if(i.splice(g,1),g--,w.ok)yield w.value;else throw u=!0,s.resolve(),w.err;s.resolve()}}for(;;){if(d()||(a=de(),await a.promise),l!=null)throw l;if(n?yield*h():yield*m(),c&&i.length===0)break}}var j0=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},W0=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},G0=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function T_(r,e={}){let t=Qt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new j0("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new G0("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new W0("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function mu(r,e){let t=T_(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 C_="0.1.0",k_="id",P_="id/push",R_="1.0.0",N_="1.0.0";var Ls;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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 at('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 at('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=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Ls||(Ls={}));var an={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function D_(r){if(r!=null&&r.length>0)try{return oe(r)}catch{}}function JF(r,e){return e??r.userAgent}async function z0(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new Oe("message was null or undefined");let i={};if(o.listenAddrs.length>0&&(i.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:oe(c)}))),o.protocols.length>0&&(i.protocols=o.protocols),o.publicKey!=null){let c=$t(o.publicKey);if(!ei(c).equals(n.remotePeer))throw new Oe("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 Dn.openAndCertify(c,zr.DOMAIN),u=zr.createFromProtobuf(l.payload),d=Eo(l.publicKey.toCID());if(!u.peerId.equals(d))throw new Oe("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(u.peerId))throw new Oe("signing key does not match remote PeerId");let h;try{h=await r.get(u.peerId)}catch(m){if(m.name!=="NotFoundError")throw m}if(h!=null&&(i.metadata=h.metadata,h.peerRecordEnvelope!=null)){let m=await Dn.createFromProtobuf(h.peerRecordEnvelope),g=zr.createFromProtobuf(m.payload);g.seqNumber>=u.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",g.seqNumber,u.seqNumber),u=g,c=h.peerRecordEnvelope)}i.peerRecordEnvelope=c,i.addresses=u.multiaddrs.map(m=>({isCertified:!0,multiaddr:m})),s={seq:u.seqNumber,addresses:u.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=V(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=V(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=>oe(c)),observedAddr:o.observedAddr==null?void 0:oe(o.observedAddr),protocols:o.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var gu=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??an.timeout,this.maxInboundStreams=t.maxInboundStreams??an.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??an.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??an.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??an.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??an.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??an.protocolPrefix}/${C_}`,agentVersion:JF(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:V(this.host.agentVersion),ProtocolVersion:V(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 X0=class extends gu{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??an.protocolPrefix}/${P_}/${N_}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??an.concurrency,(t.runOnSelfUpdate??an.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})})}[Xe]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(u=>u.decapsulateCode(Ie("p2p").code)),t=new zr({peerId:this.peerId,multiaddrs:e}),n=await Dn.seal(t,this.privateKey),o=this.registrar.getProtocols(),i=await this.peerStore.get(this.peerId),s=M(i.metadata.get("AgentVersion")??V(this.host.agentVersion)),a=M(i.metadata.get("ProtocolVersion")??V(this.host.protocolVersion)),c=this;async function*l(){for(let u of c.connectionManager.getConnections())(await c.peerStore.get(u.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let h,m=AbortSignal.timeout(c.timeout);try{h=await u.newStream(c.protocol,{signal:m,runOnLimitedConnection:c.runOnLimitedConnection}),await mu(h,{maxDataLength:c.maxMessageSize}).pb(Ls).write({listenAddrs:e.map(w=>w.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:s,protocolVersion:a},{signal:m}),await h.close({signal:m})}catch(g){c.log.error("could not push identify update to peer",g),h?.abort(g)}})}await Cr(Bo(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 mu(n,{maxDataLength:this.maxMessageSize}).pb(Ls).read(o);await n.close(o),await z0(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 e$=41,Y0=class extends gu{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??an.protocolPrefix}/${k_}/${R_}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??an.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(i=>{i.name!==vi.name&&this.log.error("error during identify trigged by connection:open",i)})})}[Xe]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);t={...t,signal:o}}try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let i=await mu(n,{maxDataLength:this.maxMessageSize}).pb(Ls).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 Oe("public key was missing from identify message");let a=$t(o),c=Eo(a.toCID());if(!e.remotePeer.equals(c))throw new Oe("identified peer does not match the expected peer");if(this.peerId.equals(c))throw new Oe("identified peer is our own peer id?");return this.maybeAddObservedAddress(s),this.log("identify completed for peer %p and protocols %o",c,i),z0(this.peerStore,this.events,this.log,e,n)}maybeAddObservedAddress(e){let t=D_(e);if(t==null)return;if(this.log.trace("our observed address was %a",t),Yn(t)){this.log.trace("our observed address was private");return}if(t.stringTuples()[0][0]===e$&&!h0(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}Ya.exactMatch(t)||(this.log.trace("storing the observed address"),this.addressManager.addObservedAddr(t))}async handleProtocol(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);try{let i=await this.peerStore.get(this.peerId),s=this.addressManager.getAddresses().map(u=>u.decapsulateCode(Ie("p2p").code)),a=i.peerRecordEnvelope;if(s.length>0&&a==null){let u=new zr({peerId:this.peerId,multiaddrs:s});a=(await Dn.seal(u,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;fS.matches(t.remoteAddr)||(c=void 0),await mu(n).pb(Ls).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:nr(this.privateKey.publicKey),listenAddrs:s.map(u=>u.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 O_(r={}){return e=>new Y0(e,r)}function L_(r={}){return e=>new X0(e,r)}var yu=1e3,z8=60*yu,Q0=60*z8,B_=36*Q0,M_="/ipfs/kad/1.0.0",U_=48*Q0;var F_=24*Q0,$_=10,K_=16384,V_=Q0,x1e=10*yu;var Z0=20,wu=3,H_=5*z8,q_=yu,j_=5*yu,W_=5*z8,G_=30*yu,z_=180*yu,X8=`${rs}-kad-dht`;var Vf;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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:ke(0),value:ke(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=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Vf||(Vf={}));function X_(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 pr=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 Vf.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:X_(this.timeReceived)}}static deserialize(e){let t=Vf.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 Bs=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},J0=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},e2=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},t2=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var Q_;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Q_||(Q_={}));var We;(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"})(We||(We={}));var r2;(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"})(r2||(r2={}));(function(r){r.codec=()=>Et(r2)})(We||(We={}));var xu;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(xu||(xu={}));var Y8;(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"})(Y8||(Y8={}));(function(r){r.codec=()=>Et(Y8)})(xu||(xu={}));var bu;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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),xu.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:ke(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 at('Decode error - map field "multiaddrs" had too many elements');i.multiaddrs.push(t.bytes());break}case 3:{i.connection=xu.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(bu||(bu={}));var Ui;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&r2[t.type]!==0&&(n.uint32(8),We.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),bu.codec().encode(i,n);if(t.providers!=null)for(let i of t.providers)n.uint32(74),bu.codec().encode(i,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={type:We.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=We.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 at('Decode error - map field "closer" had too many elements');i.closer.push(bu.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 at('Decode error - map field "providers" had too many elements');i.providers.push(bu.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Ui||(Ui={}));function Q8(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 Hf(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 n2(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function On(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function Z8(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function qf(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function J8(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function Z_(r,e,t){if(t.length===0)throw new D("No records given");let o=M(e).split("/");if(o.length<3)throw new D("Record key does not have a selector function");let i=r[o[1].toString()];if(i==null)throw new t2(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function r$(r,e){return 0}var J_={pk:r$};async function vu(r,e){let t=e.key,o=M(t).split("/");if(o.length<3)return;let i=r[o[1].toString()];if(i==null)throw new D(`No validator available for key type "${o[1]}"`);await i(t,e.value)}var n$=async(r,e)=>{if(!(r instanceof Uint8Array))throw new D('"key" must be a Uint8Array');if(r.byteLength<5)throw new D("Invalid public key record");if(M(r.subarray(0,4))!=="/pk/")throw new D("key was not prefixed with /pk/");let n=$t(e),o=r.slice(4);if(!ge(o,n.toMultihash().bytes))throw new D("public key does not match passed in key")},eI={pk:n$};var o$=V("/pk/");function tI(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=Gr(n);return o==null?!0:!o})}}async function Ms(r){return(await yt.digest(r)).digest}async function mr(r){return Ms(r.toMultihash().bytes)}function Us(r,e){return new ct(`${r}/${M(e,"base32")}`,!1)}function rI(r){return st([o$,r.toMultihash().bytes])}function nI(r){return M(r.subarray(0,4))==="/pk/"}function oI(r){let e=Ye(r.subarray(4));return qt(e)}function e7(r,e){let t=new Date;return new pr(r,e,t).serialize()}var i$=290,s$=54,a$=55,c$=56,l$=4,u$=41;function iI(r){let e=r.stringTuples();for(let t of e)if(t[0]===i$)return!1;if(e[0][0]===s$||e[0][0]===a$||e[0][0]===c$)return!0;if(e[0][0]===l$||e[0][0]===u$){let t=Gr(`${e[0][1]}`);return t==null||!t}return!1}function o2(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:le.createV1(Ea,Ye(V(n,"base32"))),peerId:bt(t)}}function i2(r,e,t){let n=typeof e=="string"?e:M(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new ct(o.join("/"))}function s2(r){return new Date(nt(r))}function cc(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 a2(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 c2=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.datastorePrefix}/record`,this.validators=n,this.selectors=o,this.peerRouting=i,this.queryManager=s,this.network=a,this.get=e.metrics?.traceFunction("libp2p.kadDHT.get",this.get.bind(this),{optionsIndex:1})??this.get,this.put=e.metrics?.traceFunction("libp2p.kadDHT.put",this.put.bind(this),{optionsIndex:2})??this.put}async getLocal(e){this.log("getLocal %b",e);let t=Us(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=pr.deserialize(n);return await vu(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let i=e7(e,n);for(let{value:s,from:a}of t){if(ge(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let u=Us(this.datastorePrefix,e);this.log(`Storing corrected record for key ${u.toString()}`),await this.components.datastore.put(u,i.subarray())}catch(u){this.log.error("Failed error correcting self",u)}continue}let c=!1,l={type:We.PUT_VALUE,key:e,record:i};for await(let u of this.network.sendRequest(a,l,o))u.name==="PEER_RESPONSE"&&u.record!=null&&ge(u.record.value,pr.deserialize(i).value)&&(c=!0),yield u;c||(yield On({from:a,error:new Bs("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=e7(e,t),i=Us(this.datastorePrefix,e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray()),yield*rr(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>Jr(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:We.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let u of this.network.sendRequest(a.peer.id,l,n))c.push(u),u.name==="PEER_RESPONSE"&&(u.record!=null&&ge(u.record.value,pr.deserialize(o).value)||c.push(On({from:a.peer.id,error:new Bs("Value not put correctly")},n)));return c}),s=>Bo(s,{ordered:!1,concurrency:wu}),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=Z_(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 ze("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 qf({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,{...t,signal:s}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield qf({from:i,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function sI(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function jf(r){if(r.id==null)throw new Error("Invalid peer in message");let e=Ye(r.id);return{id:qt(e),multiaddrs:(r.multiaddrs??[]).map(t=>oe(t))}}var l2=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,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PROVIDER"&&(u.providers??=[],u.providers.push(...l.providers.map(d=>d.id.toString()))),u)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(u.providers??=[],u.providers.push(l.from.toString())),u)})??this.provide}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:We.ADD_PROVIDER,key:o,providers:[sI({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 u of this.network.sendMessage(c.peer.id,i,n))u.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,c.peer.id),s++),l.push(u)}catch(u){this.log.error("error sending provide record to peer %p",c.peer.id,u),l.push(On({from:c.peer.id,error:u},n))}return l};yield*rr(this.peerRouting.getClosestPeers(o,n),c=>Jr(c,l=>a(l)),c=>Bo(c,{ordered:!1,concurrency:wu}),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 u=[];for(let d of a.slice(0,n))try{let h=await this.components.peerStore.get(d);u.push({id:d,multiaddrs:h.addresses.map(({multiaddr:m})=>m)})}catch(h){if(h.name!=="NotFoundError")throw h;this.log("no peer store entry for %p",d)}if(yield Hf({from:this.components.peerId,messageType:We.GET_PROVIDERS,providers:u},t),yield Z8({from:this.components.peerId,providers:u},t),o+=u.length,o>=n)return}let c=async function*({peer:u,signal:d}){let h={type:We.GET_PROVIDERS,key:i};yield*s.network.sendRequest(u,h,{...t,signal:d})},l=new jr(a);for await(let u of this.queryManager.run(i,c,t))if(yield u,u.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",u.providers.length,e,u.closer.length);let d=[];for(let h of u.providers)l.has(h.id)||(l.add(h.id),d.push(h));if(d.length>0&&(yield Z8({from:u.from,providers:d},t),o+=d.length,o>=n))return}}};var Eu=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 f$=1.2,h$=2,p$=2e3,Mo=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new Eu(e.interval??5e3),this.failure=new Eu(e.interval??5e3),this.next=new Eu(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??h$,this.timeoutMultiplier=e.timeoutMultiplier??f$,this.minTimeout=e.minTimeout??p$,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=Ne([e.signal,n]);return 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 t7=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=de(),this.haveNext=de()}[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=de(),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 this.ended=!0,this.nextResult=e,this.haveNext.resolve(),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=de(),await dt(this.readNext.promise,t?.signal,t)}};function aI(){return new t7}var u2=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var r7=class extends Error{code;constructor(e,t){super(e),this.code=t}},n7=class extends r7{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function cI(r,e){let t=aI();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 J;return{read:async(s,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((u,d)=>{c=()=>{d(new n7("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(s==null){let{done:d,value:h}=await Promise.race([n.next(),l]);return d===!0?new J:h}for(;o.byteLength<s;){let{value:d,done:h}=await Promise.race([n.next(),l]);if(h===!0)throw new u2("unexpected end of input");o.append(d)}let u=o.sublist(0,s);return o.consume(s),u}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 d2=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},f2=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},h2=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function lI(r,e={}){let t=cI(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;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 d2("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new h2("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new f2("message length too long");return t.read(a,s)},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function o7(r,e){let t=lI(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 p2=class extends Le{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 Mo({...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`)},this.sendRequest=e.metrics?.traceFunction("libp2p.kadDHT.sendRequest",this.sendRequest.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendMessage}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 D("Message type was missing");this.log("sending %s to %p",t.type,e),yield J8({peer:e},n),yield Q8({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 Hf({from:e,messageType:c.type,closer:c.closer.map(jf),providers:c.providers.map(jf),record:c.record==null?void 0:pr.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 On({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 D("Message type was missing");this.log("sending %s to %p",t.type,e),yield J8({peer:e},n),yield Q8({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 Hf({from:e,messageType:o},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),yield On({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await o7(e).write(t,Ui,n)}async _writeReadMessage(e,t,n){let o=o7(e);await o.write(t,Ui,n);let i=await o.read(Ui,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:jf(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:jf(s)})}),i}};function Fs(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 $s=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 mr(e.id);this.addWithKadId(e,t)}addWithKadId(e,t){if(this.peerDistances.find(i=>i.peer.id.equals(e.id))!=null)return;let n={peer:e,distance:sn(this.originDhtKey,t)},o=!1;for(let i=0;i<this.peerDistances.length;i++){let s=Fs(this.peerDistances[i].distance,n.distance);if(s===0||s===1){o=!0,this.peerDistances.splice(i,0,n);break}}o||this.peerDistances.push(n),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await mr(e),n=sn(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return Fs(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var m2=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`),this.findPeer=e.metrics?.traceFunction("libp2p.kadDHT.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.kadDHT.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}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:We.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=rI(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let i=$t(o.record.value),s=ei(i);if(!s.equals(e))throw new xi("public key does not match id");if(s.publicKey==null)throw new xi("public key missing");yield qf({from:e,value:o.record.value},t)}throw new Bs(`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 n2({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:We.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 u=l.closer.find(d=>d.id.equals(e));u!=null&&(yield n2({from:l.from,peer:u},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}n||(yield On({from:this.peerId,error:new ze("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Ms(e),o=this.routingTable.closestPeers(n),i=this,s=new $s(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",M(e,"base32"),c);let u={type:We.FIND_NODE,key:e};yield*i.network.sendRequest(c,u,{...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 n2({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 On({from:o.from,error:new Bs(s)},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new e2("invalid record received");await vu(this.validators,new pr(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=[];try{let c=Ye(e),l=qt(c),u=await this.peerStore.get(l);n.push({id:u.id,multiaddrs:u.addresses.map(({multiaddr:d})=>d)})}catch{}let o=await Ms(e),i=this.routingTable.closestPeers(o),s=await mr(t),a=sn(s,o);for(let c of i){let l=await mr(c),u=sn(l,o);if(Fs(u,a)===-1)try{let d=await this.peerStore.get(c);n.push({id:c,multiaddrs:d.addresses.map(({multiaddr:h})=>h)})}catch(d){if(d.name!=="NotFoundError")throw d}}return n.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",n.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),n}};var g2=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=i2(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{this.log("get providers for %c",e);let n=await this.loadProviders(e);return this.log("got %d providers for %c",n.size,e),[...n.keys()]}finally{t()}}async writeProviderEntry(e,t,n=new Date){let o=i2(this.datastorePrefix,e,t),i=Fe(n.getTime());await this.datastore.put(o,i)}async loadProviders(e){let t=new ir,n=i2(this.datastorePrefix,e);for await(let o of this.datastore.query({prefix:n.toString()})){let{peerId:i}=o2(o.key);t.set(i,s2(o.value))}return t}};async function*uI(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:i,alpha:s,pathIndex:a,numPaths:c,queryFuncTimeout:l,log:u,peersSeen:d,connectionManager:h}=r,m=new $r({concurrency:s,sort:(y,x)=>Fs(y.options.distance,x.options.distance)}),g=await Ms(e);function w(y,x){if(y==null)return;d.add(y);let S=sn(x,g);m.add(async()=>{let v=[o];l!=null&&v.push(AbortSignal.timeout(l));let N=Ne(v);try{for await(let W of i({...r,key:e,peer:y,signal:N,pathIndex:a,numPaths:c})){if(N.aborted)return;if(W.name==="PEER_RESPONSE")for(let H of W.closer){if(d.has(H.id)){u.trace("already seen %p in query",H.id);continue}if(n.equals(H.id)){u("not querying ourselves");continue}if(!await h.isDialable(H.multiaddrs)){u("not querying undialable peer");continue}let $=await mr(H.id),P=sn($,g);if(Fs(P,S)!==-1){u.trace("skipping %p as they are not closer to %b than %p",H.id,e,y);continue}u.trace("querying closer peer %p",H.id),w(H.id,$)}m.safeDispatchEvent("completed",{detail:W})}}catch(W){if(!o.aborted)return On({from:y,error:W},r)}finally{N.clear()}},{distance:S}).catch(v=>{u.error(v)})}w(t,await mr(t));try{for await(let y of m.toGenerator({signal:o}))y!=null&&(yield y)}catch(y){throw o.aborted?new J0("Query aborted"):y}}var y2=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??Z0,this.alpha=t.alpha??wu,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.shutDownController=new AbortController,this.shutDownController.signal,this.running=!1}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutDownController=new AbortController,this.shutDownController.signal,void 0)}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(z_);n={...n,signal:c}}let o=new AbortController,i=Ne([this.shutDownController.signal,o.signal,n.signal]);o.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+M(e,"base58btc")),a=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial query-self query before continuing"),await dt(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await Ms(e),l=this.routingTable.closestPeers(c),u=l.slice(0,Math.min(this.disjointPaths,l.length));if(l.length===0){s.error("Running query with no peers");return}let d=new jr,h=u.map((m,g)=>uI({...n,key:e,startingPeer:m,ourPeerId:this.peerId,signal:i,query:t,pathIndex:g,numPaths:u.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:s,peersSeen:d,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let m of Kr(...h)){if(m.name==="QUERY_ERROR"&&s.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}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 m$(r){return r[Symbol.asyncIterator]!=null}function g$(r){if(m$(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 w2=g$;var y$=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 w$(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:u}=y$(r),d=(...m)=>{let g=t.multiArgs?m:m[0];t.filter&&!t.filter(g)||(c.push(g),t.count===c.length&&(n(),i(c)))},h=m=>{n(),s(m)};n=()=>{for(let m of a)u(m,d);for(let m of t.rejectionEvents)u(m,h)};for(let m of a)l(m,d);for(let m of t.rejectionEvents)l(m,h);t.signal&&t.signal.addEventListener("abort",()=>{h(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=Ao(o,{milliseconds:t.timeout});return i.cancel=n,i}return o}function dI(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=w$(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}var b2=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??Z0,this.interval=t.interval??H_,this.initialInterval=t.initialInterval??q_,this.queryTimeout=t.queryTimeout??j_,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=a2(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=de(),this.running){this.controller=new AbortController;let e=[this.controller.signal];if(this.initialQuerySelfHasRun==null){let n=AbortSignal.timeout(this.queryTimeout);e.push(n)}let t=Ne(e);this.controller.signal;try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await dI(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 rr(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>as(i,this.count),async i=>w2(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 x2=class extends Le{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 $r({concurrency:t.concurrency??$_,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new Mo({...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??F_,this.maxQueueSize=t.maxQueueSize??K_,this.validity=t.validity??U_,this.interval=t.interval??V_,this.contentRouting=t.contentRouting,this.lock=t.lock,this.running=!1,this.reprovide=a2(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,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}=o2(t.key),i=s2(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 Cr(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var b$=20,x$=5e3,v$="kad-close",E$=50,v2=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??x$,this.peerSetSize=t.peerSetSize??b$,this.closeTagName=t.closeTagName??v$,this.closeTagValue=t.closeTagValue??E$,this.closestPeers=new jr,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await mr(this.components.peerId);this.newPeers=new $s(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 jr(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},[X8]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[X8]:void 0}})})])}};function Wf(r){return Array.isArray(r?.peers)}var E2=class{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e){this.prefixLength=e.prefixLength??fI,this.kBucketSize=e.kBucketSize??i7,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfOldContactsToPing??hI,this.lastPingThreshold=e.lastPingThreshold??pI,this.ping=e.ping,this.verify=e.verify,this.onAdd=e.onAdd,this.onRemove=e.onRemove,this.addingPeerMap=new ir,this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e){this.localPeer={peerId:e,kadId:await mr(e),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await mr(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(!A$(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 $s(e,t);for(let o of this.toIterable())n.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*Jr(n.peers,o=>o.id)}count(){function e(t){if(Wf(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(Wf(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+M(sn(e,t),"base16"))}_determineBucket(e){let t=M(e,"base2");function n(o,i=0){return Wf(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=>ge(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)M(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));S$(e,t,n)}};function S$(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function A$(r,e){return r.lastPing<Date.now()-e}var i7=20,fI=6;var _$=20,I$=100,hI=3;var T$=20,C$=100,mI="kad-peer",k$=1,pI=6e5,P$=!0,R$=1e3,S2=class extends Le{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??i7,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??mI,this.peerTagValue=t.peerTagValue??k$,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??P$,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??R$,this.pingOldContactQueue=new lr({concurrency:t.pingOldContactConcurrency??T$,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??C$}),this.pingOldContactTimeout=new Mo({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new lr({concurrency:t.pingNewContactConcurrency??_$,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??I$}),this.pingNewContactTimeout=new Mo({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new E2({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 v2(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 cr(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(mI)],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 Tr(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=Ne([c,a?.signal]);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 Bo(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=Ne([n,t?.signal]);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:We.PING},t))if(o.type===A2.PEER_RESPONSE)return o.messageType===We.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 mr(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 mr(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(Wf(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 gI=[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 _2=15,I2=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??W_,this.refreshQueryTimeout=s??G_,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);let s=await w2(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>_2&&(e=_2);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=qr(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=Ye(o);return qt(i)}async _makePeerId(e,t,n){if(n>_2)throw new Error(`Cannot generate peer ID for common prefix length greater than ${_2}`);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=gI[c],u=new ArrayBuffer(34),d=new DataView(u,0,u.byteLength);return d.setUint8(0,yt.code),d.setUint8(1,32),d.setUint32(2,l,!1),new Uint8Array(d.buffer,d.byteOffset,d.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 T2=class{peerId;providers;peerStore;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.peerId=e.peerId,this.providers=t.providers,this.peerStore=e.peerStore}async handle(e,t){if(t.key==null||t.key.length===0)throw new Oe("Missing key");let n;try{n=le.decode(t.key)}catch{throw new Oe("Invalid CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),this.log("%p asked us, %p to store provider record for for %c",e,this.peerId,n),await Promise.all(t.providers.map(async o=>{let i=Ye(o.id),s=qt(i),a=o.multiaddrs.map(c=>oe(c));if(!e.equals(s)){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,a),await this.providers.addProvider(n,s),await this.peerStore.merge(s,{multiaddrs:a})}))}};var C2=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 Oe("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);ge(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(Ie("p2p").code))});let o={type:We.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 k2=class{peerId;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.peerId=e.peerId,this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new Oe("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=le.decode(t.key)}catch{throw new Oe("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([tc(Jr(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:u})=>u)}})),this.peerRouting.getCloserPeersOffline(t.key,this.peerId)]),s={type:We.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:i.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)})),providers:o.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))};return this.log("got %s providers %s closerPeers",s.providers.length,s.closer.length),s}async _getAddresses(e){return[]}};var P2=class{peerStore;datastore;peerRouting;log;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.datastorePrefix=`${t.datastorePrefix}/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 Oe("Invalid key");let o={type:We.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(nI(n)){this.log("is public key");let a=oI(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new ze("No public key found in key book");c=nr(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new pr(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=Us(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=pr.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>B_){await this.datastore.delete(t);return}return o}};var R2=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 N2=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.datastorePrefix}/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 Oe(o)}try{let o=pr.deserialize(t.record);await vu(this.validators,o),o.timeReceived=new Date;let i=Us(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 D2=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={[We.GET_VALUE.toString()]:new P2(e,t),[We.PUT_VALUE.toString()]:new N2(e,t),[We.FIND_NODE.toString()]:new C2(e,t),[We.ADD_PROVIDER.toString()]:new T2(e,t),[We.GET_PROVIDERS.toString()]:new k2(e,t),[We.PING.toString()]:new R2(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,s=this;await rr(n,a=>mo(a),async function*(a){for await(let c of a){let l=Ui.decode(c);t=l.type,s.log("incoming %s from %p",l.type,i);let u=await s.handleMessage(i,l);u!=null&&(yield Ui.encode(u))}},a=>po(a),n)}).catch(n=>{this.log.error("error handling %s RPC message from %p - %e",t,e.connection.remotePeer,n)})}};var O2=class extends Le{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 s7=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await Cr(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 Cr(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 ze("Could not find value for key")}},a7=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 ze("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},N$=32,D$=64,L2=class extends Le{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??M_,this.kBucketSize=t.kBucketSize??20,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??N$,this.maxOutboundStreams=t.maxOutboundStreams??D$,this.peerInfoMapper=t.peerInfoMapper??tI;let a=ja();this.providers=new g2(e,{...t.providers,logPrefix:n,datastorePrefix:o,lock:a}),this.validators={...eI,...t.validators},this.selectors={...J_,...t.selectors},this.network=new p2(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:i}),this.routingTable=new S2(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=de();t.allowQueryWithZeroPeers===!0&&c.resolve(),this.queryManager=new y2(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:n,metricsPrefix:i,initialQuerySelfHasRun:c,routingTable:this.routingTable}),this.peerRouting=new m2(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new c2(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new l2(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new I2(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new D2(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:i,datastorePrefix:o,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new O2(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new b2(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:c,routingTable:this.routingTable,operationMetrics:s}),this.reprovider=new x2(e,{...t.reprovide,logPrefix:n,metricsPrefix:i,datastorePrefix:o,contentRouting:this.contentRouting,lock:a,operationMetrics:s}),this.network.addEventListener("peer",l=>{let u=l.detail;this.onPeerConnect(u).catch(d=>{this.log.error("could not add %p to routing table",u.id,d)}),this.dispatchEvent(new CustomEvent("peer",{detail:u}))}),this.topologyListener.addEventListener("peer",l=>{let u=l.detail;Promise.resolve().then(async()=>{let d=await this.components.peerStore.get(u),h={id:u,multiaddrs:d.addresses.map(({multiaddr:m})=>m),protocols:d.protocols};await this.onPeerConnect(h)}).catch(d=>{this.log.error("could not add %p to routing table - %e",u,d)})}),this.dhtPeerRouting=new a7(this),this.dhtContentRouting=new s7(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",l=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let u=l.detail.peer.addresses.some(({multiaddr:h})=>iI(h)),d=this.getMode();u&&d==="client"?await this.setMode("server"):d==="server"&&!u&&await this.setMode("client")}).catch(u=>{this.log.error("error setting dht server mode",u)})}),this.get=cc(this.get.bind(this),s,"GET_VALUE"),this.findProviders=cc(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=cc(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=cc(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=cc(this.provide.bind(this),s,"PROVIDE"),this.put=cc(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[Xe]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[Sn]=["@libp2p/identify"];get[jo](){return this.dhtContentRouting}get[Wo](){return this.dhtPeerRouting}get[ma](){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 cr(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await cr(this.querySelf))}async stop(){this.running=!1,await Tr(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 A2;(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"})(A2||(A2={}));function yI(r={}){return e=>new L2(e,r)}var II=Vt(_I(),1),_u=II.default;var AT=Vt(LI(),1);var Iu={};Pt(Iu,{create:()=>Q$,derivedEmptyPasswordKey:()=>U2});var U2={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function Q$(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=en.get();t*=8;async function c(d,h){let m=a.getRandomValues(new Uint8Array(i)),g=a.getRandomValues(new Uint8Array(n)),w={name:e,iv:g};typeof h=="string"&&(h=V(h));let y;if(h.length===0){y=await a.subtle.importKey("jwk",U2,{name:"AES-GCM"},!0,["encrypt"]);try{let S={name:"PBKDF2",salt:m,iterations:s,hash:{name:o}},v=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(S,v,{name:e,length:t},!0,["encrypt"])}catch{y=await a.subtle.importKey("jwk",U2,{name:"AES-GCM"},!0,["encrypt"])}}else{let S={name:"PBKDF2",salt:m,iterations:s,hash:{name:o}},v=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(S,v,{name:e,length:t},!0,["encrypt"])}let x=await a.subtle.encrypt(w,y,d);return st([m,w.iv,new Uint8Array(x)])}async function l(d,h){let m=d.subarray(0,i),g=d.subarray(i,i+n),w=d.subarray(i+n),y={name:e,iv:g};typeof h=="string"&&(h=V(h));let x;if(h.length===0)try{let v={name:"PBKDF2",salt:m,iterations:s,hash:{name:o}},N=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);x=await a.subtle.deriveKey(v,N,{name:e,length:t},!0,["decrypt"])}catch{x=await a.subtle.importKey("jwk",U2,{name:"AES-GCM"},!0,["decrypt"])}else{let v={name:"PBKDF2",salt:m,iterations:s,hash:{name:o}},N=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);x=await a.subtle.deriveKey(v,N,{name:e,length:t},!0,["decrypt"])}let S=await a.subtle.decrypt(y,x,w);return new Uint8Array(S)}return{encrypt:c,decrypt:l}}var Jn={};Pt(Jn,{Any:()=>si,BaseBlock:()=>Wt,BaseStringBlock:()=>Yf,BitString:()=>Uo,BmpString:()=>fc,Boolean:()=>uc,CharacterString:()=>vc,Choice:()=>ku,Constructed:()=>Zt,DATE:()=>rh,DateTime:()=>oh,Duration:()=>ih,EndOfContent:()=>Qf,Enumerated:()=>dc,GeneralString:()=>xc,GeneralizedTime:()=>Ec,GraphicString:()=>bc,HexBlock:()=>ai,IA5String:()=>wc,Integer:()=>Ln,Null:()=>un,NumericString:()=>pc,ObjectIdentifier:()=>Bn,OctetString:()=>Mr,Primitive:()=>Vi,PrintableString:()=>mc,RawData:()=>f7,RelativeObjectIdentifier:()=>th,Repeated:()=>Sc,Sequence:()=>_t,Set:()=>dn,TIME:()=>sh,TeletexString:()=>gc,TimeOfDay:()=>nh,UTCTime:()=>qs,UniversalString:()=>hc,Utf8String:()=>Zn,ValueBlock:()=>gr,VideotexString:()=>yc,ViewWriter:()=>Cu,VisibleString:()=>Hs,compareSchema:()=>Vs,fromBER:()=>Mn,verifySchema:()=>wK});var Me=Vt($i());function lc(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 Ks(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 u=a-1;u>=0;u--){let d=Math.pow(2,u*e);l[i-u-1]=Math.floor(o/d),o-=l[i-u-1]*d}return c}s*=Math.pow(2,e)}return new ArrayBuffer(0)}function K2(...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 u7(){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=lc(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,lc(i,8)-n}function BI(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=Ks(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=Ks(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 MI(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 cn(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 Zge=Math.log(2);function V2(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function h7(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 Hi(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 Cu=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return h7(this.items)}},Gf=[new Uint8Array([1])],UI="0123456789",d7="name",FI="valueHexView",sK="isHexOnly",aK="idBlock",cK="tagClass",lK="tagNumber",uK="isConstructed",dK="fromBER",fK="toBER",hK="local",ln="",Fo=new ArrayBuffer(0),ng=new Uint8Array(0),Xf="EndOfContent",KI="OCTET STRING",VI="BIT STRING";function ai(r){var e;return e=class extends r{get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}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):ng}fromBER(n,o,i){let s=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!Hi(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",Fo)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:Me.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var Ki=class{static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}constructor({blockLength:e=0,error:t=ln,warnings:n=[],valueBeforeDecode:o=ng}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=Me.BufferSourceConverter.toUint8Array(o)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:Me.Convert.ToHex(this.valueBeforeDecodeView)}}};Ki.NAME="baseBlock";var gr=class extends Ki{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'")}};gr.NAME="valueBlock";var H2=class extends ai(Ki){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):ng,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",Fo}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=Ks(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(!Hi(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),u=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===u){u+=255;let h=new Uint8Array(u);for(let m=0;m<l.length;m++)h[m]=l[m];l=this.valueHexView=new Uint8Array(u)}}this.blockLength=c+1,l[c-1]=i[c]&127;let d=new Uint8Array(c);for(let h=0;h<c;h++)d[h]=l[h];l=this.valueHexView=new Uint8Array(c),l.set(d),this.blockLength<=9?this.tagNumber=lc(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}}};H2.NAME="identificationBlock";var q2=class extends Ki{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(!Hi(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=lc(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=Ks(this.length,8);if(o.byteLength>127)return this.error="Too big length",Fo;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}}};q2.NAME="lengthBlock";var ce={},Wt=class extends Ki{constructor({name:e=ln,optional:t=!1,primitiveSchema:n,...o}={},i){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new H2(o),this.lenBlock=new q2(o),this.valueBlock=i?new i(o):new gr(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 Cu;t||HI(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?Fo: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(){let e=this.constructor.NAME,t=Me.Convert.ToHex(this.valueBlock.valueBeforeDecodeView);return`${e} : ${t}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return MI(t,n)}};Wt.NAME="BaseBlock";function HI(r){var e;if(r instanceof ce.Constructed)for(let t of r.valueBlock.value)HI(t)&&(r.lenBlock.isIndefiniteForm=!0);return!!(!((e=r.lenBlock)===null||e===void 0)&&e.isIndefiniteForm)}var Yf=class extends Wt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor({value:e=ln,...t}={},n){super(t,n),e&&this.fromString(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}'`}};Yf.NAME="BaseStringBlock";var j2=class extends ai(gr){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};j2.NAME="PrimitiveValueBlock";var qI,Vi=class extends Wt{constructor(e={}){super(e,j2),this.idBlock.isConstructed=!1}};qI=Vi;ce.Primitive=qI;Vi.NAME="PRIMITIVE";function pK(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 Pu(r,e=0,t=r.length){let n=e,o=new Wt({},gr),i=new Ki;if(!Hi(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=Wt;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=ce.EndOfContent;break;case 1:c=ce.Boolean;break;case 2:c=ce.Integer;break;case 3:c=ce.BitString;break;case 4:c=ce.OctetString;break;case 5:c=ce.Null;break;case 6:c=ce.ObjectIdentifier;break;case 10:c=ce.Enumerated;break;case 12:c=ce.Utf8String;break;case 13:c=ce.RelativeObjectIdentifier;break;case 14:c=ce.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=ce.Sequence;break;case 17:c=ce.Set;break;case 18:c=ce.NumericString;break;case 19:c=ce.PrintableString;break;case 20:c=ce.TeletexString;break;case 21:c=ce.VideotexString;break;case 22:c=ce.IA5String;break;case 23:c=ce.UTCTime;break;case 24:c=ce.GeneralizedTime;break;case 25:c=ce.GraphicString;break;case 26:c=ce.VisibleString;break;case 27:c=ce.GeneralString;break;case 28:c=ce.UniversalString;break;case 29:c=ce.CharacterString;break;case 30:c=ce.BmpString;break;case 31:c=ce.DATE;break;case 32:c=ce.TimeOfDay;break;case 33:c=ce.DateTime;break;case 34:c=ce.Duration;break;default:{let l=o.idBlock.isConstructed?new ce.Constructed:new ce.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?ce.Constructed:ce.Primitive}return o=pK(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 Mn(r){if(!r.byteLength){let e=new Wt({},gr);return e.error="Input buffer has zero length",{offset:-1,result:e}}return Pu(Me.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function mK(r,e){return r?1:e}var ii=class extends gr{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(!Hi(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(;mK(this.isIndefiniteForm,n)>0;){let s=Pu(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===Xf)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Xf?this.value.pop():this.warnings.push("No EndOfContent block encoded")),i}toBER(e,t){let n=t||new Cu;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?Fo:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};ii.NAME="ConstructedValueBlock";var jI,Zt=class extends Wt{constructor(e={}){super(e,ii),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(`
|
|
15
15
|
`).map(o=>` ${o}`).join(`
|
|
16
16
|
`));let t=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${t} :
|
|
17
17
|
${e.join(`
|
|
18
|
-
`)}`:`${t} :`}};pw=Wo;G.Constructed=pw;Wo.NAME="CONSTRUCTED";var If=class extends Ft{fromBER(e,t,n){return t}toBER(e){return dn}};If.override="EndOfContentValueBlock";var mw,Tf=class extends At{constructor(e={}){super(e,If),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};mw=Tf;G.EndOfContent=mw;Tf.NAME=zc;var gw,Ki=class extends At{constructor(e={}){super(e,Ft),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}`}};gw=Ki;G.Null=gw;Ki.NAME="NULL";var _f=class extends no(Ft){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 ro(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,H3.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};_f.NAME="BooleanValueBlock";var yw,Cf=class extends At{constructor(e={}){super(e,_f),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}`}};yw=Cf;G.Boolean=yw;Cf.NAME="BOOLEAN";var kf=class extends no(Tn){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=Tn.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===zc){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(s!==uw)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?Tn.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};kf.NAME="OctetStringValueBlock";var ww,Jn=class r extends At{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},kf),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=oh(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?Wo.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)}};ww=Jn;G.OctetString=ww;Jn.NAME=uw;var Pf=class extends no(Tn){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=Tn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===zc){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==dw)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(!ro(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=oh(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 Tn.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return dn;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}}};Pf.NAME="BitStringValueBlock";var bw,Rf=class extends At{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},Pf),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 Wo.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)}`}}};bw=Rf;G.BitString=bw;Rf.NAME=dw;var xw;function eP(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,u=c<s?s:c,d=0;for(let f=u;f>=0;f--,d++){switch(!0){case d<a.length:l=i[s-d]+a[c-d]+t[0];break;default:l=i[s-d]+t[0]}switch(t[0]=l/10,!0){case d>=i.length:i=wf(new Uint8Array([l%10]),i);break;default:i[s-d]=l%10}}return t[0]>0&&(i=wf(t,i)),i}function lw(r){if(r>=Hc.length)for(let e=Hc.length;e<=r;e++){let t=new Uint8Array([0]),n=Hc[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=wf(t,n)),Hc.push(n)}return Hc[r]}function tP(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,u=0;for(let d=c;d>=0;d--,u++)switch(l=i[s-u]-a[c-u]-t,!0){case l<0:t=1,i[s-u]=l+10;break;default:t=0,i[s-u]=l}if(t>0)for(let d=s-c+1;d>=0;d--,u++)if(l=i[s-u]-t,l<0)t=1,i[s-u]=l+10;else{t=0,i[s-u]=l;break}return i.slice()}var Wc=class extends no(Ft){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=H3.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(sw(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)!==0?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=tP(lw(n),t),s="-";break;default:t=eP(t,lw(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(s+=cw.charAt(t[c]));return a===!1&&(s+=cw.charAt(0)),s}};xw=Wc;Wc.NAME="IntegerValueBlock";Object.defineProperty(xw.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var Ew,eo=class r extends At{constructor(e={}){super(e,Wc),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return bf(),BigInt(this.valueBlock.toString())}static fromBigInt(e){bf();let t=BigInt(e),n=new qc,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,u=ye.BufferSourceConverter.toUint8Array(ye.Convert.FromHex(l.toString(16)));u[0]|=128,n.write(u)}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()}`}};Ew=eo;G.Integer=Ew;eo.NAME="INTEGER";var vw,Df=class extends eo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};vw=Df;G.Enumerated=vw;Df.NAME="ENUMERATED";var Gc=class extends no(Ft){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(!ro(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)!==0);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)!==0?(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=$i(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){bf();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=zo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",dn;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}}};Gc.NAME="sidBlock";var Lf=class extends Ft{constructor({value:e=ua,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Gc;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,dn;t.push(o)}return q3(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 Gc;if(o>Number.MAX_SAFE_INTEGER){bf();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}};Lf.NAME="ObjectIdentifierValueBlock";var Sw,_n=class extends At{constructor(e={}){super(e,Lf),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()}}};Sw=_n;G.ObjectIdentifier=Sw;_n.NAME="OBJECT IDENTIFIER";var Qc=class extends no(jn){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(!ro(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)!==0);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)!==0?(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=$i(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=zo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",dn;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}}};Qc.NAME="relativeSidBlock";var Nf=class extends Ft{constructor({value:e=ua,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Qc;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,dn;n.push(i)}return q3(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 Qc;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}};Nf.NAME="RelativeObjectIdentifierValueBlock";var Aw,Of=class extends At{constructor(e={}){super(e,Nf),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()}}};Aw=Of;G.RelativeObjectIdentifier=Aw;Of.NAME="RelativeObjectIdentifier";var Iw,lr=class extends Wo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};Iw=lr;G.Sequence=Iw;lr.NAME="SEQUENCE";var Tw,Mf=class extends Wo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};Tw=Mf;G.Set=Tw;Mf.NAME="SET";var Bf=class extends no(Ft){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=ua}toJSON(){return{...super.toJSON(),value:this.value}}};Bf.NAME="StringValueBlock";var Uf=class extends Bf{};Uf.NAME="SimpleStringValueBlock";var Xt=class extends vf{constructor({...e}={}){super(e,Uf)}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}};Xt.NAME="SIMPLE STRING";var Ff=class extends Xt{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}};Ff.NAME="Utf8StringValueBlock";var _w,to=class extends Ff{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};_w=to;G.Utf8String=_w;to.NAME="UTF8String";var Vf=class extends Xt{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))}};Vf.NAME="BmpStringValueBlock";var Cw,$f=class extends Vf{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};Cw=$f;G.BmpString=Cw;$f.NAME="BMPString";var Kf=class extends Xt{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=zo(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}};Kf.NAME="UniversalStringValueBlock";var kw,Hf=class extends Kf{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};kw=Hf;G.UniversalString=kw;Hf.NAME="UniversalString";var Pw,qf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};Pw=qf;G.NumericString=Pw;qf.NAME="NumericString";var Rw,zf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};Rw=zf;G.PrintableString=Rw;zf.NAME="PrintableString";var Dw,Wf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};Dw=Wf;G.TeletexString=Dw;Wf.NAME="TeletexString";var Lw,Gf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};Lw=Gf;G.VideotexString=Lw;Gf.NAME="VideotexString";var Nw,Qf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};Nw=Qf;G.IA5String=Nw;Qf.NAME="IA5String";var Ow,Yf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};Ow=Yf;G.GraphicString=Ow;Yf.NAME="GraphicString";var Mw,Yc=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};Mw=Yc;G.VisibleString=Mw;Yc.NAME="VisibleString";var Bw,Xf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};Bw=Xf;G.GeneralString=Bw;Xf.NAME="GeneralString";var Uw,Zf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};Uw=Zf;G.CharacterString=Uw;Zf.NAME="CharacterString";var Fw,Xc=class extends Yc{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]=cr(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=cr(this.month,2),t[2]=cr(this.day,2),t[3]=cr(this.hour,2),t[4]=cr(this.minute,2),t[5]=cr(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}}};Fw=Xc;G.UTCTime=Fw;Xc.NAME="UTCTime";var Vw,jf=class extends Xc{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 d=new Number(e[e.length-1]);if(isNaN(d.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 d=1,f=n.indexOf("+"),h="";if(f===-1&&(f=n.indexOf("-"),d=-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=d*p,h.length===4){if(p=parseInt(h.substring(2,4),10),isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");c=d*p}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let d=new Number(`0${n.substring(l)}`);if(isNaN(d.valueOf()))throw new Error("Wrong input string for conversion");i=d.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 d=60*i;this.minute=Math.floor(d),d=60*(d-this.minute),this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===12:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=60*i;this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===14:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=1e3*i;this.millisecond=Math.floor(d)}break;default:throw new Error("Wrong input string for conversion")}let u=s.exec(o);if(u===null)throw new Error("Wrong input string for conversion");for(let d=1;d<u.length;d++)switch(d){case 1:this.year=parseInt(u[d],10);break;case 2:this.month=parseInt(u[d],10);break;case 3:this.day=parseInt(u[d],10);break;case 4:this.hour=parseInt(u[d],10)+a;break;case 5:this.minute=parseInt(u[d],10)+c;break;case 6:this.second=parseInt(u[d],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let d=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=d.getUTCFullYear(),this.month=d.getUTCMonth(),this.day=d.getUTCDay(),this.hour=d.getUTCHours(),this.minute=d.getUTCMinutes(),this.second=d.getUTCSeconds(),this.millisecond=d.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(cr(this.year,4)),t.push(cr(this.month,2)),t.push(cr(this.day,2)),t.push(cr(this.hour,2)),t.push(cr(this.minute,2)),t.push(cr(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(cr(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};Vw=jf;G.GeneralizedTime=Vw;jf.NAME="GeneralizedTime";var $w,Jf=class extends to{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};$w=Jf;G.DATE=$w;Jf.NAME="DATE";var Kw,eh=class extends to{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};Kw=eh;G.TimeOfDay=Kw;eh.NAME="TimeOfDay";var Hw,th=class extends to{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};Hw=th;G.DateTime=Hw;th.NAME="DateTime";var qw,rh=class extends to{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};qw=rh;G.Duration=qw;rh.NAME="Duration";var zw,nh=class extends to{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};zw=nh;G.TIME=zw;nh.NAME="TIME";async function W3(r,e){let n=await ca.create().encrypt(r,e);return ot.encode(n)}async function G3(r,e,t){if(r.type==="RSA")return oP(r,e,t);if(r.type==="Ed25519")return rP(r,e,t);if(r.type==="secp256k1")return nP(r,e,t);throw new Fr}async function rP(r,e,t="libp2p-key"){if(t==="libp2p-key")return W3(Ss(r),e);throw new P(`export format '${t}' is not supported`)}async function nP(r,e,t="libp2p-key"){if(t==="libp2p-key")return W3(Ss(r),e);throw new P("Export format is not supported")}async function oP(r,e,t="pkcs-8"){if(t==="pkcs-8")return iP(r,e);if(t==="libp2p-key")return W3(Ss(r),e);throw new P("Export format is not supported")}async function iP(r,e){let t=tr.get(),o=new lr({value:[new eo({value:0}),new lr({value:[new _n({value:"1.2.840.113549.1.1.1"}),new Ki]}),new Jn({valueHex:r.raw})]}).toBER(),i=new Uint8Array(o,0,o.byteLength),s=zt(16),a=await au(wo,e,s,{c:1e4,dkLen:32}),c=zt(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),u=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,i),d=new lr({value:[new Jn({valueHex:s}),new eo({value:1e4}),new eo({value:32}),new lr({value:[new _n({value:"1.2.840.113549.2.11"}),new Ki]})]}),f=new lr({value:[new _n({value:"1.2.840.113549.1.5.13"}),new lr({value:[new lr({value:[new _n({value:"1.2.840.113549.1.5.12"}),d]}),new lr({value:[new _n({value:"2.16.840.1.101.3.4.1.42"}),new Jn({valueHex:c})]})]})]}),p=new lr({value:[f,new Jn({valueHex:u})]}).toBER(),g=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...O(g,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
|
|
19
|
-
`)}async function Q3(r,e){try{let t=await sP(r,e);return k6(t)}catch{}if(!r.includes("BEGIN"))throw new P("Encrypted key was not a libp2p-key or a PEM file");return aP(r,e)}async function sP(r,e){let t=ot.decode(r);return ca.create().decrypt(t,e)}async function aP(r,e){let t=tr.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let i=N(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=ih(i),{iv:a,salt:c,iterations:l,keySize:u,cipherText:d}=cP(s),f=await au(wo,e,c,{c:l,dkLen:u}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Zc(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,d)),{result:g}=ih(p);n=Yw(g)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let i=N(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=ih(i);n=Yw(s)}else throw new P("Could not parse private key from PEM data");let o=P6(n);if(o.type!=="RSA")throw new P("Could not parse RSA private key from PEM data");return o}function cP(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new P("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 P("Only pkcs5PBKDF2 key derivation functions are supported");let i=n.valueBlock.value[1],s=Zc(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 P("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],u=l.valueBlock.value[0].toString();if(u!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(u!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new P("Only AES-CBC encryption schemes are supported")}}}}let d=Zc(l.valueBlock.value[1].getValue());return{cipherText:Zc(r.valueBlock.value[1].getValue()),salt:s,iterations:a,keySize:c,iv:d}}function Yw(r){return Zc(r.valueBlock.value[2].getValue())}function Zc(r){return new Uint8Array(r,0,r.byteLength)}var lP="/pkcs8/",X3="/info/",jc=new WeakMap,Hi={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 da(r){return r==null||typeof r!="string"?!1:r===(0,Xw.default)(r.trim())&&r.length>0}async function It(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function qi(r){return new Ne(lP+r)}function fa(r){return new Ne(X3+r)}async function uP(r){let e=Ss(r),t=await Qe.digest(e);return be.encode(t.bytes).substring(1)}var sh=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=aa(Y3,t),this.self=t.selfKey??"self",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<Hi.minKeyLength)throw new Error(`dek.keyLength must be least ${Hi.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Hi.minSaltLength)throw new Error(`dek.saltLength must be least ${Hi.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Hi.minIterationCount)throw new Error(`dek.iterationCount must be least ${Hi.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):"";jc.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[Ae]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},Y3),t=Math.ceil(Hi.minSaltLength/3)*3;return e.dek.salt=O(zt(t),"base64"),e}static get options(){return Y3}async findKeyByName(e){if(!da(e))throw await It(),new P(`Invalid key name '${e}'`);let t=fa(e);try{let n=await this.components.datastore.get(t);return JSON.parse(O(n))}catch(n){throw await It(),this.log.error(n),new Ce(`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(O(n.value));if(o.id===e)return o}throw new P(`Key with id '${e}' does not exist.`)}catch(t){throw await It(),t}}async importKey(e,t){if(!da(e))throw await It(),new P(`Invalid key name '${e}'`);if(t==null)throw await It(),new P("Key is required");let n=qi(e);if(await this.components.datastore.has(n))throw await It(),new P(`Key '${e}' already exists`);let i,s;try{i=await uP(t);let l=jc.get(this);if(l==null)throw new P("dek missing");let u=l.dek;s=await G3(t,u,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,N(s)),c.put(fa(e),N(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!da(e))throw await It(),new P(`Invalid key name '${e}'`);let t=qi(e);try{let n=await this.components.datastore.get(t),o=O(n),i=jc.get(this);if(i==null)throw new P("dek missing");let s=i.dek;return await Q3(o,s)}catch(n){throw await It(),n}}async removeKey(e){if(!da(e)||e===this.self)throw await It(),new P(`Invalid key name '${e}'`);let t=qi(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(fa(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(O(n.value)));return t}async renameKey(e,t){if(!da(e)||e===this.self)throw await It(),new P(`Invalid old key name '${e}'`);if(!da(t)||t===this.self)throw await It(),new P(`Invalid new key name '${t}'`);let n=qi(e),o=qi(t),i=fa(e),s=fa(t);if(await this.components.datastore.has(o))throw await It(),new P(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(i),u=JSON.parse(O(l));u.name=t;let d=this.components.datastore.batch();return d.put(o,c),d.put(s,N(JSON.stringify(u))),d.delete(n),d.delete(i),await d.commit(),u}catch(c){throw await It(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await It(),new P(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await It(),new P(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await It(),new P(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=jc.get(this);if(n==null)throw new P("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):"";jc.set(this,{dek:i});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(qi(a.name)),l=O(c),u=await Q3(l,o),d=i.toString(),f=await G3(u,d,u.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(qi(a.name),N(f)),h.put(fa(a.name),N(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function ah(r={}){return e=>new sh(e,r)}var ha=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 Z3}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 xl("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 A1(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)}},Z3=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 Jc=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),j3=Object.freeze({NEW_STREAM:we.NEW_STREAM,MESSAGE:we.MESSAGE_INITIATOR,CLOSE:we.CLOSE_INITIATOR,RESET:we.RESET_INITIATOR}),Zw=Object.freeze({MESSAGE:we.MESSAGE_RECEIVER,CLOSE:we.CLOSE_RECEIVER,RESET:we.RESET_RECEIVER});var J3=1<<20,dP=4<<20,ch=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=J3,t=dP){this._buffer=new ee,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 he("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}=Jw(e),{value:o,offset:i}=Jw(e,n),s=t&7;if(Jc[s]==null)throw new Error(`Invalid type received: ${s}`);if(o>this._maxMessageSize)throw new he("Message size too large");return{id:t>>3,type:s,offset:n+i,length:o}}},fP=128,jw=127;function Jw(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&jw)<<n:(i&jw)*Math.pow(2,n),n+=7}while(i>=fP);return e=o-e,{value:t,offset:e}}var e4=10*1024,t4=class{_pool;_poolOffset;constructor(){this._pool=Be(e4),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;De(e.id<<3|e.type,n,o),o+=ue(e.id<<3|e.type),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null?(De(e.data.length,n,o),o+=ue(e.data.length)):(De(0,n,o),o+=ue(0));let i=n.subarray(this._poolOffset,o);e4-o<100?(this._pool=Be(e4),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)}},hP=new t4;async function*eb(r){for await(let e of r){let t=new ee;hP.write(e,t),yield t}}var lh=class extends Error{constructor(e="Stream input buffer error"){super(e),this.name="StreamInputBufferError"}};var r4=class extends Mo{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?j3:Zw,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:j3.NEW_STREAM,data:new ee(N(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 tb(r){let{id:e,name:t,send:n,onEnd:o,type:i="initiator",maxMsgSize:s=J3}=r;return new r4({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 pP=1024,mP=1024,gP=1024*1024*4,yP=5,wP=500;function rb(r){let e={...r,type:`${Jc[r.type]} (${r.type})`};return r.type===we.NEW_STREAM&&(e.data=O(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===we.MESSAGE_INITIATOR||r.type===we.MESSAGE_RECEIVER)&&(e.data=O(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var uh=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??wP,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=ut(this._source,n=>eb(n)),this.closeController=new AbortController,this.rateLimiter=new ha({points:t.disconnectThreshold??yP,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 mn("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??mP))throw new lo("Too many outbound streams open");if(i.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=tb({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,rb(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=()=>{r1(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new ch(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",rb(e)),e.type===we.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??pP)){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:O(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,Jc[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??gP;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 lh("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 n4=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}[Symbol.toStringTag]="@libp2p/mplex";[Ae]=["@libp2p/stream-multiplexing"];createStreamMuxer(e={}){return new uh(this.components,{...e,...this._init})}};function nb(r={}){return e=>new n4(e,r)}var ob="1.0.0",ib="ping",sb="ipfs";var dh=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??sb}/${ib}/${ob}`,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=Ni(t),i=!1;Promise.resolve().then(async()=>{for(;;){let s=AbortSignal.timeout(this.timeout);s.addEventListener("abort",()=>{t?.abort(new gn("ping timeout"))});let a=await o.read(32,{signal:s});await o.write(a,{signal:s}),i=!0}}).catch(s=>{i&&s.name==="UnexpectedEOFError"&&t.readStatus!=="ready"||(this.log.error("incoming ping from %p failed with error - %e",e.connection.remotePeer,s),t?.abort(s))}).finally(()=>{let s=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,s);let a=AbortSignal.timeout(this.timeout);t.close({signal:a}).catch(c=>{this.log.error("error closing ping stream from %p - %e",e.connection.remotePeer,c),t?.abort(c)})})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=zt(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=Ni(s),[,c]=await Promise.all([a.write(o,t),a.read(32,t)]),l=Date.now()-n;if(!j(o,c.subarray()))throw new gl(`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 ab(r={}){return e=>new dh(e,r)}var Vt;(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=()=>qe(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=ne((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=>re(o,r.codec()),r.decode=(o,i)=>te(o,r.codec(),i)})(Vt||(Vt={}));var cb=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],i4=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),lb="libp2p+webrtc+v1/";var ub=466,db=2*1024*1024,fb=30*1e3,pa=16*1024;function vP(r=pa){let e=ue(r-ue(r)),t=1+ue(Object.keys(Vt.Flag).length-1),n=1,o=r-e-t-n,i=ue(o);return e+t+n+i}var hb=vP(),pb=5e3,mb=5e3,gb=3e4,s4="/webrtc",el="/webrtc-signaling/0.0.1";var yb=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))},SP=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var AP=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var IP=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 TP=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var _P=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var CP=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,kP=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,wb=3,PP=[["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",CP]],bb=[["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 Eb(r){return r?xb(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new _P:typeof navigator<"u"?xb(navigator.userAgent):LP()}function RP(r){return r!==""&&PP.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 xb(r){var e=RP(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new TP;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<wb&&(o=yb(yb([],o,!0),NP(wb-o.length),!0)):o=[];var i=o.join("."),s=DP(r),a=kP.exec(r);return a&&a[1]?new IP(t,i,s,a[1]):new SP(t,i,s)}function DP(r){for(var e=0,t=bb.length;e<t;e++){var n=bb[e],o=n[0],i=n[1],s=i.exec(r);if(s)return o}return null}function LP(){var r=typeof process<"u"&&process.version;return r?new AP(process.version.slice(1)):null}function NP(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var vb=Eb(),tl=vb!=null&&vb.name==="firefox",fh=async function*(){},hh=async r=>{};function Sb(r,e,t=gb,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 Xr(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}async function a4(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??cb.map(e=>({urls:[e]})),r}var Ab=(r=32)=>lb+[...Array(r)].map(()=>i4.at(Math.floor(Math.random()*i4.length))).join("");var zi=class{log;peerConnection;remoteAddr;timeline;metrics;source=fh();sink=hh;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,o=n.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",n.connectionState,"initial state",o),(n.connectionState==="disconnected"||n.connectionState==="failed"||n.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 c4=class extends Mo{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;closeController;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 Xr(this.receiveFinAck.promise,{milliseconds:this.finAckTimeout})}catch(i){this.log.error("error receiving FIN_ACK",i)}}).then(()=>{this.incomingData.end(),this.channel.close(),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??fb,this.maxBufferedAmount=e.maxBufferedAmount??db,this.maxMessageSize=(e.maxMessageSize??pa)-hb,this.receiveFinAck=J(),this.finAckTimeout=e.closeTimeout??pb,this.openTimeout=e.openTimeout??mb,this.closeController=new AbortController,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 jo("Unknown datachannel state")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.log.trace("received onclose event"),this.closeController.abort(),this.receiveFinAck.resolve(),this.close().catch(i=>{this.log.error("error closing stream after channel closed",i)})},this.channel.onerror=o=>{this.log.trace("received onerror event"),this.closeController.abort();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 Dn(this.incomingData)){let i=n.processIncomingProtobuf(o);i!=null&&n.sourcePush(new ee(i))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new jo(`Invalid datachannel state - ${this.channel.readyState}`);if(this.channel.readyState!=="open"){let n=AbortSignal.timeout(this.openTimeout),o=le([this.closeController.signal,n]);try{this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await lt(this.channel,"open",o)}finally{o.clear()}this.log('channel state is now "%s", sending data',this.channel.readyState)}if(t&&this.channel.bufferedAmount>this.maxBufferedAmount){let n=AbortSignal.timeout(this.bufferedAmountLowEventTimeout),o=le([this.closeController.signal,n]);try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await lt(this.channel,"bufferedamountlow",o)}catch(i){throw n.aborted?new gn(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`):i}finally{o.clear()}}try{this.channel.send(e.subarray())}catch(n){this.log.error("error while sending message",n)}}async sendData(e){for(this.log.trace("-> will send %d bytes",e.byteLength),e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxMessageSize),n=e.subarray(0,t),o=Vt.encode({message:n}),i=Vr.single(o);this.log.trace("-> sending message %s",this.channel.readyState),await this._sendMessage(i),this.log.trace("-> sent message %s",this.channel.readyState),e.consume(t)}this.log.trace("-> sent data %s",this.channel.readyState)}async sendReset(){try{await this._sendFlag(Vt.Flag.RESET)}catch(e){this.log.error("failed to send reset - %e",e)}}async sendCloseWrite(e){if(this.channel.readyState!=="open"){this.receiveFinAck.resolve();return}if(await this._sendFlag(Vt.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await et(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(){this.channel.readyState==="open"&&await this._sendFlag(Vt.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Vt.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===Vt.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Vt.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Vt.Flag.RESET&&this.reset(),t.flag===Vt.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Vt.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=Vt.encode({flag:e}),n=Vr.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}};function ma(r){let{channel:e,direction:t}=r;return new c4({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var Go=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??s4,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:muxerfactory"),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=ma({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 l4(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},l4=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??s4,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=n.id,i=ma({channel:n,direction:"inbound",onEnd:()=>{this.#e(i,n),this.log("incoming channel %s ended",o)},logger:this.logger,...this.dataChannelOptions});this.streams.push(i),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(i)},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),Sb(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=fh();sink=hh;newStream(){let e=this.peerConnection.createDataChannel(""),t=e.id;this.log.trace("opened outgoing datachannel with channel id %s",t);let n=ma({channel:e,direction:"outbound",onEnd:()=>{this.#e(n,e),this.log("outgoing channel %s ended",t)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(n),this.metrics?.increment({outgoing_stream:!0}),n}};var ph=globalThis.RTCPeerConnection,mh=globalThis.RTCSessionDescription,Ib=globalThis.RTCIceCandidate;var Qo=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Or=class extends Qo{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var gh=class extends Qo{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var yh=class extends Qo{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},wh=class extends Qo{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=()=>qe(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((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=>re(o,r.codec()),r.decode=(o,i)=>te(o,r.codec(),i)})(ur||(ur={}));var bh=async(r,e,t)=>{try{let n=J();for(OP(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 he("ICE candidate message expected");let i=JSON.parse(o.data??"null");if(i===""||i===null){t.onProgress?.(new W("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let s=new Ib(i);t.log.trace("%s received new ICE candidate %o",t.direction,i);try{t.onProgress?.(new W("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&&xh(r)!=="connected")throw n}};function xh(r){return tl?r.iceConnectionState:r.connectionState}function OP(r,e){r[tl?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(xh(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new ji("RTCPeerConnection was closed"));break;default:break}}}async function Tb({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:i,transportManager:s,log:a,logger:c,onProgress:l}){let{baseAddr:u}=_b(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing base address: %a",u);let d=u.getPeerId();if(d==null)throw new P("Relay peer was missing");let f=i.getConnections(Ve(d)),h,p=!1;f.length===0?(l?.(new W("webrtc:dial-relay")),h=await s.dial(u,{signal:t,onProgress:l}),p=!0):(l?.(new W("webrtc:reuse-relay-connection")),h=f[0]);try{l?.(new W("webrtc:open-signaling-stream"));let g=await h.newStream(el,{signal:t,runOnLimitedConnection:!0}),m=Ge(g).pb(ur),y=new ph(r),x=new Go({logger:c},{peerConnection:y,dataChannelOptions:e});try{let w=y.createDataChannel("init");y.onicecandidate=({candidate:R})=>{let S=JSON.stringify(R?.toJSON()??null);a.trace("initiator sending ICE candidate %o",R),m.write({type:ur.Type.ICE_CANDIDATE,data:S},{signal:t}).catch(A=>{a.error("error sending ICE candidate",A)})},y.onicecandidateerror=R=>{a.error("initiator ICE candidate error",R)};let I=await y.createOffer().catch(R=>{throw a.error("could not execute createOffer",R),new Or("Failed to set createOffer")});a.trace("initiator send SDP offer %s",I.sdp),l?.(new W("webrtc:send-sdp-offer")),await m.write({type:ur.Type.SDP_OFFER,data:I.sdp},{signal:t}),await y.setLocalDescription(I).catch(R=>{throw a.error("could not execute setLocalDescription",R),new Or("Failed to set localDescription")}),l?.(new W("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let M=await m.read({signal:t});if(M.type!==ur.Type.SDP_ANSWER)throw new Or("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",M.data);let D=new mh({type:"answer",sdp:M.data});return await y.setRemoteDescription(D).catch(R=>{throw a.error("could not execute setRemoteDescription",R),new Or("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new W("webrtc:read-ice-candidates")),await bh(y,m,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected, closing init channel"),w.close(),l?.(new W("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await g.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:y,muxerFactory:x}}catch(w){throw a.error("outgoing signaling error",w),y.close(),g.abort(w),w}finally{y.onicecandidate=null,y.onicecandidateerror=null}}finally{if(p)try{await h.close({signal:t})}catch(g){h.abort(g)}}}var Cb=Re(sd.matchers[0],pe("p2p-circuit")),Eh=class r extends me{transportManager;shutdownController;events;constructor(e,t){super(),this.transportManager=e.transportManager,this.events=e.events,this.shutdownController=t.shutdownController,this.onTransportListening=this.onTransportListening.bind(this)}async listen(){this.events.addEventListener("transport:listening",this.onTransportListening)}onTransportListening(e){e.detail.getAddrs().filter(n=>Cb.exactMatch(n)).map(n=>n.encapsulate("/webrtc")).length>0&&this.safeDispatchEvent("listening")}getAddrs(){return this.transportManager.getListeners().filter(e=>!(e instanceof r)).map(e=>e.getAddrs().filter(t=>Cb.exactMatch(t)).map(t=>t.encapsulate("/webrtc"))).flat()}updateAnnounceAddrs(){}async close(){this.events.removeEventListener("transport:listening",this.onTransportListening),this.shutdownController.abort(),queueMicrotask(()=>{this.safeDispatchEvent("close")})}};async function kb({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let i=Ge(e).pb(ur);try{r.onicecandidate=({candidate:u})=>{let d=JSON.stringify(u?.toJSON()??null);o.trace("recipient sending ICE candidate %s",d),i.write({type:ur.Type.ICE_CANDIDATE,data:d},{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 Or(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `);o.trace("recipient received SDP offer %s",a.data);let c=new mh({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(u=>{throw o.error("could not execute setRemoteDescription",u),new Or("Failed to set remoteDescription")});let l=await r.createAnswer().catch(u=>{throw o.error("could not execute createAnswer",u),new Or("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(u=>{throw o.error("could not execute setLocalDescription",u),new Or("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await bh(r,i,{direction:"recipient",signal:t,log:o})}catch(a){if(xh(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=$(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",s),{remoteAddress:s}}var vh=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,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"})})}[so]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[Ae]=["@libp2p/transport"];[dr]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(el,e=>{let t=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);this._onProtocol(e,t).catch(n=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,n)}).finally(()=>{t.clear()})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(el),this._started=!1}createListener(e){return new Eh(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(wc.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 Tb({rtcConfiguration:await a4(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 zi(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,signal:t.signal});return this._closeOnShutdown(o,s),a}async _onProtocol({connection:e,stream:t},n){let o=new ph(await a4(this.init.rtcConfiguration)),i=new Go(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:s}=await kb({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new zi(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,signal:n}),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 _b(r){let e=r.toString().split("/webrtc/");if(e.length!==2)throw new P("webrtc protocol was not present in multiaddr");if(!e[0].includes("/p2p-circuit"))throw new P("p2p-circuit protocol was not present in multiaddr");let t=$(e[0]),o=$("/"+e[1]).getPeerId();if(o==null)throw new P("destination peer id was missing");let i=t.protos().pop();if(i===void 0)throw new P("invalid multiaddr");return i.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:Ve(o)}}var Sh=class extends me{async listen(){throw new yh("WebRTCTransport.createListener")}getAddrs(){return[]}updateAnnounceAddrs(){}async close(){}};var u4=Object.values(oi).map(r=>r.decoder).reduce((r,e)=>r.or(e)),MP=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function Pb(r){return r?.match(MP)?.groups?.fingerprint}function d4(r){let t=r.stringTuples().filter(n=>n[0]===ub).map(n=>n[1])[0];if(t===void 0||t==="")throw new P(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function BP(r){return He.decode(u4.decode(r))}function UP(r){let e=BP(d4(r)),t=FP(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 gh(n,r.toString());return`${t} ${o.join(":").toUpperCase()}`}function Rb(r){let e=r.split(":").map(o=>parseInt(o,16)),t=Uint8Array.from(e),n=Nt(Qe.code,t);return $(`/certhash/${Ea.encode(n.bytes)}`)}function FP(r){switch(r){case 17:return"sha-1";case 18:return"sha-256";case 19:return"sha-512";default:throw new wh(r)}}function Db(r,e){let{host:t,port:n,family:o}=r.toOptions(),i=UP(r);return{type:"answer",sdp:`v=0
|
|
18
|
+
`)}`:`${t} :`}};jI=Zt;ce.Constructed=jI;Zt.NAME="CONSTRUCTED";var W2=class extends gr{fromBER(e,t,n){return t}toBER(e){return Fo}};W2.override="EndOfContentValueBlock";var WI,Qf=class extends Wt{constructor(e={}){super(e,W2),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};WI=Qf;ce.EndOfContent=WI;Qf.NAME=Xf;var GI,un=class extends Wt{constructor(e={}){super(e,gr),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}`}};GI=un;ce.Null=GI;un.NAME="NULL";var G2=class extends ai(gr){get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=Me.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);return Hi(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,u7.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};G2.NAME="BooleanValueBlock";var zI,uc=class extends Wt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor(e={}){super(e,G2),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};zI=uc;ce.Boolean=zI;uc.NAME="BOOLEAN";var z2=class extends ai(ii){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=ii.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===Xf){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(s!==KI)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?ii.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};z2.NAME="OctetStringValueBlock";var p7,Mr=class extends Wt{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},z2),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=Pu(i,0,i.byteLength);s.offset!==-1&&s.offset===n&&(this.valueBlock.value=[s.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Zt.prototype.onAsciiEncoding.call(this);let e=this.constructor.NAME,t=Me.Convert.ToHex(this.valueBlock.valueHexView);return`${e} : ${t}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof p7&&e.push(t.valueBlock.valueHexView);return Me.BufferSourceConverter.concat(e)}};p7=Mr;ce.OctetString=p7;Mr.NAME=KI;var X2=class extends ai(ii){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=ii.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===Xf){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==VI)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(!Hi(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=Pu(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 ii.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return Fo;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}}};X2.NAME="BitStringValueBlock";var XI,Uo=class extends Wt{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},X2),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 Zt.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let s of t)e.push(s.toString(2).padStart(8,"0"));let n=e.join(""),o=this.constructor.NAME,i=n.substring(0,n.length-this.valueBlock.unusedBits);return`${o} : ${i}`}}};XI=Uo;ce.BitString=XI;Uo.NAME=VI;var YI;function gK(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,u=c<s?s:c,d=0;for(let h=u;h>=0;h--,d++){switch(!0){case d<a.length:l=i[s-d]+a[c-d]+t[0];break;default:l=i[s-d]+t[0]}switch(t[0]=l/10,!0){case d>=i.length:i=K2(new Uint8Array([l%10]),i);break;default:i[s-d]=l%10}}return t[0]>0&&(i=K2(t,i)),i}function $I(r){if(r>=Gf.length)for(let e=Gf.length;e<=r;e++){let t=new Uint8Array([0]),n=Gf[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=K2(t,n)),Gf.push(n)}return Gf[r]}function yK(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,u=0;for(let d=c;d>=0;d--,u++)switch(l=i[s-u]-a[c-u]-t,!0){case l<0:t=1,i[s-u]=l+10;break;default:t=0,i[s-u]=l}if(t>0)for(let d=s-c+1;d>=0;d--,u++)if(l=i[s-u]-t,l<0)t=1,i[s-u]=l+10;else{t=0,i[s-u]=l;break}return i.slice()}var Zf=class extends ai(gr){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=u7.call(this)))}constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(BI(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)!==0?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=yK($I(n),t),s="-";break;default:t=gK(t,$I(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(s+=UI.charAt(t[c]));return a===!1&&(s+=UI.charAt(0)),s}};YI=Zf;Zf.NAME="IntegerValueBlock";Object.defineProperty(YI.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var zf,Ln=class extends Wt{constructor(e={}){super(e,Zf),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return V2(),BigInt(this.valueBlock.toString())}static fromBigInt(e){V2();let t=BigInt(e),n=new Cu,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,u=Me.BufferSourceConverter.toUint8Array(Me.Convert.FromHex(l.toString(16)));u[0]|=128,n.write(u)}else i[0]&128&&n.write(new Uint8Array([0])),n.write(i);return new zf({valueHex:n.final()})}convertToDER(){let e=new zf({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new zf({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};zf=Ln;ce.Integer=zf;Ln.NAME="INTEGER";var QI,dc=class extends Ln{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};QI=dc;ce.Enumerated=QI;dc.NAME="ENUMERATED";var Jf=class extends ai(gr){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(!Hi(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)!==0);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)!==0?(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=lc(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){V2();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=Ks(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Fo;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}}};Jf.NAME="sidBlock";var Y2=class extends gr{constructor({value:e=ln,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Jf;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,Fo;t.push(o)}return h7(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 Jf;if(o>Number.MAX_SAFE_INTEGER){V2();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}};Y2.NAME="ObjectIdentifierValueBlock";var ZI,Bn=class extends Wt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,Y2),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};ZI=Bn;ce.ObjectIdentifier=ZI;Bn.NAME="OBJECT IDENTIFIER";var eh=class extends ai(Ki){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(!Hi(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)!==0);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)!==0?(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=lc(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=Ks(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Fo;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}}};eh.NAME="relativeSidBlock";var Q2=class extends gr{constructor({value:e=ln,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new eh;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,Fo;n.push(i)}return h7(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 eh;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}};Q2.NAME="RelativeObjectIdentifierValueBlock";var JI,th=class extends Wt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,Q2),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};JI=th;ce.RelativeObjectIdentifier=JI;th.NAME="RelativeObjectIdentifier";var eT,_t=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};eT=_t;ce.Sequence=eT;_t.NAME="SEQUENCE";var tT,dn=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};tT=dn;ce.Set=tT;dn.NAME="SET";var Z2=class extends ai(gr){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=ln}toJSON(){return{...super.toJSON(),value:this.value}}};Z2.NAME="StringValueBlock";var J2=class extends Z2{};J2.NAME="SimpleStringValueBlock";var Xr=class extends Yf{constructor({...e}={}){super(e,J2)}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}};Xr.NAME="SIMPLE STRING";var eg=class extends Xr{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}};eg.NAME="Utf8StringValueBlock";var rT,Zn=class extends eg{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};rT=Zn;ce.Utf8String=rT;Zn.NAME="UTF8String";var tg=class extends Xr{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))}};tg.NAME="BmpStringValueBlock";var nT,fc=class extends tg{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};nT=fc;ce.BmpString=nT;fc.NAME="BMPString";var rg=class extends Xr{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=Ks(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}};rg.NAME="UniversalStringValueBlock";var oT,hc=class extends rg{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};oT=hc;ce.UniversalString=oT;hc.NAME="UniversalString";var iT,pc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};iT=pc;ce.NumericString=iT;pc.NAME="NumericString";var sT,mc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};sT=mc;ce.PrintableString=sT;mc.NAME="PrintableString";var aT,gc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};aT=gc;ce.TeletexString=aT;gc.NAME="TeletexString";var cT,yc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};cT=yc;ce.VideotexString=cT;yc.NAME="VideotexString";var lT,wc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};lT=wc;ce.IA5String=lT;wc.NAME="IA5String";var uT,bc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};uT=bc;ce.GraphicString=uT;bc.NAME="GraphicString";var dT,Hs=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};dT=Hs;ce.VisibleString=dT;Hs.NAME="VisibleString";var fT,xc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};fT=xc;ce.GeneralString=fT;xc.NAME="GeneralString";var hT,vc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};hT=vc;ce.CharacterString=hT;vc.NAME="CharacterString";var pT,qs=class extends Hs{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]=cn(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=cn(this.month,2),t[2]=cn(this.day,2),t[3]=cn(this.hour,2),t[4]=cn(this.minute,2),t[5]=cn(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}}};pT=qs;ce.UTCTime=pT;qs.NAME="UTCTime";var mT,Ec=class extends qs{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(){let e=Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond);return new Date(e)}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 d=new Number(e[e.length-1]);if(isNaN(d.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 d=1,h=n.indexOf("+"),m="";if(h===-1&&(h=n.indexOf("-"),d=-1),h!==-1){if(m=n.substring(h+1),n=n.substring(0,h),m.length!==2&&m.length!==4)throw new Error("Wrong input string for conversion");let g=parseInt(m.substring(0,2),10);if(isNaN(g.valueOf()))throw new Error("Wrong input string for conversion");if(a=d*g,m.length===4){if(g=parseInt(m.substring(2,4),10),isNaN(g.valueOf()))throw new Error("Wrong input string for conversion");c=d*g}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let d=new Number(`0${n.substring(l)}`);if(isNaN(d.valueOf()))throw new Error("Wrong input string for conversion");i=d.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 d=60*i;this.minute=Math.floor(d),d=60*(d-this.minute),this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===12:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=60*i;this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===14:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=1e3*i;this.millisecond=Math.floor(d)}break;default:throw new Error("Wrong input string for conversion")}let u=s.exec(o);if(u===null)throw new Error("Wrong input string for conversion");for(let d=1;d<u.length;d++)switch(d){case 1:this.year=parseInt(u[d],10);break;case 2:this.month=parseInt(u[d],10);break;case 3:this.day=parseInt(u[d],10);break;case 4:this.hour=parseInt(u[d],10)+a;break;case 5:this.minute=parseInt(u[d],10)+c;break;case 6:this.second=parseInt(u[d],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let d=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=d.getUTCFullYear(),this.month=d.getUTCMonth(),this.day=d.getUTCDay(),this.hour=d.getUTCHours(),this.minute=d.getUTCMinutes(),this.second=d.getUTCSeconds(),this.millisecond=d.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(cn(this.year,4)),t.push(cn(this.month,2)),t.push(cn(this.day,2)),t.push(cn(this.hour,2)),t.push(cn(this.minute,2)),t.push(cn(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(cn(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};mT=Ec;ce.GeneralizedTime=mT;Ec.NAME="GeneralizedTime";var gT,rh=class extends Zn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};gT=rh;ce.DATE=gT;rh.NAME="DATE";var yT,nh=class extends Zn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};yT=nh;ce.TimeOfDay=yT;nh.NAME="TimeOfDay";var wT,oh=class extends Zn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};wT=oh;ce.DateTime=wT;oh.NAME="DateTime";var bT,ih=class extends Zn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};bT=ih;ce.Duration=bT;ih.NAME="Duration";var xT,sh=class extends Zn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};xT=sh;ce.TIME=xT;sh.NAME="TIME";var si=class{constructor({name:e=ln,optional:t=!1}={}){this.name=e,this.optional=t}},ku=class extends si{constructor({value:e=[],...t}={}){super(t),this.value=e}},Sc=class extends si{constructor({value:e=new si,local:t=!1,...n}={}){super(n),this.value=e,this.local=t}},f7=class{get data(){return this.dataView.slice().buffer}set data(e){this.dataView=Me.BufferSourceConverter.toUint8Array(e)}constructor({data:e=ng}={}){this.dataView=Me.BufferSourceConverter.toUint8Array(e)}fromBER(e,t,n){let o=t+n;return this.dataView=Me.BufferSourceConverter.toUint8Array(e).subarray(t,o),o}toBER(e){return this.dataView.slice().buffer}};function Vs(r,e,t){if(t instanceof ku){for(let i of t.value)if(Vs(r,e,i).verified)return{verified:!0,result:r};{let i={verified:!1,result:{error:"Wrong values for Choice type"}};return t.hasOwnProperty(d7)&&(i.name=t.name),i}}if(t instanceof si)return t.hasOwnProperty(d7)&&(r[t.name]=e),{verified:!0,result:r};if(!(r instanceof Object))return{verified:!1,result:{error:"Wrong root object"}};if(!(e instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 data"}};if(!(t instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(aK in t))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(dK in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(fK in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};let n=t.idBlock.toBER(!1);if(n.byteLength===0)return{verified:!1,result:{error:"Error encoding idBlock for ASN.1 schema"}};if(t.idBlock.fromBER(n,0,n.byteLength)===-1)return{verified:!1,result:{error:"Error decoding idBlock for ASN.1 schema"}};if(t.idBlock.hasOwnProperty(cK)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.tagClass!==e.idBlock.tagClass)return{verified:!1,result:r};if(t.idBlock.hasOwnProperty(lK)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.tagNumber!==e.idBlock.tagNumber)return{verified:!1,result:r};if(t.idBlock.hasOwnProperty(uK)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.isConstructed!==e.idBlock.isConstructed)return{verified:!1,result:r};if(!(sK in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.isHexOnly!==e.idBlock.isHexOnly)return{verified:!1,result:r};if(t.idBlock.isHexOnly){if(!(FI in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};let i=t.idBlock.valueHexView,s=e.idBlock.valueHexView;if(i.length!==s.length)return{verified:!1,result:r};for(let a=0;a<i.length;a++)if(i[a]!==s[1])return{verified:!1,result:r}}if(t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,ln),t.name&&(r[t.name]=e)),t instanceof ce.Constructed){let i=0,s={verified:!1,result:{error:"Unknown error"}},a=t.valueBlock.value.length;if(a>0&&t.valueBlock.value[0]instanceof Sc&&(a=e.valueBlock.value.length),a===0)return{verified:!0,result:r};if(e.valueBlock.value.length===0&&t.valueBlock.value.length!==0){let c=!0;for(let l=0;l<t.valueBlock.value.length;l++)c=c&&(t.valueBlock.value[l].optional||!1);return c?{verified:!0,result:r}:(t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,ln),t.name&&delete r[t.name]),r.error="Inconsistent object length",{verified:!1,result:r})}for(let c=0;c<a;c++)if(c-i>=e.valueBlock.value.length){if(t.valueBlock.value[c].optional===!1){let l={verified:!1,result:r};return r.error="Inconsistent length between ASN.1 data and schema",t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,ln),t.name&&(delete r[t.name],l.name=t.name)),l}}else if(t.valueBlock.value[0]instanceof Sc){if(s=Vs(r,e.valueBlock.value[c],t.valueBlock.value[0].value),s.verified===!1)if(t.valueBlock.value[0].optional)i++;else return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,ln),t.name&&delete r[t.name]),s;if(d7 in t.valueBlock.value[0]&&t.valueBlock.value[0].name.length>0){let l={};hK in t.valueBlock.value[0]&&t.valueBlock.value[0].local?l=e:l=r,typeof l[t.valueBlock.value[0].name]>"u"&&(l[t.valueBlock.value[0].name]=[]),l[t.valueBlock.value[0].name].push(e.valueBlock.value[c])}}else if(s=Vs(r,e.valueBlock.value[c-i],t.valueBlock.value[c]),s.verified===!1)if(t.valueBlock.value[c].optional)i++;else return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,ln),t.name&&delete r[t.name]),s;if(s.verified===!1){let c={verified:!1,result:r};return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,ln),t.name&&(delete r[t.name],c.name=t.name)),c}return{verified:!0,result:r}}if(t.primitiveSchema&&FI in e.valueBlock){let i=Pu(e.valueBlock.valueHexView);if(i.offset===-1){let s={verified:!1,result:i.result};return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,ln),t.name&&(delete r[t.name],s.name=t.name)),s}return Vs(r,i.result,t.primitiveSchema)}return{verified:!0,result:r}}function wK(r,e){if(!(e instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 schema type"}};let t=Pu(Me.BufferSourceConverter.toUint8Array(r));return t.offset===-1?{verified:!1,result:t.result}:Vs(t.result,t.result,e)}async function og(r,e){let n=await Iu.create().encrypt(r,e);return Ht.encode(n)}async function m7(r,e,t){if(r.type==="RSA")return EK(r,e,t);if(r.type==="Ed25519")return bK(r,e,t);if(r.type==="secp256k1")return xK(r,e,t);if(r.type==="ECDSA")return vK(r,e,t);throw new ho}async function bK(r,e,t="libp2p-key"){if(t==="libp2p-key")return og(Ua(r),e);throw new D(`export format '${t}' is not supported`)}async function xK(r,e,t="libp2p-key"){if(t==="libp2p-key")return og(Ua(r),e);throw new D("Export format is not supported")}async function vK(r,e,t="libp2p-key"){if(t==="libp2p-key")return og(Ua(r),e);throw new D(`export format '${t}' is not supported`)}async function EK(r,e,t="pkcs-8"){if(t==="pkcs-8")return SK(r,e);if(t==="libp2p-key")return og(Ua(r),e);throw new D("Export format is not supported")}async function SK(r,e){let t=en.get(),o=new _t({value:[new Ln({value:0}),new _t({value:[new Bn({value:"1.2.840.113549.1.1.1"}),new un]}),new Mr({valueHex:r.raw})]}).toBER(),i=new Uint8Array(o,0,o.byteLength),s=qr(16),a=await b1(Si,e,s,{c:1e4,dkLen:32}),c=qr(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),u=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,i),d=new _t({value:[new Mr({valueHex:s}),new Ln({value:1e4}),new Ln({value:32}),new _t({value:[new Bn({value:"1.2.840.113549.2.11"}),new un]})]}),h=new _t({value:[new Bn({value:"1.2.840.113549.1.5.13"}),new _t({value:[new _t({value:[new Bn({value:"1.2.840.113549.1.5.12"}),d]}),new _t({value:[new Bn({value:"2.16.840.1.101.3.4.1.42"}),new Mr({valueHex:c})]})]})]}),g=new _t({value:[h,new Mr({valueHex:u})]}).toBER(),w=new Uint8Array(g,0,g.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...M(w,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
|
|
19
|
+
`)}async function g7(r,e){try{let t=await AK(r,e);return ev(t)}catch{}if(!r.includes("BEGIN"))throw new D("Encrypted key was not a libp2p-key or a PEM file");return _K(r,e)}async function AK(r,e){let t=Ht.decode(r);return Iu.create().decrypt(t,e)}async function _K(r,e){let t=en.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let i=V(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=Mn(i),{iv:a,salt:c,iterations:l,keySize:u,cipherText:d}=IK(s),h=await b1(Si,e,c,{c:l,dkLen:u}),m=await t.subtle.importKey("raw",h,"AES-CBC",!1,["decrypt"]),g=ah(await t.subtle.decrypt({name:"AES-CBC",iv:a},m,d)),{result:w}=Mn(g);n=ST(w)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let i=V(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=Mn(i);n=ST(s)}else throw new D("Could not parse private key from PEM data");let o=tv(n);if(o.type!=="RSA")throw new D("Could not parse RSA private key from PEM data");return o}function IK(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new D("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 D("Only pkcs5PBKDF2 key derivation functions are supported");let i=n.valueBlock.value[1],s=ah(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 D("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],u=l.valueBlock.value[0].toString();if(u!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(u!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new D("Only AES-CBC encryption schemes are supported")}}}}let d=ah(l.valueBlock.value[1].getValue());return{cipherText:ah(r.valueBlock.value[1].getValue()),salt:s,iterations:a,keySize:c,iv:d}}function ST(r){return ah(r.valueBlock.value[2].getValue())}function ah(r){return new Uint8Array(r,0,r.byteLength)}var TK="/pkcs8/",w7="/info/",ch=new WeakMap,Ac={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},y7={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function Ru(r){return r==null||typeof r!="string"?!1:r===(0,AT.default)(r.trim())&&r.length>0}async function yr(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function _c(r){return new ct(TK+r)}function Nu(r){return new ct(w7+r)}async function CK(r){let e=Ua(r),t=await yt.digest(e);return He.encode(t.bytes).substring(1)}var ig=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=_u(y7,t),this.self=t.selfKey??"self",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<Ac.minKeyLength)throw new Error(`dek.keyLength must be least ${Ac.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Ac.minSaltLength)throw new Error(`dek.saltLength must be least ${Ac.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Ac.minIterationCount)throw new Error(`dek.iterationCount must be least ${Ac.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Jd(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";ch.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[Xe]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},y7),t=Math.ceil(Ac.minSaltLength/3)*3;return e.dek.salt=M(qr(t),"base64"),e}static get options(){return y7}async findKeyByName(e){if(!Ru(e))throw await yr(),new D(`Invalid key name '${e}'`);let t=Nu(e);try{let n=await this.components.datastore.get(t);return JSON.parse(M(n))}catch(n){throw await yr(),this.log.error(n),new ze(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:w7};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(M(n.value));if(o.id===e)return o}throw new D(`Key with id '${e}' does not exist.`)}catch(t){throw await yr(),t}}async importKey(e,t){if(!Ru(e))throw await yr(),new D(`Invalid key name '${e}'`);if(t==null)throw await yr(),new D("Key is required");let n=_c(e);if(await this.components.datastore.has(n))throw await yr(),new D(`Key '${e}' already exists`);let i,s;try{i=await CK(t);let l=ch.get(this);if(l==null)throw new D("dek missing");let u=l.dek;s=await m7(t,u,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await yr(),l}let a={name:e,id:i},c=this.components.datastore.batch();return c.put(n,V(s)),c.put(Nu(e),V(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!Ru(e))throw await yr(),new D(`Invalid key name '${e}'`);let t=_c(e);try{let n=await this.components.datastore.get(t),o=M(n),i=ch.get(this);if(i==null)throw new D("dek missing");let s=i.dek;return await g7(o,s)}catch(n){throw await yr(),n}}async removeKey(e){if(!Ru(e)||e===this.self)throw await yr(),new D(`Invalid key name '${e}'`);let t=_c(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(Nu(e)),await o.commit(),n}async listKeys(){let e={prefix:w7},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(M(n.value)));return t}async renameKey(e,t){if(!Ru(e)||e===this.self)throw await yr(),new D(`Invalid old key name '${e}'`);if(!Ru(t)||t===this.self)throw await yr(),new D(`Invalid new key name '${t}'`);let n=_c(e),o=_c(t),i=Nu(e),s=Nu(t);if(await this.components.datastore.has(o))throw await yr(),new D(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(i),u=JSON.parse(M(l));u.name=t;let d=this.components.datastore.batch();return d.put(o,c),d.put(s,V(JSON.stringify(u))),d.delete(n),d.delete(i),await d.commit(),u}catch(c){throw await yr(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await yr(),new D(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await yr(),new D(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await yr(),new D(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=ch.get(this);if(n==null)throw new D("dek missing");let o=n.dek;this.init.pass=t;let i=t!=null&&this.init.dek?.salt!=null?Jd(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";ch.set(this,{dek:i});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(_c(a.name)),l=M(c),u=await g7(l,o),d=i.toString(),h=await m7(u,d,u.type==="RSA"?"pkcs-8":"libp2p-key"),m=this.components.datastore.batch(),g={name:a.name,id:a.id};m.put(_c(a.name),V(h)),m.put(Nu(a.name),V(JSON.stringify(g))),await m.commit()}this.log("keychain reconstructed")}};function sg(r={}){return e=>new ig(e,r)}var Du=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 b7}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 Mp("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 U0(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)}},b7=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 je;(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"})(je||(je={}));var lh=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),x7=Object.freeze({NEW_STREAM:je.NEW_STREAM,MESSAGE:je.MESSAGE_INITIATOR,CLOSE:je.CLOSE_INITIATOR,RESET:je.RESET_INITIATOR}),_T=Object.freeze({MESSAGE:je.MESSAGE_RECEIVER,CLOSE:je.CLOSE_RECEIVER,RESET:je.RESET_RECEIVER});var v7=1<<20,kK=4<<20,ag=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=v7,t=kK){this._buffer=new J,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 Oe("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===je.NEW_STREAM||o===je.MESSAGE_INITIATOR||o===je.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}=TT(e),{value:o,offset:i}=TT(e,n),s=t&7;if(lh[s]==null)throw new Error(`Invalid type received: ${s}`);if(o>this._maxMessageSize)throw new Oe("Message size too large");return{id:t>>3,type:s,offset:n+i,length:o}}},PK=128,IT=127;function TT(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&IT)<<n:(i&IT)*Math.pow(2,n),n+=7}while(i>=PK);return e=o-e,{value:t,offset:e}}var E7=10*1024,S7=class{_pool;_poolOffset;constructor(){this._pool=Ct(E7),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Fe(e.id<<3|e.type,n,o),o+=Ce(e.id<<3|e.type),(e.type===je.NEW_STREAM||e.type===je.MESSAGE_INITIATOR||e.type===je.MESSAGE_RECEIVER)&&e.data!=null?(Fe(e.data.length,n,o),o+=Ce(e.data.length)):(Fe(0,n,o),o+=Ce(0));let i=n.subarray(this._poolOffset,o);E7-o<100?(this._pool=Ct(E7),this._poolOffset=0):this._poolOffset=o,t.append(i),(e.type===je.NEW_STREAM||e.type===je.MESSAGE_INITIATOR||e.type===je.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},RK=new S7;async function*CT(r){for await(let e of r){let t=new J;RK.write(e,t),yield t}}var cg=class extends Error{constructor(e="Stream input buffer error"){super(e),this.name="StreamInputBufferError"}};var A7=class extends Ns{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?x7:_T,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:x7.NEW_STREAM,data:new J(V(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 kT(r){let{id:e,name:t,send:n,onEnd:o,type:i="initiator",maxMsgSize:s=v7}=r;return new A7({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 NK=1024,DK=1024,OK=1024*1024*4,LK=5,BK=500;function PT(r){let e={...r,type:`${lh[r.type]} (${r.type})`};return r.type===je.NEW_STREAM&&(e.data=M(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===je.MESSAGE_INITIATOR||r.type===je.MESSAGE_RECEIVER)&&(e.data=M(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var lg=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??BK,this.sink=this._createSink(),this._source=Zr({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=rr(this._source,n=>CT(n)),this.closeController=new AbortController,this.rateLimiter=new Du({points:t.disconnectThreshold??LK,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 Go("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??DK))throw new ss("Too many outbound streams open");if(i.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=kT({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,PT(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=()=>{u0(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new ag(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",PT(e)),e.type===je.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??NK)){this.log("too many inbound streams open"),this._source.push({id:t,type:je.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:M(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,lh[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??OK;try{switch(n){case je.MESSAGE_INITIATOR:case je.MESSAGE_RECEIVER:if(i.sourceReadableLength()>s)throw this._source.push({id:e.id,type:n===je.MESSAGE_INITIATOR?je.RESET_RECEIVER:je.RESET_INITIATOR}),new cg("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers");i.sourcePush(e.data);break;case je.CLOSE_INITIATOR:case je.CLOSE_RECEIVER:i.remoteCloseWrite();break;case je.RESET_INITIATOR:case je.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 _7=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}[Symbol.toStringTag]="@libp2p/mplex";[Xe]=["@libp2p/stream-multiplexing"];createStreamMuxer(e={}){return new lg(this.components,{...e,...this._init})}};function RT(r={}){return e=>new _7(e,r)}var NT="1.0.0",DT="ping",OT="ipfs";var ug=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??OT}/${DT}/${NT}`,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";[Xe]=["@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=Qt(t),i=!1;Promise.resolve().then(async()=>{for(;;){let s=AbortSignal.timeout(this.timeout);s.addEventListener("abort",()=>{t?.abort(new zo("ping timeout"))});let a=await o.read({bytes:32,signal:s});await o.write(a,{signal:s}),i=!0}}).catch(s=>{i&&s.name==="UnexpectedEOFError"&&t.readStatus!=="ready"||(this.log.error("incoming ping from %p failed with error - %e",e.connection.remotePeer,s),t?.abort(s))}).finally(()=>{let s=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,s);let a=AbortSignal.timeout(this.timeout);t.close({signal:a}).catch(c=>{this.log.error("error closing ping stream from %p - %e",e.connection.remotePeer,c),t?.abort(c)})})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=qr(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=Qt(s),[,c]=await Promise.all([a.write(o,t),a.read({...t,bytes:32})]),l=Date.now()-n;if(!ge(o,c.subarray()))throw new Dp(`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 LT(r={}){return e=>new ug(e,r)}var Ur;(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=()=>Et(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=_e((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=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(Ur||(Ur={}));var BT=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],T7=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),MT="libp2p+webrtc+v1/";var UT=466,FT=2*1024*1024,$T=30*1e3,Ou=16*1024;function $K(r=Ou){let e=Ce(r-Ce(r)),t=1+Ce(Object.keys(Ur.Flag).length-1),n=1,o=r-e-t-n,i=Ce(o);return e+t+n+i}var KT=$K(),VT=5e3,HT=5e3,qT=3e4,C7="/webrtc",uh="/webrtc-signaling/0.0.1",jT="/libp2p/webrtc-direct/certificate",WT="webrtc-direct-certificate-private-key";var GT=12096e5,k7=864e5;var zT=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))},KK=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var VK=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var HK=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 qK=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var jK=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var WK=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,GK=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,XT=3,zK=[["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",WK]],YT=[["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 ZT(r){return r?QT(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new jK:typeof navigator<"u"?QT(navigator.userAgent):QK()}function XK(r){return r!==""&&zK.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 QT(r){var e=XK(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new qK;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<XT&&(o=zT(zT([],o,!0),ZK(XT-o.length),!0)):o=[];var i=o.join("."),s=YK(r),a=GK.exec(r);return a&&a[1]?new HK(t,i,s,a[1]):new KK(t,i,s)}function YK(r){for(var e=0,t=YT.length;e<t;e++){var n=YT[e],o=n[0],i=n[1],s=i.exec(r);if(s)return o}return null}function QK(){var r=typeof process<"u"&&process.version;return r?new VK(process.version.slice(1)):null}function ZK(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var JT=ZT(),dh=JT!=null&&JT.name==="firefox",dg=async function*(){},fg=async r=>{};function eC(r,e,t=qT,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=de(),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 Ao(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}async function P7(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??BT.map(e=>({urls:[e]})),r}var tC=(r=32)=>MT+[...Array(r)].map(()=>T7.at(Math.floor(Math.random()*T7.length))).join("");var Ic=class{log;peerConnection;remoteAddr;timeline;metrics;source=dg();sink=fg;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,o=n.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",n.connectionState,"initial state",o),(n.connectionState==="disconnected"||n.connectionState==="failed"||n.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 R7=class extends Ns{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;closeController;constructor(e){let t=e.onEnd;switch(e.onEnd=o=>{this.log.trace('readable and writeable ends closed with status "%s"',this.status),Promise.resolve(async()=>{if(!(this.timeline.abort!=null||this.timeline.reset!==null))try{await Ao(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)}).finally(()=>{this.channel.close()})},super(e),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=Zr(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??$T,this.maxBufferedAmount=e.maxBufferedAmount??FT,this.maxMessageSize=(e.maxMessageSize??Ou)-KT,this.receiveFinAck=de(),this.finAckTimeout=e.closeTimeout??VT,this.openTimeout=e.openTimeout??HT,this.closeController=new AbortController,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 ya("Unknown datachannel state")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.log.trace("received onclose event"),this.closeController.abort(),this.receiveFinAck.resolve(),this.close().catch(i=>{this.log.error("error closing stream after channel closed",i)})},this.channel.onerror=o=>{this.log.trace("received onerror event"),this.closeController.abort();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 mo(this.incomingData)){let i=n.processIncomingProtobuf(o);i!=null&&n.sourcePush(new J(i))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new ya(`Invalid datachannel state - ${this.channel.readyState}`);if(this.channel.readyState!=="open"){let n=AbortSignal.timeout(this.openTimeout),o=Ne([this.closeController.signal,n]);try{this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await tr(this.channel,"open",o)}finally{o.clear()}this.log('channel state is now "%s", sending data',this.channel.readyState)}if(t&&this.channel.bufferedAmount>this.maxBufferedAmount){let n=AbortSignal.timeout(this.bufferedAmountLowEventTimeout),o=Ne([this.closeController.signal,n]);try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await tr(this.channel,"bufferedamountlow",o)}catch(i){throw n.aborted?new zo(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`):i}finally{o.clear()}}try{this.log.trace('sending message, channel state "%s"',this.channel.readyState),this.channel.send(e.subarray())}catch(n){this.log.error("error while sending message",n)}}async sendData(e){let t=e.byteLength;for(e=e.sublist();e.byteLength>0;){let n=Math.min(e.byteLength,this.maxMessageSize),o=e.subarray(0,n),i=Ur.encode({message:o}),s=po.single(i);this.log.trace("sending %d/%d bytes on channel",o.byteLength,t),await this._sendMessage(s),e.consume(n)}this.log.trace('finished sending data, channel state "%s"',this.channel.readyState)}async sendReset(){try{await this._sendFlag(Ur.Flag.RESET)}catch(e){this.log.error("failed to send reset - %e",e)}finally{this.channel.close()}}async sendCloseWrite(e){if(this.channel.readyState!=="open"){this.receiveFinAck.resolve();return}if(await this._sendFlag(Ur.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await dt(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(){this.channel.readyState==="open"&&await this._sendFlag(Ur.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Ur.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===Ur.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Ur.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Ur.Flag.RESET&&this.reset(),t.flag===Ur.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Ur.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"',e.toString(),this.channel.readyState),!1;this.log.trace("sending flag %s",e.toString());let t=Ur.encode({flag:e}),n=po.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}};function Lu(r){let{channel:e,direction:t,handshake:n}=r;return new R7({id:`${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${n===!0?"handshake":t}:${e.id}`),...r})}var js=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??C7,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:muxerfactory"),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=Lu({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 N7(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},N7=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??C7,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=n.id,i=Lu({channel:n,direction:"inbound",onEnd:()=>{this.#e(i,n),this.log("incoming channel %s ended",o)},logger:this.logger,...this.dataChannelOptions});this.streams.push(i),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(i)},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),eC(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=dg();sink=fg;newStream(){let e=this.peerConnection.createDataChannel(""),t=e.id;this.log.trace("opened outgoing datachannel with channel id %s",t);let n=Lu({channel:e,direction:"outbound",onEnd:()=>{this.#e(n,e),this.log("outgoing channel %s ended",t)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(n),this.metrics?.increment({outgoing_stream:!0}),n}};var hg=globalThis.RTCPeerConnection,pg=globalThis.RTCSessionDescription,rC=globalThis.RTCIceCandidate;var mg=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},gg=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},yg=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function nC(r,e={}){let t=Qt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new mg("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new yg("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new gg("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function wg(r,e){let t=nC(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 Ws=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},eo=class extends Ws{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var bg=class extends Ws{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var xg=class extends Ws{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},vg=class extends Ws{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 fn;(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=()=>Et(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=_e((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=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(fn||(fn={}));var Eg=async(r,e,t)=>{try{let n=de();for(JK(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!==fn.Type.ICE_CANDIDATE)throw new Oe("ICE candidate message expected");let i=JSON.parse(o.data??"null");if(i===""||i===null){t.onProgress?.(new ae("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let s=new rC(i);t.log.trace("%s received new ICE candidate %o",t.direction,i);try{t.onProgress?.(new ae("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&&Sg(r)!=="connected")throw n}};function Sg(r){return dh?r.iceConnectionState:r.connectionState}function JK(r,e){r[dh?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(Sg(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new hl("RTCPeerConnection was closed"));break;default:break}}}async function oC({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:i,transportManager:s,log:a,logger:c,onProgress:l}){let{baseAddr:u}=iC(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing base address: %a",u);let d=u.getPeerId();if(d==null)throw new D("Relay peer was missing");let h=i.getConnections(bt(d)),m,g=!1;h.length===0?(l?.(new ae("webrtc:dial-relay")),m=await s.dial(u,{signal:t,onProgress:l}),g=!0):(l?.(new ae("webrtc:reuse-relay-connection")),m=h[0]);try{l?.(new ae("webrtc:open-signaling-stream"));let w=await m.newStream(uh,{signal:t,runOnLimitedConnection:!0}),y=wg(w).pb(fn),x=new hg(r),S=new js({logger:c},{peerConnection:x,dataChannelOptions:e});try{let v=x.createDataChannel("init");x.onicecandidate=({candidate:$})=>{let P=JSON.stringify($?.toJSON()??null);a.trace("initiator sending ICE candidate %o",$),y.write({type:fn.Type.ICE_CANDIDATE,data:P},{signal:t}).catch(R=>{a.error("error sending ICE candidate",R)})},x.onicecandidateerror=$=>{a.error("initiator ICE candidate error",$)};let N=await x.createOffer().catch($=>{throw a.error("could not execute createOffer",$),new eo("Failed to set createOffer")});a.trace("initiator send SDP offer %s",N.sdp),l?.(new ae("webrtc:send-sdp-offer")),await y.write({type:fn.Type.SDP_OFFER,data:N.sdp},{signal:t}),await x.setLocalDescription(N).catch($=>{throw a.error("could not execute setLocalDescription",$),new eo("Failed to set localDescription")}),l?.(new ae("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let W=await y.read({signal:t});if(W.type!==fn.Type.SDP_ANSWER)throw new eo("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",W.data);let H=new pg({type:"answer",sdp:W.data});return await x.setRemoteDescription(H).catch($=>{throw a.error("could not execute setRemoteDescription",$),new eo("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new ae("webrtc:read-ice-candidates")),await Eg(x,y,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected, closing init channel"),v.close(),l?.(new ae("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await w.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:x,muxerFactory:S}}catch(v){throw a.error("outgoing signaling error",v),x.close(),w.abort(v),v}finally{x.onicecandidate=null,x.onicecandidateerror=null}}finally{if(g)try{await m.close({signal:t})}catch(w){m.abort(w)}}}var sC=it(bm.matchers[0],Be("p2p-circuit")),Ag=class r extends Le{transportManager;shutdownController;events;constructor(e,t){super(),this.transportManager=e.transportManager,this.events=e.events,this.shutdownController=t.shutdownController,this.onTransportListening=this.onTransportListening.bind(this)}async listen(){this.events.addEventListener("transport:listening",this.onTransportListening)}onTransportListening(e){e.detail.getAddrs().filter(n=>sC.exactMatch(n)).map(n=>n.encapsulate("/webrtc")).length>0&&this.safeDispatchEvent("listening")}getAddrs(){return this.transportManager.getListeners().filter(e=>!(e instanceof r)).map(e=>e.getAddrs().filter(t=>sC.exactMatch(t)).map(t=>t.encapsulate("/webrtc"))).flat()}updateAnnounceAddrs(){}async close(){this.events.removeEventListener("transport:listening",this.onTransportListening),this.shutdownController.abort(),queueMicrotask(()=>{this.safeDispatchEvent("close")})}};async function aC({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let i=wg(e).pb(fn);try{r.onicecandidate=({candidate:u})=>{let d=JSON.stringify(u?.toJSON()??null);o.trace("recipient sending ICE candidate %s",d),i.write({type:fn.Type.ICE_CANDIDATE,data:d},{signal:t}).catch(h=>{o.error("error sending ICE candidate",h)})},o.trace("recipient read SDP offer");let a=await i.read({signal:t});if(a.type!==fn.Type.SDP_OFFER)throw new eo(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `);o.trace("recipient received SDP offer %s",a.data);let c=new pg({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(u=>{throw o.error("could not execute setRemoteDescription",u),new eo("Failed to set remoteDescription")});let l=await r.createAnswer().catch(u=>{throw o.error("could not execute createAnswer",u),new eo("Failed to create answer")});o.trace("recipient send SDP answer %s",l.sdp),await i.write({type:fn.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(u=>{throw o.error("could not execute setLocalDescription",u),new eo("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await Eg(r,i,{direction:"recipient",signal:t,log:o})}catch(a){if(Sg(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=oe(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",s),{remoteAddress:s}}var _g=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,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"})})}[ns]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[Xe]=["@libp2p/transport"];[Sn]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(uh,e=>{let t=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);this._onProtocol(e,t).catch(n=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,n)}).finally(()=>{t.clear()})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(uh),this._started=!1}createListener(e){return new Ag(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(Sf.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 oC({rtcConfiguration:await P7(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 Ic(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,signal:t.signal});return this._closeOnShutdown(o,s),a}async _onProtocol({connection:e,stream:t},n){let o=new hg(await P7(this.init.rtcConfiguration)),i=new js(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:s}=await aC({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new Ic(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,signal:n}),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 iC(r){let e=r.toString().split("/webrtc/");if(e.length!==2)throw new D("webrtc protocol was not present in multiaddr");if(!e[0].includes("/p2p-circuit"))throw new D("p2p-circuit protocol was not present in multiaddr");let t=oe(e[0]),o=oe("/"+e[1]).getPeerId();if(o==null)throw new D("destination peer id was missing");let i=t.protos().pop();if(i===void 0)throw new D("invalid multiaddr");return i.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:bt(o)}}var KPe=Vt(lC());var _;(function(r){r[r.Sequence=0]="Sequence",r[r.Set=1]="Set",r[r.Choice=2]="Choice"})(_||(_={}));var b;(function(r){r[r.Any=1]="Any",r[r.Boolean=2]="Boolean",r[r.OctetString=3]="OctetString",r[r.BitString=4]="BitString",r[r.Integer=5]="Integer",r[r.Enumerated=6]="Enumerated",r[r.ObjectIdentifier=7]="ObjectIdentifier",r[r.Utf8String=8]="Utf8String",r[r.BmpString=9]="BmpString",r[r.UniversalString=10]="UniversalString",r[r.NumericString=11]="NumericString",r[r.PrintableString=12]="PrintableString",r[r.TeletexString=13]="TeletexString",r[r.VideotexString=14]="VideotexString",r[r.IA5String=15]="IA5String",r[r.GraphicString=16]="GraphicString",r[r.VisibleString=17]="VisibleString",r[r.GeneralString=18]="GeneralString",r[r.CharacterString=19]="CharacterString",r[r.UTCTime=20]="UTCTime",r[r.GeneralizedTime=21]="GeneralizedTime",r[r.DATE=22]="DATE",r[r.TimeOfDay=23]="TimeOfDay",r[r.DateTime=24]="DateTime",r[r.Duration=25]="Duration",r[r.TIME=26]="TIME",r[r.Null=27]="Null"})(b||(b={}));var D7=Vt($i()),ci=class{constructor(e,t=0){if(this.unusedBits=0,this.value=new ArrayBuffer(0),e)if(typeof e=="number")this.fromNumber(e);else if(D7.BufferSourceConverter.isBufferSource(e))this.unusedBits=t,this.value=D7.BufferSourceConverter.toArrayBuffer(e);else throw TypeError("Unsupported type of 'params' argument for BitString")}fromASN(e){if(!(e instanceof Uo))throw new TypeError("Argument 'asn' is not instance of ASN.1 BitString");return this.unusedBits=e.valueBlock.unusedBits,this.value=e.valueBlock.valueHex,this}toASN(){return new Uo({unusedBits:this.unusedBits,valueHex:this.value})}toSchema(e){return new Uo({name:e})}toNumber(){let e="",t=new Uint8Array(this.value);for(let n of t)e+=n.toString(2).padStart(8,"0");return e=e.split("").reverse().join(""),this.unusedBits&&(e=e.slice(this.unusedBits).padStart(this.unusedBits,"0")),parseInt(e,2)}fromNumber(e){let t=e.toString(2),n=t.length+7>>3;this.unusedBits=(n<<3)-t.length;let o=new Uint8Array(n);t=t.padStart(n<<3,"0").split("").reverse().join("");let i=0;for(;i<n;)o[i]=parseInt(t.slice(i<<3,(i<<3)+8),2),i++;this.value=o.buffer}};var O7=Vt($i()),be=class{get byteLength(){return this.buffer.byteLength}get byteOffset(){return 0}constructor(e){typeof e=="number"?this.buffer=new ArrayBuffer(e):O7.BufferSourceConverter.isBufferSource(e)?this.buffer=O7.BufferSourceConverter.toArrayBuffer(e):Array.isArray(e)?this.buffer=new Uint8Array(e):this.buffer=new ArrayBuffer(0)}fromASN(e){if(!(e instanceof Mr))throw new TypeError("Argument 'asn' is not instance of ASN.1 OctetString");return this.buffer=e.valueBlock.valueHex,this}toASN(){return new Mr({valueHex:this.buffer})}toSchema(e){return new Mr({name:e})}};var eV={fromASN:r=>r instanceof un?null:r.valueBeforeDecodeView,toASN:r=>{if(r===null)return new un;let e=Mn(r);if(e.result.error)throw new Error(e.result.error);return e.result}},tV={fromASN:r=>r.valueBlock.valueHexView.byteLength>=4?r.valueBlock.toString():r.valueBlock.valueDec,toASN:r=>new Ln({value:+r})},rV={fromASN:r=>r.valueBlock.valueDec,toASN:r=>new dc({value:r})},$e={fromASN:r=>r.valueBlock.valueHexView,toASN:r=>new Ln({valueHex:r})};var nV={fromASN:r=>r.valueBlock.valueHexView,toASN:r=>new Uo({valueHex:r})},oV={fromASN:r=>r.valueBlock.toString(),toASN:r=>new Bn({value:r})},iV={fromASN:r=>r.valueBlock.value,toASN:r=>new uc({value:r})},Bu={fromASN:r=>r.valueBlock.valueHexView,toASN:r=>new Mr({valueHex:r})},uC={fromASN:r=>new be(r.getValue()),toASN:r=>r.toASN()};function to(r){return{fromASN:e=>e.valueBlock.value,toASN:e=>new r({value:e})}}var L7=to(Zn),sV=to(fc),aV=to(hc),cV=to(pc),lV=to(mc),uV=to(gc),dV=to(yc),fV=to(wc),hV=to(bc),pV=to(Hs),mV=to(xc),gV=to(vc),yV={fromASN:r=>r.toDate(),toASN:r=>new qs({valueDate:r})},wV={fromASN:r=>r.toDate(),toASN:r=>new Ec({valueDate:r})},bV={fromASN:()=>null,toASN:()=>new un};function Mu(r){switch(r){case b.Any:return eV;case b.BitString:return nV;case b.BmpString:return sV;case b.Boolean:return iV;case b.CharacterString:return gV;case b.Enumerated:return rV;case b.GeneralString:return mV;case b.GeneralizedTime:return wV;case b.GraphicString:return hV;case b.IA5String:return fV;case b.Integer:return tV;case b.Null:return bV;case b.NumericString:return cV;case b.ObjectIdentifier:return oV;case b.OctetString:return Bu;case b.PrintableString:return lV;case b.TeletexString:return uV;case b.UTCTime:return yV;case b.UniversalString:return aV;case b.Utf8String:return L7;case b.VideotexString:return dV;case b.VisibleString:return pV;default:return null}}function ro(r){return typeof r=="function"&&r.prototype?r.prototype.toASN&&r.prototype.fromASN?!0:ro(r.prototype):!!(r&&typeof r=="object"&&"toASN"in r&&"fromASN"in r)}function M7(r){var e;if(r){let t=Object.getPrototypeOf(r);return((e=t?.prototype)===null||e===void 0?void 0:e.constructor)===Array?!0:M7(t)}return!1}function dC(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}var Ig=class{constructor(){this.items=new WeakMap}has(e){return this.items.has(e)}get(e,t=!1){let n=this.items.get(e);if(!n)throw new Error(`Cannot get schema for '${e.prototype.constructor.name}' target`);if(t&&!n.schema)throw new Error(`Schema '${e.prototype.constructor.name}' doesn't contain ASN.1 schema. Call 'AsnSchemaStorage.cache'.`);return n}cache(e){let t=this.get(e);t.schema||(t.schema=this.create(e,!0))}createDefault(e){let t={type:_.Sequence,items:{}},n=this.findParentSchema(e);return n&&(Object.assign(t,n),t.items=Object.assign({},t.items,n.items)),t}create(e,t){let n=this.items.get(e)||this.createDefault(e),o=[];for(let i in n.items){let s=n.items[i],a=t?i:"",c;if(typeof s.type=="number"){let u=b[s.type],d=Jn[u];if(!d)throw new Error(`Cannot get ASN1 class by name '${u}'`);c=new d({name:a})}else ro(s.type)?c=new s.type().toSchema(a):s.optional?this.get(s.type).type===_.Choice?c=new si({name:a}):(c=this.create(s.type,!1),c.name=a):c=new si({name:a});let l=!!s.optional||s.defaultValue!==void 0;if(s.repeated){c.name="";let u=s.repeated==="set"?dn:_t;c=new u({name:"",value:[new Sc({name:a,value:c})]})}if(s.context!==null&&s.context!==void 0)if(s.implicit)if(typeof s.type=="number"||ro(s.type)){let u=s.repeated?Zt:Vi;o.push(new u({name:a,optional:l,idBlock:{tagClass:3,tagNumber:s.context}}))}else{this.cache(s.type);let u=!!s.repeated,d=u?c:this.get(s.type,!0).schema;d="valueBlock"in d?d.valueBlock.value:d.value,o.push(new Zt({name:u?"":a,optional:l,idBlock:{tagClass:3,tagNumber:s.context},value:d}))}else o.push(new Zt({optional:l,idBlock:{tagClass:3,tagNumber:s.context},value:[c]}));else c.optional=l,o.push(c)}switch(n.type){case _.Sequence:return new _t({value:o,name:""});case _.Set:return new dn({value:o,name:""});case _.Choice:return new ku({value:o,name:""});default:throw new Error("Unsupported ASN1 type in use")}}set(e,t){return this.items.set(e,t),this}findParentSchema(e){let t=Object.getPrototypeOf(e);return t?this.items.get(t)||this.findParentSchema(t):null}};var Yr=new Ig;var C=r=>e=>{let t;Yr.has(e)?t=Yr.get(e):(t=Yr.createDefault(e),Yr.set(e,t)),Object.assign(t,r)};var p=r=>(e,t)=>{let n;Yr.has(e.constructor)?n=Yr.get(e.constructor):(n=Yr.createDefault(e.constructor),Yr.set(e.constructor,n));let o=Object.assign({},r);if(typeof o.type=="number"&&!o.converter){let i=Mu(r.type);if(!i)throw new Error(`Cannot get default converter for property '${t}' of ${e.constructor.name}`);o.converter=i}n.items[t]=o};var fh=class extends Error{constructor(){super(...arguments),this.schemas=[]}};var hh=class{static parse(e,t){let n=Mn(e);if(n.result.error)throw new Error(n.result.error);return this.fromASN(n.result,t)}static fromASN(e,t){var n;try{if(ro(t))return new t().fromASN(e);let o=Yr.get(t);Yr.cache(t);let i=o.schema;if(e.constructor===Zt&&o.type!==_.Choice){i=new Zt({idBlock:{tagClass:3,tagNumber:e.idBlock.tagNumber},value:o.schema.valueBlock.value});for(let c in o.items)delete e[c]}let s=Vs({},e,i);if(!s.verified)throw new fh(`Data does not match to ${t.name} ASN1 schema. ${s.result.error}`);let a=new t;if(M7(t)){if(!("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)))throw new Error("Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.");let c=o.itemType;if(typeof c=="number"){let l=Mu(c);if(!l)throw new Error(`Cannot get default converter for array item of ${t.name} ASN1 schema`);return t.from(e.valueBlock.value,u=>l.fromASN(u))}else return t.from(e.valueBlock.value,l=>this.fromASN(l,c))}for(let c in o.items){let l=s.result[c];if(!l)continue;let u=o.items[c],d=u.type;if(typeof d=="number"||ro(d)){let h=(n=u.converter)!==null&&n!==void 0?n:ro(d)?new d:null;if(!h)throw new Error("Converter is empty");if(u.repeated)if(u.implicit){let m=u.repeated==="sequence"?_t:dn,g=new m;g.valueBlock=l.valueBlock;let w=Mn(g.toBER(!1));if(w.offset===-1)throw new Error(`Cannot parse the child item. ${w.result.error}`);if(!("value"in w.result.valueBlock&&Array.isArray(w.result.valueBlock.value)))throw new Error("Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.");let y=w.result.valueBlock.value;a[c]=Array.from(y,x=>h.fromASN(x))}else a[c]=Array.from(l,m=>h.fromASN(m));else{let m=l;if(u.implicit){let g;if(ro(d))g=new d().toSchema("");else{let w=b[d],y=Jn[w];if(!y)throw new Error(`Cannot get '${w}' class from asn1js module`);g=new y}g.valueBlock=m.valueBlock,m=Mn(g.toBER(!1)).result}a[c]=h.fromASN(m)}}else if(u.repeated){if(!Array.isArray(l))throw new Error("Cannot get list of items from the ASN.1 parsed value. ASN.1 value should be iterable.");a[c]=Array.from(l,h=>this.fromASN(h,d))}else a[c]=this.fromASN(l,d)}return a}catch(o){throw o instanceof fh&&o.schemas.push(t.name),o}}};var ph=class r{static serialize(e){return e instanceof Wt?e.toBER(!1):this.toASN(e).toBER(!1)}static toASN(e){if(e&&typeof e=="object"&&ro(e))return e.toASN();if(!(e&&typeof e=="object"))throw new TypeError("Parameter 1 should be type of Object.");let t=e.constructor,n=Yr.get(t);Yr.cache(t);let o=[];if(n.itemType){if(!Array.isArray(e))throw new TypeError("Parameter 1 should be type of Array.");if(typeof n.itemType=="number"){let s=Mu(n.itemType);if(!s)throw new Error(`Cannot get default converter for array item of ${t.name} ASN1 schema`);o=e.map(a=>s.toASN(a))}else o=e.map(s=>this.toAsnItem({type:n.itemType},"[]",t,s))}else for(let s in n.items){let a=n.items[s],c=e[s];if(c===void 0||a.defaultValue===c||typeof a.defaultValue=="object"&&typeof c=="object"&&dC(this.serialize(a.defaultValue),this.serialize(c)))continue;let l=r.toAsnItem(a,s,t,c);if(typeof a.context=="number")if(a.implicit)if(!a.repeated&&(typeof a.type=="number"||ro(a.type))){let u={};u.valueHex=l instanceof un?l.valueBeforeDecodeView:l.valueBlock.toBER(),o.push(new Vi({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},...u}))}else o.push(new Zt({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},value:l.valueBlock.value}));else o.push(new Zt({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},value:[l]}));else a.repeated?o=o.concat(l):o.push(l)}let i;switch(n.type){case _.Sequence:i=new _t({value:o});break;case _.Set:i=new dn({value:o});break;case _.Choice:if(!o[0])throw new Error(`Schema '${t.name}' has wrong data. Choice cannot be empty.`);i=o[0];break}return i}static toAsnItem(e,t,n,o){let i;if(typeof e.type=="number"){let s=e.converter;if(!s)throw new Error(`Property '${t}' doesn't have converter for type ${b[e.type]} in schema '${n.name}'`);if(e.repeated){if(!Array.isArray(o))throw new TypeError("Parameter 'objProp' should be type of Array.");let a=Array.from(o,l=>s.toASN(l)),c=e.repeated==="sequence"?_t:dn;i=new c({value:a})}else i=s.toASN(o)}else if(e.repeated){if(!Array.isArray(o))throw new TypeError("Parameter 'objProp' should be type of Array.");let s=Array.from(o,c=>this.toASN(c)),a=e.repeated==="sequence"?_t:dn;i=new a({value:s})}else i=this.toASN(o);return i}};var we=class extends Array{constructor(e=[]){if(typeof e=="number")super(e);else{super();for(let t of e)this.push(t)}}};var U7=Vt($i());var ee=class r{static serialize(e){return ph.serialize(e)}static parse(e,t){return hh.parse(e,t)}static toString(e){let t=U7.BufferSourceConverter.isBufferSource(e)?U7.BufferSourceConverter.toArrayBuffer(e):r.serialize(e),n=Mn(t);if(n.offset===-1)throw new Error(`Cannot decode ASN.1 data. ${n.result.error}`);return n.result.toString()}};function f(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var fC=Vt($i()),mh=class{static isIPv4(e){return/^(\d{1,3}\.){3}\d{1,3}$/.test(e)}static parseIPv4(e){let t=e.split(".");if(t.length!==4)throw new Error("Invalid IPv4 address");return t.map(n=>{let o=parseInt(n,10);if(isNaN(o)||o<0||o>255)throw new Error("Invalid IPv4 address part");return o})}static parseIPv6(e){let n=this.expandIPv6(e).split(":");if(n.length!==8)throw new Error("Invalid IPv6 address");return n.reduce((o,i)=>{let s=parseInt(i,16);if(isNaN(s)||s<0||s>65535)throw new Error("Invalid IPv6 address part");return o.push(s>>8&255),o.push(s&255),o},[])}static expandIPv6(e){if(!e.includes("::"))return e;let t=e.split("::");if(t.length>2)throw new Error("Invalid IPv6 address");let n=t[0]?t[0].split(":"):[],o=t[1]?t[1].split(":"):[],i=8-(n.length+o.length);if(i<0)throw new Error("Invalid IPv6 address");return[...n,...Array(i).fill("0"),...o].join(":")}static formatIPv6(e){let t=[];for(let n=0;n<16;n+=2)t.push((e[n]<<8|e[n+1]).toString(16));return this.compressIPv6(t.join(":"))}static compressIPv6(e){let t=e.split(":"),n=-1,o=0,i=-1,s=0;for(let a=0;a<t.length;a++)t[a]==="0"?(i===-1&&(i=a),s++):(s>o&&(n=i,o=s),i=-1,s=0);if(s>o&&(n=i,o=s),o>1){let a=t.slice(0,n).join(":"),c=t.slice(n+o).join(":");return`${a}::${c}`}return e}static parseCIDR(e){let[t,n]=e.split("/"),o=parseInt(n,10);if(this.isIPv4(t)){if(o<0||o>32)throw new Error("Invalid IPv4 prefix length");return[this.parseIPv4(t),o]}else{if(o<0||o>128)throw new Error("Invalid IPv6 prefix length");return[this.parseIPv6(t),o]}}static decodeIP(e){if(e.length===64&&parseInt(e,16)===0)return"::/0";if(e.length!==16)return e;let t=parseInt(e.slice(8),16).toString(2).split("").reduce((o,i)=>o+ +i,0),n=e.slice(0,8).replace(/(.{2})/g,o=>`${parseInt(o,16)}.`);return n=n.slice(0,-1),`${n}/${t}`}static toString(e){let t=new Uint8Array(e);if(t.length===4)return Array.from(t).join(".");if(t.length===16)return this.formatIPv6(t);if(t.length===8||t.length===32){let n=t.length/2,o=t.slice(0,n),i=t.slice(n);if(t.every(c=>c===0))return t.length===8?"0.0.0.0/0":"::/0";let a=i.reduce((c,l)=>c+(l.toString(2).match(/1/g)||[]).length,0);return t.length===8?`${Array.from(o).join(".")}/${a}`:`${this.formatIPv6(o)}/${a}`}return this.decodeIP(fC.Convert.ToHex(e))}static fromString(e){if(e.includes("/")){let[n,o]=this.parseCIDR(e),i=new Uint8Array(n.length),s=o;for(let c=0;c<i.length;c++)s>=8?(i[c]=255,s-=8):s>0&&(i[c]=255<<8-s,s=0);let a=new Uint8Array(n.length*2);return a.set(n,0),a.set(i,n.length),a.buffer}let t=this.isIPv4(e)?this.parseIPv4(e):this.parseIPv6(e);return new Uint8Array(t).buffer}};var hC=Vt($i()),F7,$7,K7,Gt=class{constructor(e={}){Object.assign(this,e)}toString(){return this.bmpString||this.printableString||this.teletexString||this.universalString||this.utf8String||""}};f([p({type:b.TeletexString})],Gt.prototype,"teletexString",void 0);f([p({type:b.PrintableString})],Gt.prototype,"printableString",void 0);f([p({type:b.UniversalString})],Gt.prototype,"universalString",void 0);f([p({type:b.Utf8String})],Gt.prototype,"utf8String",void 0);f([p({type:b.BmpString})],Gt.prototype,"bmpString",void 0);Gt=f([C({type:_.Choice})],Gt);var Uu=class extends Gt{constructor(e={}){super(e),Object.assign(this,e)}toString(){return this.ia5String||(this.anyValue?hC.Convert.ToHex(this.anyValue):super.toString())}};f([p({type:b.IA5String})],Uu.prototype,"ia5String",void 0);f([p({type:b.Any})],Uu.prototype,"anyValue",void 0);Uu=f([C({type:_.Choice})],Uu);var Tc=class{constructor(e={}){this.type="",this.value=new Uu,Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Tc.prototype,"type",void 0);f([p({type:Uu})],Tc.prototype,"value",void 0);var Gs=F7=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,F7.prototype)}};Gs=F7=f([C({type:_.Set,itemType:Tc})],Gs);var V7=$7=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,$7.prototype)}};V7=$7=f([C({type:_.Sequence,itemType:Gs})],V7);var lt=K7=class extends V7{constructor(e){super(e),Object.setPrototypeOf(this,K7.prototype)}};lt=K7=f([C({type:_.Sequence})],lt);var xV={fromASN:r=>mh.toString(Bu.fromASN(r)),toASN:r=>Bu.toASN(mh.fromString(r))},zs=class{constructor(e={}){this.typeId="",this.value=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],zs.prototype,"typeId",void 0);f([p({type:b.Any,context:0})],zs.prototype,"value",void 0);var gh=class{constructor(e={}){this.partyName=new Gt,Object.assign(this,e)}};f([p({type:Gt,optional:!0,context:0,implicit:!0})],gh.prototype,"nameAssigner",void 0);f([p({type:Gt,context:1,implicit:!0})],gh.prototype,"partyName",void 0);var Ee=class{constructor(e={}){Object.assign(this,e)}};f([p({type:zs,context:0,implicit:!0})],Ee.prototype,"otherName",void 0);f([p({type:b.IA5String,context:1,implicit:!0})],Ee.prototype,"rfc822Name",void 0);f([p({type:b.IA5String,context:2,implicit:!0})],Ee.prototype,"dNSName",void 0);f([p({type:b.Any,context:3,implicit:!0})],Ee.prototype,"x400Address",void 0);f([p({type:lt,context:4,implicit:!1})],Ee.prototype,"directoryName",void 0);f([p({type:gh,context:5})],Ee.prototype,"ediPartyName",void 0);f([p({type:b.IA5String,context:6,implicit:!0})],Ee.prototype,"uniformResourceIdentifier",void 0);f([p({type:b.OctetString,context:7,implicit:!0,converter:xV})],Ee.prototype,"iPAddress",void 0);f([p({type:b.ObjectIdentifier,context:8,implicit:!0})],Ee.prototype,"registeredID",void 0);Ee=f([C({type:_.Choice})],Ee);var Xs="1.3.6.1.5.5.7",Ys=`${Xs}.1`,pC=`${Xs}.2`,Cc=`${Xs}.3`,Tg=`${Xs}.48`,c5e=`${pC}.1`,l5e=`${pC}.2`,H7=`${Tg}.1`,q7=`${Tg}.2`,j7=`${Tg}.3`,W7=`${Tg}.5`,Re="2.5.29";var G7,Cg=`${Ys}.1`,qi=class{constructor(e={}){this.accessMethod="",this.accessLocation=new Ee,Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],qi.prototype,"accessMethod",void 0);f([p({type:Ee})],qi.prototype,"accessLocation",void 0);var kc=G7=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,G7.prototype)}};kc=G7=f([C({type:_.Sequence,itemType:qi})],kc);var kg=`${Re}.35`,Pc=class extends be{},li=class{constructor(e={}){e&&Object.assign(this,e)}};f([p({type:Pc,context:0,optional:!0,implicit:!0})],li.prototype,"keyIdentifier",void 0);f([p({type:Ee,context:1,optional:!0,implicit:!0,repeated:"sequence"})],li.prototype,"authorityCertIssuer",void 0);f([p({type:b.Integer,context:2,optional:!0,implicit:!0,converter:$e})],li.prototype,"authorityCertSerialNumber",void 0);var Pg=`${Re}.19`,Rc=class{constructor(e={}){this.cA=!1,Object.assign(this,e)}};f([p({type:b.Boolean,defaultValue:!1})],Rc.prototype,"cA",void 0);f([p({type:b.Integer,optional:!0})],Rc.prototype,"pathLenConstraint",void 0);var z7,It=z7=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,z7.prototype)}};It=z7=f([C({type:_.Sequence,itemType:Ee})],It);var X7,vV=`${Re}.29`,mC=X7=class extends It{constructor(e){super(e),Object.setPrototypeOf(this,X7.prototype)}};mC=X7=f([C({type:_.Sequence})],mC);var Y7,Ng=`${Re}.32`,K5e=`${Ng}.0`,ji=class{constructor(e={}){Object.assign(this,e)}toString(){return this.ia5String||this.visibleString||this.bmpString||this.utf8String||""}};f([p({type:b.IA5String})],ji.prototype,"ia5String",void 0);f([p({type:b.VisibleString})],ji.prototype,"visibleString",void 0);f([p({type:b.BmpString})],ji.prototype,"bmpString",void 0);f([p({type:b.Utf8String})],ji.prototype,"utf8String",void 0);ji=f([C({type:_.Choice})],ji);var yh=class{constructor(e={}){this.organization=new ji,this.noticeNumbers=[],Object.assign(this,e)}};f([p({type:ji})],yh.prototype,"organization",void 0);f([p({type:b.Integer,repeated:"sequence"})],yh.prototype,"noticeNumbers",void 0);var wh=class{constructor(e={}){Object.assign(this,e)}};f([p({type:yh,optional:!0})],wh.prototype,"noticeRef",void 0);f([p({type:ji,optional:!0})],wh.prototype,"explicitText",void 0);var Rg=class{constructor(e={}){Object.assign(this,e)}};f([p({type:b.IA5String})],Rg.prototype,"cPSuri",void 0);f([p({type:wh})],Rg.prototype,"userNotice",void 0);Rg=f([C({type:_.Choice})],Rg);var bh=class{constructor(e={}){this.policyQualifierId="",this.qualifier=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],bh.prototype,"policyQualifierId",void 0);f([p({type:b.Any})],bh.prototype,"qualifier",void 0);var Nc=class{constructor(e={}){this.policyIdentifier="",Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Nc.prototype,"policyIdentifier",void 0);f([p({type:bh,repeated:"sequence",optional:!0})],Nc.prototype,"policyQualifiers",void 0);var xh=Y7=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,Y7.prototype)}};xh=Y7=f([C({type:_.Sequence,itemType:Nc})],xh);var X5e=`${Re}.20`,vh=class{constructor(e=0){this.value=e}};f([p({type:b.Integer})],vh.prototype,"value",void 0);vh=f([C({type:_.Choice})],vh);var r8e=`${Re}.27`,gC=class extends vh{};gC=f([C({type:_.Choice})],gC);var Q7,Dg=`${Re}.31`,$o;(function(r){r[r.unused=1]="unused",r[r.keyCompromise=2]="keyCompromise",r[r.cACompromise=4]="cACompromise",r[r.affiliationChanged=8]="affiliationChanged",r[r.superseded=16]="superseded",r[r.cessationOfOperation=32]="cessationOfOperation",r[r.certificateHold=64]="certificateHold",r[r.privilegeWithdrawn=128]="privilegeWithdrawn",r[r.aACompromise=256]="aACompromise"})($o||($o={}));var Eh=class extends ci{toJSON(){let e=[],t=this.toNumber();return t&$o.aACompromise&&e.push("aACompromise"),t&$o.affiliationChanged&&e.push("affiliationChanged"),t&$o.cACompromise&&e.push("cACompromise"),t&$o.certificateHold&&e.push("certificateHold"),t&$o.cessationOfOperation&&e.push("cessationOfOperation"),t&$o.keyCompromise&&e.push("keyCompromise"),t&$o.privilegeWithdrawn&&e.push("privilegeWithdrawn"),t&$o.superseded&&e.push("superseded"),t&$o.unused&&e.push("unused"),e}toString(){return`[${this.toJSON().join(", ")}]`}},Wi=class{constructor(e={}){Object.assign(this,e)}};f([p({type:Ee,context:0,repeated:"sequence",implicit:!0})],Wi.prototype,"fullName",void 0);f([p({type:Gs,context:1,implicit:!0})],Wi.prototype,"nameRelativeToCRLIssuer",void 0);Wi=f([C({type:_.Choice})],Wi);var ui=class{constructor(e={}){Object.assign(this,e)}};f([p({type:Wi,context:0,optional:!0})],ui.prototype,"distributionPoint",void 0);f([p({type:Eh,context:1,optional:!0,implicit:!0})],ui.prototype,"reasons",void 0);f([p({type:Ee,context:2,optional:!0,repeated:"sequence",implicit:!0})],ui.prototype,"cRLIssuer",void 0);var Qs=Q7=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,Q7.prototype)}};Qs=Q7=f([C({type:_.Sequence,itemType:ui})],Qs);var Z7,y8e=`${Re}.46`,yC=Z7=class extends Qs{constructor(e){super(e),Object.setPrototypeOf(this,Z7.prototype)}};yC=Z7=f([C({type:_.Sequence,itemType:ui})],yC);var _8e=`${Re}.28`,Un=class r{constructor(e={}){this.onlyContainsUserCerts=r.ONLY,this.onlyContainsCACerts=r.ONLY,this.indirectCRL=r.ONLY,this.onlyContainsAttributeCerts=r.ONLY,Object.assign(this,e)}};Un.ONLY=!1;f([p({type:Wi,context:0,optional:!0})],Un.prototype,"distributionPoint",void 0);f([p({type:b.Boolean,context:1,defaultValue:Un.ONLY,implicit:!0})],Un.prototype,"onlyContainsUserCerts",void 0);f([p({type:b.Boolean,context:2,defaultValue:Un.ONLY,implicit:!0})],Un.prototype,"onlyContainsCACerts",void 0);f([p({type:Eh,context:3,optional:!0,implicit:!0})],Un.prototype,"onlySomeReasons",void 0);f([p({type:b.Boolean,context:4,defaultValue:Un.ONLY,implicit:!0})],Un.prototype,"indirectCRL",void 0);f([p({type:b.Boolean,context:5,defaultValue:Un.ONLY,implicit:!0})],Un.prototype,"onlyContainsAttributeCerts",void 0);var wC=`${Re}.21`,Sh;(function(r){r[r.unspecified=0]="unspecified",r[r.keyCompromise=1]="keyCompromise",r[r.cACompromise=2]="cACompromise",r[r.affiliationChanged=3]="affiliationChanged",r[r.superseded=4]="superseded",r[r.cessationOfOperation=5]="cessationOfOperation",r[r.certificateHold=6]="certificateHold",r[r.removeFromCRL=8]="removeFromCRL",r[r.privilegeWithdrawn=9]="privilegeWithdrawn",r[r.aACompromise=10]="aACompromise"})(Sh||(Sh={}));var Ah=class{constructor(e=Sh.unspecified){this.reason=Sh.unspecified,this.reason=e}toJSON(){return Sh[this.reason]}toString(){return this.toJSON()}};f([p({type:b.Enumerated})],Ah.prototype,"reason",void 0);Ah=f([C({type:_.Choice})],Ah);var J7,Og=`${Re}.37`,_h=J7=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,J7.prototype)}};_h=J7=f([C({type:_.Sequence,itemType:b.ObjectIdentifier})],_h);var B8e=`${Og}.0`,bC=`${Cc}.1`,xC=`${Cc}.2`,vC=`${Cc}.3`,EC=`${Cc}.4`,SC=`${Cc}.8`,AC=`${Cc}.9`;var K8e=`${Re}.54`,e9=class{constructor(e=new ArrayBuffer(0)){this.value=e}};f([p({type:b.Integer,converter:$e})],e9.prototype,"value",void 0);e9=f([C({type:_.Choice})],e9);var _C=`${Re}.24`,Ih=class{constructor(e){this.value=new Date,e&&(this.value=e)}};f([p({type:b.GeneralizedTime})],Ih.prototype,"value",void 0);Ih=f([C({type:_.Choice})],Ih);var t9,J8e=`${Re}.18`,IC=t9=class extends It{constructor(e){super(e),Object.setPrototypeOf(this,t9.prototype)}};IC=t9=f([C({type:_.Sequence})],IC);var Lg=`${Re}.15`,Ko;(function(r){r[r.digitalSignature=1]="digitalSignature",r[r.nonRepudiation=2]="nonRepudiation",r[r.keyEncipherment=4]="keyEncipherment",r[r.dataEncipherment=8]="dataEncipherment",r[r.keyAgreement=16]="keyAgreement",r[r.keyCertSign=32]="keyCertSign",r[r.cRLSign=64]="cRLSign",r[r.encipherOnly=128]="encipherOnly",r[r.decipherOnly=256]="decipherOnly"})(Ko||(Ko={}));var Fu=class extends ci{toJSON(){let e=this.toNumber(),t=[];return e&Ko.cRLSign&&t.push("crlSign"),e&Ko.dataEncipherment&&t.push("dataEncipherment"),e&Ko.decipherOnly&&t.push("decipherOnly"),e&Ko.digitalSignature&&t.push("digitalSignature"),e&Ko.encipherOnly&&t.push("encipherOnly"),e&Ko.keyAgreement&&t.push("keyAgreement"),e&Ko.keyCertSign&&t.push("keyCertSign"),e&Ko.keyEncipherment&&t.push("keyEncipherment"),e&Ko.nonRepudiation&&t.push("nonRepudiation"),t}toString(){return`[${this.toJSON().join(", ")}]`}};var r9,l7e=`${Re}.30`,$u=class{constructor(e={}){this.base=new Ee,this.minimum=0,Object.assign(this,e)}};f([p({type:Ee})],$u.prototype,"base",void 0);f([p({type:b.Integer,context:0,defaultValue:0,implicit:!0})],$u.prototype,"minimum",void 0);f([p({type:b.Integer,context:1,optional:!0,implicit:!0})],$u.prototype,"maximum",void 0);var Bg=r9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,r9.prototype)}};Bg=r9=f([C({type:_.Sequence,itemType:$u})],Bg);var Mg=class{constructor(e={}){Object.assign(this,e)}};f([p({type:Bg,context:0,optional:!0,implicit:!0})],Mg.prototype,"permittedSubtrees",void 0);f([p({type:Bg,context:1,optional:!0,implicit:!0})],Mg.prototype,"excludedSubtrees",void 0);var m7e=`${Re}.36`,Ug=class{constructor(e={}){Object.assign(this,e)}};f([p({type:b.Integer,context:0,implicit:!0,optional:!0,converter:$e})],Ug.prototype,"requireExplicitPolicy",void 0);f([p({type:b.Integer,context:1,implicit:!0,optional:!0,converter:$e})],Ug.prototype,"inhibitPolicyMapping",void 0);var n9,x7e=`${Re}.33`,Th=class{constructor(e={}){this.issuerDomainPolicy="",this.subjectDomainPolicy="",Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Th.prototype,"issuerDomainPolicy",void 0);f([p({type:b.ObjectIdentifier})],Th.prototype,"subjectDomainPolicy",void 0);var TC=n9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,n9.prototype)}};TC=n9=f([C({type:_.Sequence,itemType:Th})],TC);var o9,i9=`${Re}.17`,Fg=o9=class extends It{constructor(e){super(e),Object.setPrototypeOf(this,o9.prototype)}};Fg=o9=f([C({type:_.Sequence})],Fg);var wr=class{constructor(e={}){this.type="",this.values=[],Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],wr.prototype,"type",void 0);f([p({type:b.Any,repeated:"set"})],wr.prototype,"values",void 0);var s9,B7e=`${Re}.9`,CC=s9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,s9.prototype)}};CC=s9=f([C({type:_.Sequence,itemType:wr})],CC);var a9=`${Re}.14`,hn=class extends Pc{};var j7e=`${Re}.16`,$g=class{constructor(e={}){Object.assign(this,e)}};f([p({type:b.GeneralizedTime,context:0,implicit:!0,optional:!0})],$g.prototype,"notBefore",void 0);f([p({type:b.GeneralizedTime,context:1,implicit:!0,optional:!0})],$g.prototype,"notAfter",void 0);var Ch;(function(r){r[r.keyUpdateAllowed=1]="keyUpdateAllowed",r[r.newExtensions=2]="newExtensions",r[r.pKIXCertificate=4]="pKIXCertificate"})(Ch||(Ch={}));var Kg=class extends ci{toJSON(){let e=[],t=this.toNumber();return t&Ch.pKIXCertificate&&e.push("pKIXCertificate"),t&Ch.newExtensions&&e.push("newExtensions"),t&Ch.keyUpdateAllowed&&e.push("keyUpdateAllowed"),e}toString(){return`[${this.toJSON().join(", ")}]`}},Vg=class{constructor(e={}){this.entrustVers="",this.entrustInfoFlags=new Kg,Object.assign(this,e)}};f([p({type:b.GeneralString})],Vg.prototype,"entrustVers",void 0);f([p({type:Kg})],Vg.prototype,"entrustInfoFlags",void 0);var c9,e9e=`${Ys}.11`,kC=c9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,c9.prototype)}};kC=c9=f([C({type:_.Sequence,itemType:qi})],kC);var PC=Vt($i()),Y=class r{constructor(e={}){this.algorithm="",Object.assign(this,e)}isEqual(e){return e instanceof r&&e.algorithm==this.algorithm&&(e.parameters&&this.parameters&&PC.isEqual(e.parameters,this.parameters)||e.parameters===this.parameters)}};f([p({type:b.ObjectIdentifier})],Y.prototype,"algorithm",void 0);f([p({type:b.Any,optional:!0})],Y.prototype,"parameters",void 0);var br=class{constructor(e={}){this.algorithm=new Y,this.subjectPublicKey=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:Y})],br.prototype,"algorithm",void 0);f([p({type:b.BitString})],br.prototype,"subjectPublicKey",void 0);var Ot=class{constructor(e){if(e)if(typeof e=="string"||typeof e=="number"||e instanceof Date){let t=new Date(e);t.getUTCFullYear()>2049?this.generalTime=t:this.utcTime=t}else Object.assign(this,e)}getTime(){let e=this.utcTime||this.generalTime;if(!e)throw new Error("Cannot get time from CHOICE object");return e}};f([p({type:b.UTCTime})],Ot.prototype,"utcTime",void 0);f([p({type:b.GeneralizedTime})],Ot.prototype,"generalTime",void 0);Ot=f([C({type:_.Choice})],Ot);var Gi=class{constructor(e){this.notBefore=new Ot(new Date),this.notAfter=new Ot(new Date),e&&(this.notBefore=new Ot(e.notBefore),this.notAfter=new Ot(e.notAfter))}};f([p({type:Ot})],Gi.prototype,"notBefore",void 0);f([p({type:Ot})],Gi.prototype,"notAfter",void 0);var l9,xr=class r{constructor(e={}){this.extnID="",this.critical=r.CRITICAL,this.extnValue=new be,Object.assign(this,e)}};xr.CRITICAL=!1;f([p({type:b.ObjectIdentifier})],xr.prototype,"extnID",void 0);f([p({type:b.Boolean,defaultValue:xr.CRITICAL})],xr.prototype,"critical",void 0);f([p({type:be})],xr.prototype,"extnValue",void 0);var Fn=l9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,l9.prototype)}};Fn=l9=f([C({type:_.Sequence,itemType:xr})],Fn);var di;(function(r){r[r.v1=0]="v1",r[r.v2=1]="v2",r[r.v3=2]="v3"})(di||(di={}));var vr=class{constructor(e={}){this.version=di.v1,this.serialNumber=new ArrayBuffer(0),this.signature=new Y,this.issuer=new lt,this.validity=new Gi,this.subject=new lt,this.subjectPublicKeyInfo=new br,Object.assign(this,e)}};f([p({type:b.Integer,context:0,defaultValue:di.v1})],vr.prototype,"version",void 0);f([p({type:b.Integer,converter:$e})],vr.prototype,"serialNumber",void 0);f([p({type:Y})],vr.prototype,"signature",void 0);f([p({type:lt})],vr.prototype,"issuer",void 0);f([p({type:Gi})],vr.prototype,"validity",void 0);f([p({type:lt})],vr.prototype,"subject",void 0);f([p({type:br})],vr.prototype,"subjectPublicKeyInfo",void 0);f([p({type:b.BitString,context:1,implicit:!0,optional:!0})],vr.prototype,"issuerUniqueID",void 0);f([p({type:b.BitString,context:2,implicit:!0,optional:!0})],vr.prototype,"subjectUniqueID",void 0);f([p({type:Fn,context:3,optional:!0})],vr.prototype,"extensions",void 0);var no=class{constructor(e={}){this.tbsCertificate=new vr,this.signatureAlgorithm=new Y,this.signatureValue=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:vr})],no.prototype,"tbsCertificate",void 0);f([p({type:Y})],no.prototype,"signatureAlgorithm",void 0);f([p({type:b.BitString})],no.prototype,"signatureValue",void 0);var Dc=class{constructor(e={}){this.userCertificate=new ArrayBuffer(0),this.revocationDate=new Ot,Object.assign(this,e)}};f([p({type:b.Integer,converter:$e})],Dc.prototype,"userCertificate",void 0);f([p({type:Ot})],Dc.prototype,"revocationDate",void 0);f([p({type:xr,optional:!0,repeated:"sequence"})],Dc.prototype,"crlEntryExtensions",void 0);var $n=class{constructor(e={}){this.signature=new Y,this.issuer=new lt,this.thisUpdate=new Ot,Object.assign(this,e)}};f([p({type:b.Integer,optional:!0})],$n.prototype,"version",void 0);f([p({type:Y})],$n.prototype,"signature",void 0);f([p({type:lt})],$n.prototype,"issuer",void 0);f([p({type:Ot})],$n.prototype,"thisUpdate",void 0);f([p({type:Ot,optional:!0})],$n.prototype,"nextUpdate",void 0);f([p({type:Dc,repeated:"sequence",optional:!0})],$n.prototype,"revokedCertificates",void 0);f([p({type:xr,optional:!0,context:0,repeated:"sequence"})],$n.prototype,"crlExtensions",void 0);var Oc=class{constructor(e={}){this.tbsCertList=new $n,this.signatureAlgorithm=new Y,this.signature=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:$n})],Oc.prototype,"tbsCertList",void 0);f([p({type:Y})],Oc.prototype,"signatureAlgorithm",void 0);f([p({type:b.BitString})],Oc.prototype,"signature",void 0);var Q=Vt($i());var Vo=class{constructor(e={}){this.issuer=new lt,this.serialNumber=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:lt})],Vo.prototype,"issuer",void 0);f([p({type:b.Integer,converter:$e})],Vo.prototype,"serialNumber",void 0);var Lc=class{constructor(e={}){Object.assign(this,e)}};f([p({type:hn,context:0,implicit:!0})],Lc.prototype,"subjectKeyIdentifier",void 0);f([p({type:Vo})],Lc.prototype,"issuerAndSerialNumber",void 0);Lc=f([C({type:_.Choice})],Lc);var Er;(function(r){r[r.v0=0]="v0",r[r.v1=1]="v1",r[r.v2=2]="v2",r[r.v3=3]="v3",r[r.v4=4]="v4",r[r.v5=5]="v5"})(Er||(Er={}));var Bc=class extends Y{};Bc=f([C({type:_.Sequence})],Bc);var kh=class extends Y{};kh=f([C({type:_.Sequence})],kh);var pn=class extends Y{};pn=f([C({type:_.Sequence})],pn);var Ph=class extends Y{};Ph=f([C({type:_.Sequence})],Ph);var NC=class extends Y{};NC=f([C({type:_.Sequence})],NC);var Hg=class extends Y{};Hg=f([C({type:_.Sequence})],Hg);var Ho=class{constructor(e={}){this.attrType="",this.attrValues=[],Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Ho.prototype,"attrType",void 0);f([p({type:b.Any,repeated:"set"})],Ho.prototype,"attrValues",void 0);var u9,mn=class{constructor(e={}){this.version=Er.v0,this.sid=new Lc,this.digestAlgorithm=new Bc,this.signatureAlgorithm=new kh,this.signature=new be,Object.assign(this,e)}};f([p({type:b.Integer})],mn.prototype,"version",void 0);f([p({type:Lc})],mn.prototype,"sid",void 0);f([p({type:Bc})],mn.prototype,"digestAlgorithm",void 0);f([p({type:Ho,repeated:"set",context:0,implicit:!0,optional:!0})],mn.prototype,"signedAttrs",void 0);f([p({type:kh})],mn.prototype,"signatureAlgorithm",void 0);f([p({type:be})],mn.prototype,"signature",void 0);f([p({type:Ho,repeated:"set",context:1,implicit:!0,optional:!0})],mn.prototype,"unsignedAttrs",void 0);var Rh=u9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,u9.prototype)}};Rh=u9=f([C({type:_.Set,itemType:mn})],Rh);var DC=class extends Ot{};DC=f([C({type:_.Choice})],DC);var OC=class extends mn{};OC=f([C({type:_.Sequence})],OC);var Nh=class{constructor(e={}){this.acIssuer=new Ee,this.acSerial=0,this.attrs=[],Object.assign(this,e)}};f([p({type:Ee})],Nh.prototype,"acIssuer",void 0);f([p({type:b.Integer})],Nh.prototype,"acSerial",void 0);f([p({type:wr,repeated:"sequence"})],Nh.prototype,"attrs",void 0);var d9,Dh=d9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,d9.prototype)}};Dh=d9=f([C({type:_.Sequence,itemType:b.ObjectIdentifier})],Dh);var Ku=class{constructor(e={}){this.permitUnSpecified=!0,Object.assign(this,e)}};f([p({type:b.Integer,optional:!0})],Ku.prototype,"pathLenConstraint",void 0);f([p({type:Dh,implicit:!0,context:0,optional:!0})],Ku.prototype,"permittedAttrs",void 0);f([p({type:Dh,implicit:!0,context:1,optional:!0})],Ku.prototype,"excludedAttrs",void 0);f([p({type:b.Boolean,defaultValue:!0})],Ku.prototype,"permitUnSpecified",void 0);var oo=class{constructor(e={}){this.issuer=new It,this.serial=new ArrayBuffer(0),this.issuerUID=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:It})],oo.prototype,"issuer",void 0);f([p({type:b.Integer,converter:$e})],oo.prototype,"serial",void 0);f([p({type:b.BitString,optional:!0})],oo.prototype,"issuerUID",void 0);var f9;(function(r){r[r.publicKey=0]="publicKey",r[r.publicKeyCert=1]="publicKeyCert",r[r.otherObjectTypes=2]="otherObjectTypes"})(f9||(f9={}));var io=class{constructor(e={}){this.digestedObjectType=f9.publicKey,this.digestAlgorithm=new Y,this.objectDigest=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.Enumerated})],io.prototype,"digestedObjectType",void 0);f([p({type:b.ObjectIdentifier,optional:!0})],io.prototype,"otherObjectTypeID",void 0);f([p({type:Y})],io.prototype,"digestAlgorithm",void 0);f([p({type:b.BitString})],io.prototype,"objectDigest",void 0);var Mc=class{constructor(e={}){Object.assign(this,e)}};f([p({type:It,optional:!0})],Mc.prototype,"issuerName",void 0);f([p({type:oo,context:0,implicit:!0,optional:!0})],Mc.prototype,"baseCertificateID",void 0);f([p({type:io,context:1,implicit:!0,optional:!0})],Mc.prototype,"objectDigestInfo",void 0);var Uc=class{constructor(e={}){Object.assign(this,e)}};f([p({type:Ee,repeated:"sequence"})],Uc.prototype,"v1Form",void 0);f([p({type:Mc,context:0,implicit:!0})],Uc.prototype,"v2Form",void 0);Uc=f([C({type:_.Choice})],Uc);var Fc=class{constructor(e={}){this.notBeforeTime=new Date,this.notAfterTime=new Date,Object.assign(this,e)}};f([p({type:b.GeneralizedTime})],Fc.prototype,"notBeforeTime",void 0);f([p({type:b.GeneralizedTime})],Fc.prototype,"notAfterTime",void 0);var Zs=class{constructor(e={}){Object.assign(this,e)}};f([p({type:oo,implicit:!0,context:0,optional:!0})],Zs.prototype,"baseCertificateID",void 0);f([p({type:It,implicit:!0,context:1,optional:!0})],Zs.prototype,"entityName",void 0);f([p({type:io,implicit:!0,context:2,optional:!0})],Zs.prototype,"objectDigestInfo",void 0);var h9;(function(r){r[r.v2=1]="v2"})(h9||(h9={}));var gn=class{constructor(e={}){this.version=h9.v2,this.holder=new Zs,this.issuer=new Uc,this.signature=new Y,this.serialNumber=new ArrayBuffer(0),this.attrCertValidityPeriod=new Fc,this.attributes=[],Object.assign(this,e)}};f([p({type:b.Integer})],gn.prototype,"version",void 0);f([p({type:Zs})],gn.prototype,"holder",void 0);f([p({type:Uc})],gn.prototype,"issuer",void 0);f([p({type:Y})],gn.prototype,"signature",void 0);f([p({type:b.Integer,converter:$e})],gn.prototype,"serialNumber",void 0);f([p({type:Fc})],gn.prototype,"attrCertValidityPeriod",void 0);f([p({type:wr,repeated:"sequence"})],gn.prototype,"attributes",void 0);f([p({type:b.BitString,optional:!0})],gn.prototype,"issuerUniqueID",void 0);f([p({type:Fn,optional:!0})],gn.prototype,"extensions",void 0);var $c=class{constructor(e={}){this.acinfo=new gn,this.signatureAlgorithm=new Y,this.signatureValue=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:gn})],$c.prototype,"acinfo",void 0);f([p({type:Y})],$c.prototype,"signatureAlgorithm",void 0);f([p({type:b.BitString})],$c.prototype,"signatureValue",void 0);var Oh;(function(r){r[r.unmarked=1]="unmarked",r[r.unclassified=2]="unclassified",r[r.restricted=4]="restricted",r[r.confidential=8]="confidential",r[r.secret=16]="secret",r[r.topSecret=32]="topSecret"})(Oh||(Oh={}));var Vu=class extends ci{};var Hu=class{constructor(e={}){this.type="",this.value=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier,implicit:!0,context:0})],Hu.prototype,"type",void 0);f([p({type:b.Any,implicit:!0,context:1})],Hu.prototype,"value",void 0);var Lh=class{constructor(e={}){this.policyId="",this.classList=new Vu(Oh.unclassified),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Lh.prototype,"policyId",void 0);f([p({type:Vu,defaultValue:new Vu(Oh.unclassified)})],Lh.prototype,"classList",void 0);f([p({type:Hu,repeated:"set"})],Lh.prototype,"securityCategories",void 0);var qu=class{constructor(e={}){Object.assign(this,e)}};f([p({type:be})],qu.prototype,"cotets",void 0);f([p({type:b.ObjectIdentifier})],qu.prototype,"oid",void 0);f([p({type:b.Utf8String})],qu.prototype,"string",void 0);var qg=class{constructor(e={}){this.values=[],Object.assign(this,e)}};f([p({type:It,implicit:!0,context:0,optional:!0})],qg.prototype,"policyAuthority",void 0);f([p({type:qu,repeated:"sequence"})],qg.prototype,"values",void 0);var Oxe=`${Ys}.4`,Lxe=`${Ys}.6`,Bxe=`${Ys}.10`,Mxe=`${Re}.55`,Bh=`${Xs}.10`,Uxe=`${Bh}.1`,Fxe=`${Bh}.2`,$xe=`${Bh}.3`,Kxe=`${Bh}.4`,Vxe=`${Bh}.6`,p9="2.5.4",Hxe=`${p9}.72`;var m9,ju=class{constructor(e={}){this.targetCertificate=new oo,Object.assign(this,e)}};f([p({type:oo})],ju.prototype,"targetCertificate",void 0);f([p({type:Ee,optional:!0})],ju.prototype,"targetName",void 0);f([p({type:io,optional:!0})],ju.prototype,"certDigestInfo",void 0);var Wu=class{constructor(e={}){Object.assign(this,e)}};f([p({type:Ee,context:0,implicit:!0})],Wu.prototype,"targetName",void 0);f([p({type:Ee,context:1,implicit:!0})],Wu.prototype,"targetGroup",void 0);f([p({type:ju,context:2,implicit:!0})],Wu.prototype,"targetCert",void 0);Wu=f([C({type:_.Choice})],Wu);var jg=m9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,m9.prototype)}};jg=m9=f([C({type:_.Sequence,itemType:Wu})],jg);var g9,LC=g9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,g9.prototype)}};LC=g9=f([C({type:_.Sequence,itemType:jg})],LC);var Wg=class{constructor(e={}){Object.assign(this,e)}};f([p({type:It,implicit:!0,context:0,optional:!0})],Wg.prototype,"roleAuthority",void 0);f([p({type:Ee,implicit:!0,context:1})],Wg.prototype,"roleName",void 0);var Mh=class{constructor(e={}){this.service=new Ee,this.ident=new Ee,Object.assign(this,e)}};f([p({type:Ee})],Mh.prototype,"service",void 0);f([p({type:Ee})],Mh.prototype,"ident",void 0);f([p({type:be,optional:!0})],Mh.prototype,"authInfo",void 0);var y9,Uh=class{constructor(e={}){this.otherCertFormat="",this.otherCert=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Uh.prototype,"otherCertFormat",void 0);f([p({type:b.Any})],Uh.prototype,"otherCert",void 0);var Kc=class{constructor(e={}){Object.assign(this,e)}};f([p({type:no})],Kc.prototype,"certificate",void 0);f([p({type:$c,context:2,implicit:!0})],Kc.prototype,"v2AttrCert",void 0);f([p({type:Uh,context:3,implicit:!0})],Kc.prototype,"other",void 0);Kc=f([C({type:_.Choice})],Kc);var Vc=y9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,y9.prototype)}};Vc=y9=f([C({type:_.Set,itemType:Kc})],Vc);var so=class{constructor(e={}){this.contentType="",this.content=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],so.prototype,"contentType",void 0);f([p({type:b.Any,context:0})],so.prototype,"content",void 0);var Gu=class{constructor(e={}){Object.assign(this,e)}};f([p({type:be})],Gu.prototype,"single",void 0);f([p({type:b.Any})],Gu.prototype,"any",void 0);Gu=f([C({type:_.Choice})],Gu);var Hc=class{constructor(e={}){this.eContentType="",Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Hc.prototype,"eContentType",void 0);f([p({type:Gu,context:0,optional:!0})],Hc.prototype,"eContent",void 0);var Fh=class{constructor(e={}){Object.assign(this,e)}};f([p({type:be,context:0,implicit:!0,optional:!0})],Fh.prototype,"value",void 0);f([p({type:be,converter:uC,context:0,implicit:!0,optional:!0,repeated:"sequence"})],Fh.prototype,"constructedValue",void 0);Fh=f([C({type:_.Choice})],Fh);var Js=class{constructor(e={}){this.contentType="",this.contentEncryptionAlgorithm=new Ph,Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Js.prototype,"contentType",void 0);f([p({type:Ph})],Js.prototype,"contentEncryptionAlgorithm",void 0);f([p({type:Fh,optional:!0})],Js.prototype,"encryptedContent",void 0);var ea=class{constructor(e={}){this.keyAttrId="",Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],ea.prototype,"keyAttrId",void 0);f([p({type:b.Any,optional:!0})],ea.prototype,"keyAttr",void 0);var w9,zu=class{constructor(e={}){this.subjectKeyIdentifier=new hn,Object.assign(this,e)}};f([p({type:hn})],zu.prototype,"subjectKeyIdentifier",void 0);f([p({type:b.GeneralizedTime,optional:!0})],zu.prototype,"date",void 0);f([p({type:ea,optional:!0})],zu.prototype,"other",void 0);var Xu=class{constructor(e={}){Object.assign(this,e)}};f([p({type:zu,context:0,implicit:!0,optional:!0})],Xu.prototype,"rKeyId",void 0);f([p({type:Vo,optional:!0})],Xu.prototype,"issuerAndSerialNumber",void 0);Xu=f([C({type:_.Choice})],Xu);var $h=class{constructor(e={}){this.rid=new Xu,this.encryptedKey=new be,Object.assign(this,e)}};f([p({type:Xu})],$h.prototype,"rid",void 0);f([p({type:be})],$h.prototype,"encryptedKey",void 0);var Gg=w9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,w9.prototype)}};Gg=w9=f([C({type:_.Sequence,itemType:$h})],Gg);var Kh=class{constructor(e={}){this.algorithm=new Y,this.publicKey=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:Y})],Kh.prototype,"algorithm",void 0);f([p({type:b.BitString})],Kh.prototype,"publicKey",void 0);var qc=class{constructor(e={}){Object.assign(this,e)}};f([p({type:hn,context:0,implicit:!0,optional:!0})],qc.prototype,"subjectKeyIdentifier",void 0);f([p({type:Kh,context:1,implicit:!0,optional:!0})],qc.prototype,"originatorKey",void 0);f([p({type:Vo,optional:!0})],qc.prototype,"issuerAndSerialNumber",void 0);qc=f([C({type:_.Choice})],qc);var zi=class{constructor(e={}){this.version=Er.v3,this.originator=new qc,this.keyEncryptionAlgorithm=new pn,this.recipientEncryptedKeys=new Gg,Object.assign(this,e)}};f([p({type:b.Integer})],zi.prototype,"version",void 0);f([p({type:qc,context:0})],zi.prototype,"originator",void 0);f([p({type:be,context:1,optional:!0})],zi.prototype,"ukm",void 0);f([p({type:pn})],zi.prototype,"keyEncryptionAlgorithm",void 0);f([p({type:Gg})],zi.prototype,"recipientEncryptedKeys",void 0);var Yu=class{constructor(e={}){Object.assign(this,e)}};f([p({type:hn,context:0,implicit:!0})],Yu.prototype,"subjectKeyIdentifier",void 0);f([p({type:Vo})],Yu.prototype,"issuerAndSerialNumber",void 0);Yu=f([C({type:_.Choice})],Yu);var ta=class{constructor(e={}){this.version=Er.v0,this.rid=new Yu,this.keyEncryptionAlgorithm=new pn,this.encryptedKey=new be,Object.assign(this,e)}};f([p({type:b.Integer})],ta.prototype,"version",void 0);f([p({type:Yu})],ta.prototype,"rid",void 0);f([p({type:pn})],ta.prototype,"keyEncryptionAlgorithm",void 0);f([p({type:be})],ta.prototype,"encryptedKey",void 0);var jc=class{constructor(e={}){this.keyIdentifier=new be,Object.assign(this,e)}};f([p({type:be})],jc.prototype,"keyIdentifier",void 0);f([p({type:b.GeneralizedTime,optional:!0})],jc.prototype,"date",void 0);f([p({type:ea,optional:!0})],jc.prototype,"other",void 0);var ra=class{constructor(e={}){this.version=Er.v4,this.kekid=new jc,this.keyEncryptionAlgorithm=new pn,this.encryptedKey=new be,Object.assign(this,e)}};f([p({type:b.Integer})],ra.prototype,"version",void 0);f([p({type:jc})],ra.prototype,"kekid",void 0);f([p({type:pn})],ra.prototype,"keyEncryptionAlgorithm",void 0);f([p({type:be})],ra.prototype,"encryptedKey",void 0);var na=class{constructor(e={}){this.version=Er.v0,this.keyEncryptionAlgorithm=new pn,this.encryptedKey=new be,Object.assign(this,e)}};f([p({type:b.Integer})],na.prototype,"version",void 0);f([p({type:Hg,context:0,optional:!0})],na.prototype,"keyDerivationAlgorithm",void 0);f([p({type:pn})],na.prototype,"keyEncryptionAlgorithm",void 0);f([p({type:be})],na.prototype,"encryptedKey",void 0);var Vh=class{constructor(e={}){this.oriType="",this.oriValue=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Vh.prototype,"oriType",void 0);f([p({type:b.Any})],Vh.prototype,"oriValue",void 0);var Xi=class{constructor(e={}){Object.assign(this,e)}};f([p({type:ta,optional:!0})],Xi.prototype,"ktri",void 0);f([p({type:zi,context:1,implicit:!0,optional:!0})],Xi.prototype,"kari",void 0);f([p({type:ra,context:2,implicit:!0,optional:!0})],Xi.prototype,"kekri",void 0);f([p({type:na,context:3,implicit:!0,optional:!0})],Xi.prototype,"pwri",void 0);f([p({type:Vh,context:4,implicit:!0,optional:!0})],Xi.prototype,"ori",void 0);Xi=f([C({type:_.Choice})],Xi);var b9,Hh=b9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,b9.prototype)}};Hh=b9=f([C({type:_.Set,itemType:Xi})],Hh);var x9,BC=`${Xs}.16`,VEe=`${BC}.2`,HEe=`${BC}.4`,Qu=class{constructor(e={}){this.otherRevInfoFormat="",this.otherRevInfo=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Qu.prototype,"otherRevInfoFormat",void 0);f([p({type:b.Any})],Qu.prototype,"otherRevInfo",void 0);var zg=class{constructor(e={}){this.other=new Qu,Object.assign(this,e)}};f([p({type:Qu,context:1,implicit:!0})],zg.prototype,"other",void 0);zg=f([C({type:_.Choice})],zg);var Zu=x9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,x9.prototype)}};Zu=x9=f([C({type:_.Set,itemType:zg})],Zu);var Ju=class{constructor(e={}){Object.assign(this,e)}};f([p({type:Vc,context:0,implicit:!0,optional:!0})],Ju.prototype,"certs",void 0);f([p({type:Zu,context:1,implicit:!0,optional:!0})],Ju.prototype,"crls",void 0);var v9,E9=v9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,v9.prototype)}};E9=v9=f([C({type:_.Set,itemType:Ho})],E9);var Wc=class{constructor(e={}){this.version=Er.v0,this.recipientInfos=new Hh,this.encryptedContentInfo=new Js,Object.assign(this,e)}};f([p({type:b.Integer})],Wc.prototype,"version",void 0);f([p({type:Ju,context:0,implicit:!0,optional:!0})],Wc.prototype,"originatorInfo",void 0);f([p({type:Hh})],Wc.prototype,"recipientInfos",void 0);f([p({type:Js})],Wc.prototype,"encryptedContentInfo",void 0);f([p({type:E9,context:1,implicit:!0,optional:!0})],Wc.prototype,"unprotectedAttrs",void 0);var MC="1.2.840.113549.1.7.2";var S9,Xg=S9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,S9.prototype)}};Xg=S9=f([C({type:_.Set,itemType:Bc})],Xg);var Yi=class{constructor(e={}){this.version=Er.v0,this.digestAlgorithms=new Xg,this.encapContentInfo=new Hc,this.signerInfos=new Rh,Object.assign(this,e)}};f([p({type:b.Integer})],Yi.prototype,"version",void 0);f([p({type:Xg})],Yi.prototype,"digestAlgorithms",void 0);f([p({type:Hc})],Yi.prototype,"encapContentInfo",void 0);f([p({type:Vc,context:0,implicit:!0,optional:!0})],Yi.prototype,"certificates",void 0);f([p({type:Zu,context:1,implicit:!0,optional:!0})],Yi.prototype,"crls",void 0);f([p({type:Rh})],Yi.prototype,"signerInfos",void 0);var Gc="1.2.840.10045.2.1";var qh="1.2.840.10045.4.1",Yg="1.2.840.10045.4.3.1",jh="1.2.840.10045.4.3.2",Wh="1.2.840.10045.4.3.3",Gh="1.2.840.10045.4.3.4";var A9="1.2.840.10045.3.1.7";var _9="1.3.132.0.34";var I9="1.3.132.0.35";function zh(r){return new Y({algorithm:r})}var FC=zh(qh),FSe=zh(Yg),$C=zh(jh),KC=zh(Wh),VC=zh(Gh);var Xh=class{constructor(e={}){Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Xh.prototype,"fieldType",void 0);f([p({type:b.Any})],Xh.prototype,"parameters",void 0);Xh=f([C({type:_.Sequence})],Xh);var T9=class extends be{};var ed=class{constructor(e={}){Object.assign(this,e)}};f([p({type:b.OctetString})],ed.prototype,"a",void 0);f([p({type:b.OctetString})],ed.prototype,"b",void 0);f([p({type:b.BitString,optional:!0})],ed.prototype,"seed",void 0);ed=f([C({type:_.Sequence})],ed);var C9;(function(r){r[r.ecpVer1=1]="ecpVer1"})(C9||(C9={}));var fi=class{constructor(e={}){this.version=C9.ecpVer1,Object.assign(this,e)}};f([p({type:b.Integer})],fi.prototype,"version",void 0);f([p({type:Xh})],fi.prototype,"fieldID",void 0);f([p({type:ed})],fi.prototype,"curve",void 0);f([p({type:T9})],fi.prototype,"base",void 0);f([p({type:b.Integer,converter:$e})],fi.prototype,"order",void 0);f([p({type:b.Integer,optional:!0})],fi.prototype,"cofactor",void 0);fi=f([C({type:_.Sequence})],fi);var hi=class{constructor(e={}){Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],hi.prototype,"namedCurve",void 0);f([p({type:b.Null})],hi.prototype,"implicitCurve",void 0);f([p({type:fi})],hi.prototype,"specifiedCurve",void 0);hi=f([C({type:_.Choice})],hi);var td=class{constructor(e={}){this.version=1,this.privateKey=new be,Object.assign(this,e)}};f([p({type:b.Integer})],td.prototype,"version",void 0);f([p({type:be})],td.prototype,"privateKey",void 0);f([p({type:hi,context:0,optional:!0})],td.prototype,"parameters",void 0);f([p({type:b.BitString,context:1,optional:!0})],td.prototype,"publicKey",void 0);var zc=class{constructor(e={}){this.r=new ArrayBuffer(0),this.s=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.Integer,converter:$e})],zc.prototype,"r",void 0);f([p({type:b.Integer,converter:$e})],zc.prototype,"s",void 0);var yn="1.2.840.113549.1.1",pi=`${yn}.1`,HC=`${yn}.7`,qC=`${yn}.9`,oa=`${yn}.10`,jC=`${yn}.2`,WC=`${yn}.4`,rd=`${yn}.5`,GC=`${yn}.14`;var Qg=`${yn}.11`,nd=`${yn}.12`,od=`${yn}.13`,k9=`${yn}.15`,P9=`${yn}.16`,Xc="1.3.14.3.2.26",Zg="2.16.840.1.101.3.4.2.4",Yc="2.16.840.1.101.3.4.2.1",Qc="2.16.840.1.101.3.4.2.2",Zc="2.16.840.1.101.3.4.2.3",zC="2.16.840.1.101.3.4.2.5",XC="2.16.840.1.101.3.4.2.6",YC="1.2.840.113549.2.2",QC="1.2.840.113549.2.5",ia=`${yn}.8`;function Jt(r){return new Y({algorithm:r,parameters:null})}var hAe=Jt(YC),pAe=Jt(QC),Qi=Jt(Xc),mAe=Jt(Zg),gAe=Jt(Yc),yAe=Jt(Qc),wAe=Jt(Zc),bAe=Jt(zC),xAe=Jt(XC),Jg=new Y({algorithm:ia,parameters:ee.serialize(Qi)}),R9=new Y({algorithm:qC,parameters:ee.serialize(Bu.toASN(new Uint8Array([218,57,163,238,94,107,75,13,50,85,191,239,149,96,24,144,175,216,7,9]).buffer))}),vAe=Jt(pi),EAe=Jt(jC),SAe=Jt(WC),AAe=Jt(rd),_Ae=Jt(k9),IAe=Jt(P9),TAe=Jt(nd),CAe=Jt(od),kAe=Jt(k9),PAe=Jt(P9);var id=class{constructor(e={}){this.hashAlgorithm=new Y(Qi),this.maskGenAlgorithm=new Y({algorithm:ia,parameters:ee.serialize(Qi)}),this.pSourceAlgorithm=new Y(R9),Object.assign(this,e)}};f([p({type:Y,context:0,defaultValue:Qi})],id.prototype,"hashAlgorithm",void 0);f([p({type:Y,context:1,defaultValue:Jg})],id.prototype,"maskGenAlgorithm",void 0);f([p({type:Y,context:2,defaultValue:R9})],id.prototype,"pSourceAlgorithm",void 0);var MAe=new Y({algorithm:HC,parameters:ee.serialize(new id)});var mi=class{constructor(e={}){this.hashAlgorithm=new Y(Qi),this.maskGenAlgorithm=new Y({algorithm:ia,parameters:ee.serialize(Qi)}),this.saltLength=20,this.trailerField=1,Object.assign(this,e)}};f([p({type:Y,context:0,defaultValue:Qi})],mi.prototype,"hashAlgorithm",void 0);f([p({type:Y,context:1,defaultValue:Jg})],mi.prototype,"maskGenAlgorithm",void 0);f([p({type:b.Integer,context:2,defaultValue:20})],mi.prototype,"saltLength",void 0);f([p({type:b.Integer,context:3,defaultValue:1})],mi.prototype,"trailerField",void 0);var qAe=new Y({algorithm:oa,parameters:ee.serialize(new mi)});var Jc=class{constructor(e={}){this.digestAlgorithm=new Y,this.digest=new be,Object.assign(this,e)}};f([p({type:Y})],Jc.prototype,"digestAlgorithm",void 0);f([p({type:be})],Jc.prototype,"digest",void 0);var N9,sd=class{constructor(e={}){this.prime=new ArrayBuffer(0),this.exponent=new ArrayBuffer(0),this.coefficient=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.Integer,converter:$e})],sd.prototype,"prime",void 0);f([p({type:b.Integer,converter:$e})],sd.prototype,"exponent",void 0);f([p({type:b.Integer,converter:$e})],sd.prototype,"coefficient",void 0);var e3=N9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,N9.prototype)}};e3=N9=f([C({type:_.Sequence,itemType:sd})],e3);var ao=class{constructor(e={}){this.version=0,this.modulus=new ArrayBuffer(0),this.publicExponent=new ArrayBuffer(0),this.privateExponent=new ArrayBuffer(0),this.prime1=new ArrayBuffer(0),this.prime2=new ArrayBuffer(0),this.exponent1=new ArrayBuffer(0),this.exponent2=new ArrayBuffer(0),this.coefficient=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.Integer})],ao.prototype,"version",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"modulus",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"publicExponent",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"privateExponent",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"prime1",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"prime2",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"exponent1",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"exponent2",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"coefficient",void 0);f([p({type:e3,optional:!0})],ao.prototype,"otherPrimeInfos",void 0);var ad=class{constructor(e={}){this.modulus=new ArrayBuffer(0),this.publicExponent=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.Integer,converter:$e})],ad.prototype,"modulus",void 0);f([p({type:b.Integer,converter:$e})],ad.prototype,"publicExponent",void 0);var D9;(function(r){r[r.Transient=0]="Transient",r[r.Singleton=1]="Singleton",r[r.ResolutionScoped=2]="ResolutionScoped",r[r.ContainerScoped=3]="ContainerScoped"})(D9||(D9={}));var Sr=D9;var bk=Vt(wk(),1),{__extends:ld,__assign:v_e,__rest:TV,__decorate:E_e,__param:S_e,__metadata:A_e,__awaiter:xk,__generator:vk,__exportStar:__e,__createBinding:I_e,__values:Yh,__read:Qh,__spread:qo,__spreadArrays:T_e,__await:C_e,__asyncGenerator:k_e,__asyncDelegator:P_e,__asyncValues:R_e,__makeTemplateObject:N_e,__importStar:D_e,__importDefault:O_e,__classPrivateFieldGet:L_e,__classPrivateFieldSet:B_e}=bk.default;var CV="injectionTokens";function L9(r){var e=Reflect.getMetadata("design:paramtypes",r)||[],t=Reflect.getOwnMetadata(CV,r)||{};return Object.keys(t).forEach(function(n){e[+n]=t[n]}),e}function Zh(r){return!!r.useClass}function ud(r){return!!r.useFactory}var n3=function(){function r(e){this.wrap=e,this.reflectMethods=["get","getPrototypeOf","setPrototypeOf","getOwnPropertyDescriptor","defineProperty","has","set","deleteProperty","apply","construct","ownKeys"]}return r.prototype.createProxy=function(e){var t=this,n={},o=!1,i,s=function(){return o||(i=e(t.wrap()),o=!0),i};return new Proxy(n,this.createHandler(s))},r.prototype.createHandler=function(e){var t={},n=function(o){t[o]=function(){for(var i=[],s=0;s<arguments.length;s++)i[s]=arguments[s];i[0]=e();var a=Reflect[o];return a.apply(void 0,qo(i))}};return this.reflectMethods.forEach(n),t},r}();function sa(r){return typeof r=="string"||typeof r=="symbol"}function B9(r){return typeof r=="object"&&"token"in r&&"multiple"in r}function o3(r){return typeof r=="object"&&"token"in r&&"transform"in r}function Ek(r){return typeof r=="function"||r instanceof n3}function el(r){return!!r.useToken}function tl(r){return r.useValue!=null}function Sk(r){return Zh(r)||tl(r)||el(r)||ud(r)}var kV=function(){function r(){this._registryMap=new Map}return r.prototype.entries=function(){return this._registryMap.entries()},r.prototype.getAll=function(e){return this.ensure(e),this._registryMap.get(e)},r.prototype.get=function(e){this.ensure(e);var t=this._registryMap.get(e);return t[t.length-1]||null},r.prototype.set=function(e,t){this.ensure(e),this._registryMap.get(e).push(t)},r.prototype.setAll=function(e,t){this._registryMap.set(e,t)},r.prototype.has=function(e){return this.ensure(e),this._registryMap.get(e).length>0},r.prototype.clear=function(){this._registryMap.clear()},r.prototype.ensure=function(e){this._registryMap.has(e)||this._registryMap.set(e,[])},r}(),Jh=kV;var PV=function(r){ld(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Jh),Ak=PV;var RV=function(){function r(){this.scopedResolutions=new Map}return r}(),ep=RV;function NV(r,e){if(r===null)return"at position #"+e;var t=r.split(",")[e].trim();return'"'+t+'" at position #'+e}function DV(r,e,t){return t===void 0&&(t=" "),qo([r],e.message.split(`
|
|
20
|
+
`).map(function(n){return t+n})).join(`
|
|
21
|
+
`)}function M9(r,e,t){var n=Qh(r.toString().match(/constructor\(([\w, ]+)\)/)||[],2),o=n[1],i=o===void 0?null:o,s=NV(i,e);return DV("Cannot inject the dependency "+s+' of "'+r.name+'" constructor. Reason:',t)}function _k(r){if(typeof r.dispose!="function")return!1;var e=r.dispose;return!(e.length>0)}var OV=function(r){ld(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Jh);var LV=function(r){ld(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Jh);var BV=function(){function r(){this.preResolution=new OV,this.postResolution=new LV}return r}(),Ik=BV;var U9=new Map,MV=function(){function r(e){this.parent=e,this._registry=new Ak,this.interceptors=new Ik,this.disposed=!1,this.disposables=new Set}return r.prototype.register=function(e,t,n){n===void 0&&(n={lifecycle:Sr.Transient}),this.ensureNotDisposed();var o;if(Sk(t)?o=t:o={useClass:t},el(o))for(var i=[e],s=o;s!=null;){var a=s.useToken;if(i.includes(a))throw new Error("Token registration cycle detected! "+qo(i,[a]).join(" -> "));i.push(a);var c=this._registry.get(a);c&&el(c.provider)?s=c.provider:s=null}if((n.lifecycle===Sr.Singleton||n.lifecycle==Sr.ContainerScoped||n.lifecycle==Sr.ResolutionScoped)&&(tl(o)||ud(o)))throw new Error('Cannot use lifecycle "'+Sr[n.lifecycle]+'" with ValueProviders or FactoryProviders');return this._registry.set(e,{provider:o,options:n}),this},r.prototype.registerType=function(e,t){return this.ensureNotDisposed(),sa(t)?this.register(e,{useToken:t}):this.register(e,{useClass:t})},r.prototype.registerInstance=function(e,t){return this.ensureNotDisposed(),this.register(e,{useValue:t})},r.prototype.registerSingleton=function(e,t){if(this.ensureNotDisposed(),sa(e)){if(sa(t))return this.register(e,{useToken:t},{lifecycle:Sr.Singleton});if(t)return this.register(e,{useClass:t},{lifecycle:Sr.Singleton});throw new Error('Cannot register a type name as a singleton without a "to" token')}var n=e;return t&&!sa(t)&&(n=t),this.register(e,{useClass:n},{lifecycle:Sr.Singleton})},r.prototype.resolve=function(e,t,n){t===void 0&&(t=new ep),n===void 0&&(n=!1),this.ensureNotDisposed();var o=this.getRegistration(e);if(!o&&sa(e)){if(n)return;throw new Error('Attempted to resolve unregistered dependency token: "'+e.toString()+'"')}if(this.executePreResolutionInterceptor(e,"Single"),o){var i=this.resolveRegistration(o,t);return this.executePostResolutionInterceptor(e,i,"Single"),i}if(Ek(e)){var i=this.construct(e,t);return this.executePostResolutionInterceptor(e,i,"Single"),i}throw new Error("Attempted to construct an undefined constructor. Could mean a circular dependency problem. Try using `delay` function.")},r.prototype.executePreResolutionInterceptor=function(e,t){var n,o;if(this.interceptors.preResolution.has(e)){var i=[];try{for(var s=Yh(this.interceptors.preResolution.getAll(e)),a=s.next();!a.done;a=s.next()){var c=a.value;c.options.frequency!="Once"&&i.push(c),c.callback(e,t)}}catch(l){n={error:l}}finally{try{a&&!a.done&&(o=s.return)&&o.call(s)}finally{if(n)throw n.error}}this.interceptors.preResolution.setAll(e,i)}},r.prototype.executePostResolutionInterceptor=function(e,t,n){var o,i;if(this.interceptors.postResolution.has(e)){var s=[];try{for(var a=Yh(this.interceptors.postResolution.getAll(e)),c=a.next();!c.done;c=a.next()){var l=c.value;l.options.frequency!="Once"&&s.push(l),l.callback(e,t,n)}}catch(u){o={error:u}}finally{try{c&&!c.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}this.interceptors.postResolution.setAll(e,s)}},r.prototype.resolveRegistration=function(e,t){if(this.ensureNotDisposed(),e.options.lifecycle===Sr.ResolutionScoped&&t.scopedResolutions.has(e))return t.scopedResolutions.get(e);var n=e.options.lifecycle===Sr.Singleton,o=e.options.lifecycle===Sr.ContainerScoped,i=n||o,s;return tl(e.provider)?s=e.provider.useValue:el(e.provider)?s=i?e.instance||(e.instance=this.resolve(e.provider.useToken,t)):this.resolve(e.provider.useToken,t):Zh(e.provider)?s=i?e.instance||(e.instance=this.construct(e.provider.useClass,t)):this.construct(e.provider.useClass,t):ud(e.provider)?s=e.provider.useFactory(this):s=this.construct(e.provider,t),e.options.lifecycle===Sr.ResolutionScoped&&t.scopedResolutions.set(e,s),s},r.prototype.resolveAll=function(e,t,n){var o=this;t===void 0&&(t=new ep),n===void 0&&(n=!1),this.ensureNotDisposed();var i=this.getAllRegistrations(e);if(!i&&sa(e)){if(n)return[];throw new Error('Attempted to resolve unregistered dependency token: "'+e.toString()+'"')}if(this.executePreResolutionInterceptor(e,"All"),i){var s=i.map(function(c){return o.resolveRegistration(c,t)});return this.executePostResolutionInterceptor(e,s,"All"),s}var a=[this.construct(e,t)];return this.executePostResolutionInterceptor(e,a,"All"),a},r.prototype.isRegistered=function(e,t){return t===void 0&&(t=!1),this.ensureNotDisposed(),this._registry.has(e)||t&&(this.parent||!1)&&this.parent.isRegistered(e,!0)},r.prototype.reset=function(){this.ensureNotDisposed(),this._registry.clear(),this.interceptors.preResolution.clear(),this.interceptors.postResolution.clear()},r.prototype.clearInstances=function(){var e,t;this.ensureNotDisposed();try{for(var n=Yh(this._registry.entries()),o=n.next();!o.done;o=n.next()){var i=Qh(o.value,2),s=i[0],a=i[1];this._registry.setAll(s,a.filter(function(c){return!tl(c.provider)}).map(function(c){return c.instance=void 0,c}))}}catch(c){e={error:c}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}},r.prototype.createChildContainer=function(){var e,t;this.ensureNotDisposed();var n=new r(this);try{for(var o=Yh(this._registry.entries()),i=o.next();!i.done;i=o.next()){var s=Qh(i.value,2),a=s[0],c=s[1];c.some(function(l){var u=l.options;return u.lifecycle===Sr.ContainerScoped})&&n._registry.setAll(a,c.map(function(l){return l.options.lifecycle===Sr.ContainerScoped?{provider:l.provider,options:l.options}:l}))}}catch(l){e={error:l}}finally{try{i&&!i.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}return n},r.prototype.beforeResolution=function(e,t,n){n===void 0&&(n={frequency:"Always"}),this.interceptors.preResolution.set(e,{callback:t,options:n})},r.prototype.afterResolution=function(e,t,n){n===void 0&&(n={frequency:"Always"}),this.interceptors.postResolution.set(e,{callback:t,options:n})},r.prototype.dispose=function(){return xk(this,void 0,void 0,function(){var e;return vk(this,function(t){switch(t.label){case 0:return this.disposed=!0,e=[],this.disposables.forEach(function(n){var o=n.dispose();o&&e.push(o)}),[4,Promise.all(e)];case 1:return t.sent(),[2]}})})},r.prototype.getRegistration=function(e){return this.isRegistered(e)?this._registry.get(e):this.parent?this.parent.getRegistration(e):null},r.prototype.getAllRegistrations=function(e){return this.isRegistered(e)?this._registry.getAll(e):this.parent?this.parent.getAllRegistrations(e):null},r.prototype.construct=function(e,t){var n=this;if(e instanceof n3)return e.createProxy(function(i){return n.resolve(i,t)});var o=function(){var i=U9.get(e);if(!i||i.length===0){if(e.length===0)return new e;throw new Error('TypeInfo not known for "'+e.name+'"')}var s=i.map(n.resolveParams(t,e));return new(e.bind.apply(e,qo([void 0],s)))}();return _k(o)&&this.disposables.add(o),o},r.prototype.resolveParams=function(e,t){var n=this;return function(o,i){var s,a,c;try{return B9(o)?o3(o)?o.multiple?(s=n.resolve(o.transform)).transform.apply(s,qo([n.resolveAll(o.token,new ep,o.isOptional)],o.transformArgs)):(a=n.resolve(o.transform)).transform.apply(a,qo([n.resolve(o.token,e,o.isOptional)],o.transformArgs)):o.multiple?n.resolveAll(o.token,new ep,o.isOptional):n.resolve(o.token,e,o.isOptional):o3(o)?(c=n.resolve(o.transform,e)).transform.apply(c,qo([n.resolve(o.token,e)],o.transformArgs)):n.resolve(o,e)}catch(l){throw new Error(M9(t,i,l))}}},r.prototype.ensureNotDisposed=function(){if(this.disposed)throw new Error("This container has been disposed, you cannot interact with a disposed container")},r}(),pt=new MV;function UV(r){return function(e){U9.set(e,L9(e)),r&&r.token&&(Array.isArray(r.token)?r.token.forEach(function(t){pt.register(t,e)}):pt.register(r.token,e))}}var aa=UV;if(typeof Reflect>"u"||!Reflect.getMetadata)throw new Error(`tsyringe requires a reflect polyfill. Please add 'import "reflect-metadata"' to the top of your entry point.`);var $9,rl=class{constructor(e={}){this.attrId="",this.attrValues=[],Object.assign(e)}};f([p({type:b.ObjectIdentifier})],rl.prototype,"attrId",void 0);f([p({type:b.Any,repeated:"set"})],rl.prototype,"attrValues",void 0);var Tk=$9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,$9.prototype)}};Tk=$9=f([C({type:_.Sequence,itemType:rl})],Tk);var K9,Ck=K9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,K9.prototype)}};Ck=K9=f([C({type:_.Sequence,itemType:so})],Ck);var FV="1.2.840.113549",$V=`${FV}.1`,kk=`${$V}.12`,dd=`${kk}.1`,GTe=`${dd}.1`,zTe=`${dd}.2`,XTe=`${dd}.3`,YTe=`${dd}.4`,QTe=`${dd}.5`,ZTe=`${dd}.6`,nl=`${kk}.10.1`;var tCe=`${nl}.1`,rCe=`${nl}.2`,nCe=`${nl}.3`,oCe=`${nl}.4`,iCe=`${nl}.5`,sCe=`${nl}.6`,i3="1.2.840.113549.1.9";var s3=class{constructor(e={}){this.certId="",this.certValue=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],s3.prototype,"certId",void 0);f([p({type:b.Any,context:0})],s3.prototype,"certValue",void 0);var Pk=`${i3}.22`,dCe=`${Pk}.1`,fCe=`${Pk}.2`;var a3=class{constructor(e={}){this.crlId="",this.crltValue=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],a3.prototype,"crlId",void 0);f([p({type:b.Any,context:0})],a3.prototype,"crltValue",void 0);var KV=`${i3}.23`,yCe=`${KV}.1`;var c3=class extends be{},ca=class{constructor(e={}){this.encryptionAlgorithm=new Y,this.encryptedData=new c3,Object.assign(this,e)}};f([p({type:Y})],ca.prototype,"encryptionAlgorithm",void 0);f([p({type:c3})],ca.prototype,"encryptedData",void 0);var V9,H9;(function(r){r[r.v1=0]="v1"})(H9||(H9={}));var l3=class extends be{},q9=V9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,V9.prototype)}};q9=V9=f([C({type:_.Sequence,itemType:wr})],q9);var la=class{constructor(e={}){this.version=H9.v1,this.privateKeyAlgorithm=new Y,this.privateKey=new l3,Object.assign(this,e)}};f([p({type:b.Integer})],la.prototype,"version",void 0);f([p({type:Y})],la.prototype,"privateKeyAlgorithm",void 0);f([p({type:l3})],la.prototype,"privateKey",void 0);f([p({type:q9,implicit:!0,context:0,optional:!0})],la.prototype,"attributes",void 0);var Rk=class extends la{};Rk=f([C({type:_.Sequence})],Rk);var Nk=class extends ca{};Nk=f([C({type:_.Sequence})],Nk);var u3=class{constructor(e={}){this.secretTypeId="",this.secretValue=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],u3.prototype,"secretTypeId",void 0);f([p({type:b.Any,context:0})],u3.prototype,"secretValue",void 0);var ua=class{constructor(e={}){this.mac=new Jc,this.macSalt=new be,this.iterations=1,Object.assign(this,e)}};f([p({type:Jc})],ua.prototype,"mac",void 0);f([p({type:be})],ua.prototype,"macSalt",void 0);f([p({type:b.Integer,defaultValue:1})],ua.prototype,"iterations",void 0);var ol=class{constructor(e={}){this.version=3,this.authSafe=new so,this.macData=new ua,Object.assign(this,e)}};f([p({type:b.Integer})],ol.prototype,"version",void 0);f([p({type:so})],ol.prototype,"authSafe",void 0);f([p({type:ua,optional:!0})],ol.prototype,"macData",void 0);var j9,fd=class{constructor(e={}){this.bagId="",this.bagValue=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],fd.prototype,"bagId",void 0);f([p({type:b.Any,context:0})],fd.prototype,"bagValue",void 0);f([p({type:rl,repeated:"set",optional:!0})],fd.prototype,"bagAttributes",void 0);var Dk=j9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,j9.prototype)}};Dk=j9=f([C({type:_.Sequence,itemType:fd})],Dk);var W9,G9,z9,Lt="1.2.840.113549.1.9",bke=`${Lt}.0`,Gk=`${Lt}.24`,rp=`${Lt}.25`,zk=`${Lt}.26`,Xk=`${Lt}.27`,xke=`${Gk}.1`,vke=`${Gk}.2`,Eke=`${Lt}.1`,Ske=`${Lt}.2`,Ake=`${Lt}.3`,_ke=`${Lt}.4`,Ike=`${Lt}.5`,Tke=`${Lt}.6`,rw=`${Lt}.7`,Cke=`${Lt}.8`,kke=`${Lt}.9`,Pke=`${Lt}.13`,np=`${Lt}.14`,Rke=`${Lt}.15`,Nke=`${Lt}.20`,Dke=`${Lt}.21`;var Oke=`${rp}.1`,Lke=`${rp}.2`,Bke=`${rp}.3`,Mke=`${rp}.4`,Uke=`${rp}.5`,op="1.3.6.1.5.5.7.9",Fke=`${op}.1`,$ke=`${op}.2`,Kke=`${op}.3`,Vke=`${op}.4`,Hke=`${op}.5`,qke=`${zk}.1`,jke=`${zk}.2`,Wke=`${Xk}.1`,Gke=`${Xk}.2`,zke=`${Lt}.16`,Xke=`${Lt}.22`,Yke=`${Lt}.23`,Qke=`${p9}.65`,d3=class extends Gt{constructor(e={}){super(e)}toString(){return{}.toString(),this.ia5String||super.toString()}};f([p({type:b.IA5String})],d3.prototype,"ia5String",void 0);d3=f([C({type:_.Choice})],d3);var Ok=class extends so{};Ok=f([C({type:_.Sequence})],Ok);var Lk=class extends ol{};Lk=f([C({type:_.Sequence})],Lk);var Bk=class extends ca{};Bk=f([C({type:_.Sequence})],Bk);var X9=class{constructor(e=""){this.value=e}toString(){return this.value}};f([p({type:b.IA5String})],X9.prototype,"value",void 0);X9=f([C({type:_.Choice})],X9);var Mk=class extends d3{};Mk=f([C({type:_.Choice})],Mk);var Uk=class extends Gt{};Uk=f([C({type:_.Choice})],Uk);var Y9=class{constructor(e=new Date){this.value=e}};f([p({type:b.GeneralizedTime})],Y9.prototype,"value",void 0);Y9=f([C({type:_.Choice})],Y9);var Fk=class extends Gt{};Fk=f([C({type:_.Choice})],Fk);var Q9=class{constructor(e="M"){this.value=e}toString(){return this.value}};f([p({type:b.PrintableString})],Q9.prototype,"value",void 0);Q9=f([C({type:_.Choice})],Q9);var f3=class{constructor(e=""){this.value=e}toString(){return this.value}};f([p({type:b.PrintableString})],f3.prototype,"value",void 0);f3=f([C({type:_.Choice})],f3);var $k=class extends f3{};$k=f([C({type:_.Choice})],$k);var Kk=class extends Gt{};Kk=f([C({type:_.Choice})],Kk);var Z9=class{constructor(e=""){this.value=e}toString(){return this.value}};f([p({type:b.ObjectIdentifier})],Z9.prototype,"value",void 0);Z9=f([C({type:_.Choice})],Z9);var Vk=class extends Ot{};Vk=f([C({type:_.Choice})],Vk);var J9=class{constructor(e=0){this.value=e}toString(){return this.value.toString()}};f([p({type:b.Integer})],J9.prototype,"value",void 0);J9=f([C({type:_.Choice})],J9);var Hk=class extends mn{};Hk=f([C({type:_.Sequence})],Hk);var tp=class extends Gt{};tp=f([C({type:_.Choice})],tp);var qk=W9=class extends Fn{constructor(e){super(e),Object.setPrototypeOf(this,W9.prototype)}};qk=W9=f([C({type:_.Sequence})],qk);var jk=G9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,G9.prototype)}};jk=G9=f([C({type:_.Set,itemType:Ho})],jk);var ew=class{constructor(e=""){this.value=e}toString(){return this.value}};f([p({type:b.BmpString})],ew.prototype,"value",void 0);ew=f([C({type:_.Choice})],ew);var tw=class extends Y{};tw=f([C({type:_.Sequence})],tw);var Wk=z9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,z9.prototype)}};Wk=z9=f([C({type:_.Sequence,itemType:tw})],Wk);var nw,ip=nw=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,nw.prototype)}};ip=nw=f([C({type:_.Sequence,itemType:wr})],ip);var gi=class{constructor(e={}){this.version=0,this.subject=new lt,this.subjectPKInfo=new br,this.attributes=new ip,Object.assign(this,e)}};f([p({type:b.Integer})],gi.prototype,"version",void 0);f([p({type:lt})],gi.prototype,"subject",void 0);f([p({type:br})],gi.prototype,"subjectPKInfo",void 0);f([p({type:ip,implicit:!0,context:0})],gi.prototype,"attributes",void 0);var da=class{constructor(e={}){this.certificationRequestInfo=new gi,this.signatureAlgorithm=new Y,this.signature=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:gi})],da.prototype,"certificationRequestInfo",void 0);f([p({type:Y})],da.prototype,"signatureAlgorithm",void 0);f([p({type:b.BitString})],da.prototype,"signature",void 0);var dp="crypto.algorithm",hw=class{getAlgorithms(){return pt.resolveAll(dp)}toAsnAlgorithm(e){({...e});for(let t of this.getAlgorithms()){let n=t.toAsnAlgorithm(e);if(n)return n}if(/^[0-9.]+$/.test(e.name)){let t=new Y({algorithm:e.name});if("parameters"in e){let n=e;t.parameters=n.parameters}return t}throw new Error("Cannot convert WebCrypto algorithm to ASN.1 algorithm")}toWebAlgorithm(e){for(let n of this.getAlgorithms()){let o=n.toWebAlgorithm(e);if(o)return o}return{name:e.algorithm,parameters:e.parameters}}},il="crypto.algorithmProvider";pt.registerSingleton(il,hw);var g3,xn="1.3.36.3.3.2.8.1.1",Yk=`${xn}.1`,Qk=`${xn}.2`,Zk=`${xn}.3`,Jk=`${xn}.4`,eP=`${xn}.5`,tP=`${xn}.6`,rP=`${xn}.7`,nP=`${xn}.8`,oP=`${xn}.9`,iP=`${xn}.10`,sP=`${xn}.11`,aP=`${xn}.12`,cP=`${xn}.13`,lP=`${xn}.14`,uP="brainpoolP160r1",dP="brainpoolP160t1",fP="brainpoolP192r1",hP="brainpoolP192t1",pP="brainpoolP224r1",mP="brainpoolP224t1",gP="brainpoolP256r1",yP="brainpoolP256t1",wP="brainpoolP320r1",bP="brainpoolP320t1",xP="brainpoolP384r1",vP="brainpoolP384t1",EP="brainpoolP512r1",SP="brainpoolP512t1",kt="ECDSA",ap=g3=class{toAsnAlgorithm(e){switch(e.name.toLowerCase()){case kt.toLowerCase():if("hash"in e)switch((typeof e.hash=="string"?e.hash:e.hash.name).toLowerCase()){case"sha-1":return FC;case"sha-256":return $C;case"sha-384":return KC;case"sha-512":return VC}else if("namedCurve"in e){let t="";switch(e.namedCurve){case"P-256":t=A9;break;case"K-256":t=g3.SECP256K1;break;case"P-384":t=_9;break;case"P-521":t=I9;break;case uP:t=Yk;break;case dP:t=Qk;break;case fP:t=Zk;break;case hP:t=Jk;break;case pP:t=eP;break;case mP:t=tP;break;case gP:t=rP;break;case yP:t=nP;break;case wP:t=oP;break;case bP:t=iP;break;case xP:t=sP;break;case vP:t=aP;break;case EP:t=cP;break;case SP:t=lP;break}if(t)return new Y({algorithm:Gc,parameters:ee.serialize(new hi({namedCurve:t}))})}}return null}toWebAlgorithm(e){switch(e.algorithm){case qh:return{name:kt,hash:{name:"SHA-1"}};case jh:return{name:kt,hash:{name:"SHA-256"}};case Wh:return{name:kt,hash:{name:"SHA-384"}};case Gh:return{name:kt,hash:{name:"SHA-512"}};case Gc:{if(!e.parameters)throw new TypeError("Cannot get required parameters from EC algorithm");switch(ee.parse(e.parameters,hi).namedCurve){case A9:return{name:kt,namedCurve:"P-256"};case g3.SECP256K1:return{name:kt,namedCurve:"K-256"};case _9:return{name:kt,namedCurve:"P-384"};case I9:return{name:kt,namedCurve:"P-521"};case Yk:return{name:kt,namedCurve:uP};case Qk:return{name:kt,namedCurve:dP};case Zk:return{name:kt,namedCurve:fP};case Jk:return{name:kt,namedCurve:hP};case eP:return{name:kt,namedCurve:pP};case tP:return{name:kt,namedCurve:mP};case rP:return{name:kt,namedCurve:gP};case nP:return{name:kt,namedCurve:yP};case oP:return{name:kt,namedCurve:wP};case iP:return{name:kt,namedCurve:bP};case sP:return{name:kt,namedCurve:xP};case aP:return{name:kt,namedCurve:vP};case cP:return{name:kt,namedCurve:EP};case lP:return{name:kt,namedCurve:SP}}}}return null}};ap.SECP256K1="1.3.132.0.10";ap=g3=f([aa()],ap);pt.registerSingleton(dp,ap);var OP=Symbol("name"),LP=Symbol("value"),Ge=class{constructor(e,t={},n=""){this[OP]=e,this[LP]=n;for(let o in t)this[o]=t[o]}};Ge.NAME=OP;Ge.VALUE=LP;var pw=class{static toTextObject(e){let t=new Ge("Algorithm Identifier",{},wi.toString(e.algorithm));if(e.parameters)switch(e.algorithm){case Gc:{let n=new ap().toWebAlgorithm(e);n&&"namedCurve"in n?t["Named Curve"]=n.namedCurve:t.Parameters=e.parameters;break}default:t.Parameters=e.parameters}return t}},wi=class{static toString(e){let t=this.items[e];return t||e}};wi.items={[Xc]:"sha1",[Zg]:"sha224",[Yc]:"sha256",[Qc]:"sha384",[Zc]:"sha512",[pi]:"rsaEncryption",[rd]:"sha1WithRSAEncryption",[GC]:"sha224WithRSAEncryption",[Qg]:"sha256WithRSAEncryption",[nd]:"sha384WithRSAEncryption",[od]:"sha512WithRSAEncryption",[Gc]:"ecPublicKey",[qh]:"ecdsaWithSHA1",[Yg]:"ecdsaWithSHA224",[jh]:"ecdsaWithSHA256",[Wh]:"ecdsaWithSHA384",[Gh]:"ecdsaWithSHA512",[bC]:"TLS WWW server authentication",[xC]:"TLS WWW client authentication",[vC]:"Code Signing",[EC]:"E-mail Protection",[SC]:"Time Stamping",[AC]:"OCSP Signing",[MC]:"Signed Data"};var Ji=class{static serialize(e){return this.serializeObj(e).join(`
|
|
22
|
+
`)}static pad(e=0){return"".padStart(2*e," ")}static serializeObj(e,t=0){let n=[],o=this.pad(t++),i="",s=e[Ge.VALUE];s&&(i=` ${s}`),n.push(`${o}${e[Ge.NAME]}:${i}`),o=this.pad(t);for(let a in e){if(typeof a=="symbol")continue;let c=e[a],l=a?`${a}: `:"";if(typeof c=="string"||typeof c=="number"||typeof c=="boolean")n.push(`${o}${l}${c}`);else if(c instanceof Date)n.push(`${o}${l}${c.toUTCString()}`);else if(Array.isArray(c))for(let u of c)u[Ge.NAME]=a,n.push(...this.serializeObj(u,t));else if(c instanceof Ge)c[Ge.NAME]=a,n.push(...this.serializeObj(c,t));else if(Q.BufferSourceConverter.isBufferSource(c))a?(n.push(`${o}${l}`),n.push(...this.serializeBufferSource(c,t+1))):n.push(...this.serializeBufferSource(c,t));else if("toTextObject"in c){let u=c.toTextObject();u[Ge.NAME]=a,n.push(...this.serializeObj(u,t))}else throw new TypeError("Cannot serialize data in text format. Unsupported type.")}return n}static serializeBufferSource(e,t=0){let n=this.pad(t),o=Q.BufferSourceConverter.toUint8Array(e),i=[];for(let s=0;s<o.length;){let a=[];for(let c=0;c<16&&s<o.length;c++){c===8&&a.push("");let l=o[s++].toString(16).padStart(2,"0");a.push(l)}i.push(`${n}${a.join(" ")}`)}return i}static serializeAlgorithm(e){return this.algorithmSerializer.toTextObject(e)}};Ji.oidSerializer=wi;Ji.algorithmSerializer=pw;var fa=class r{constructor(...e){if(e.length===1){let t=e[0];this.rawData=ee.serialize(t),this.onInit(t)}else{let t=ee.parse(e[0],e[1]);this.rawData=Q.BufferSourceConverter.toArrayBuffer(e[0]),this.onInit(t)}}equal(e){return e instanceof r?(0,Q.isEqual)(e.rawData,this.rawData):!1}toString(e="text"){switch(e){case"asn":return ee.toString(this.rawData);case"text":return Ji.serialize(this.toTextObject());case"hex":return Q.Convert.ToHex(this.rawData);case"base64":return Q.Convert.ToBase64(this.rawData);case"base64url":return Q.Convert.ToBase64Url(this.rawData);default:throw TypeError("Argument 'format' is unsupported value")}}getTextName(){return this.constructor.NAME}toTextObject(){let e=this.toTextObjectEmpty();return e[""]=this.rawData,e}toTextObjectEmpty(e){return new Ge(this.getTextName(),{},e)}};fa.NAME="ASN";var lo=class r extends fa{constructor(...e){let t;Q.BufferSourceConverter.isBufferSource(e[0])?t=Q.BufferSourceConverter.toArrayBuffer(e[0]):t=ee.serialize(new xr({extnID:e[0],critical:e[1],extnValue:new be(Q.BufferSourceConverter.toArrayBuffer(e[2]))})),super(t,xr)}onInit(e){this.type=e.extnID,this.critical=e.critical,this.value=e.extnValue.buffer}toTextObject(){let e=this.toTextObjectWithoutValue();return e[""]=this.value,e}toTextObjectWithoutValue(){let e=this.toTextObjectEmpty(this.critical?"critical":void 0);return e[Ge.NAME]===r.NAME&&(e[Ge.NAME]=wi.toString(this.type)),e}},BP,cp=class r{static isCryptoKeyPair(e){return e&&e.privateKey&&e.publicKey}static isCryptoKey(e){return e&&e.usages&&e.type&&e.algorithm&&e.extractable!==void 0}constructor(){this.items=new Map,this[BP]="CryptoProvider",typeof self<"u"&&typeof crypto<"u"?this.set(r.DEFAULT,crypto):typeof globalThis<"u"&&globalThis.crypto&&globalThis.crypto.subtle&&this.set(r.DEFAULT,globalThis.crypto)}clear(){this.items.clear()}delete(e){return this.items.delete(e)}forEach(e,t){return this.items.forEach(e,t)}has(e){return this.items.has(e)}get size(){return this.items.size}entries(){return this.items.entries()}keys(){return this.items.keys()}values(){return this.items.values()}[Symbol.iterator](){return this.items[Symbol.iterator]()}get(e=r.DEFAULT){let t=this.items.get(e.toLowerCase());if(!t)throw new Error(`Cannot get Crypto by name '${e}'`);return t}set(e,t){if(typeof e=="string"){if(!t)throw new TypeError("Argument 'value' is required");this.items.set(e.toLowerCase(),t)}else this.items.set(r.DEFAULT,e);return this}};BP=Symbol.toStringTag;cp.DEFAULT="default";var Ar=new cp,jV=/^[0-2](?:\.[1-9][0-9]*)+$/;function WV(r){return new RegExp(jV).test(r)}var w3=class{constructor(e={}){this.items={};for(let t in e)this.register(t,e[t])}get(e){return this.items[e]||null}findId(e){return WV(e)?e:this.get(e)}register(e,t){this.items[e]=t,this.items[t]=e}},wn=new w3;wn.register("CN","2.5.4.3");wn.register("L","2.5.4.7");wn.register("ST","2.5.4.8");wn.register("O","2.5.4.10");wn.register("OU","2.5.4.11");wn.register("C","2.5.4.6");wn.register("DC","0.9.2342.19200300.100.1.25");wn.register("E","1.2.840.113549.1.9.1");wn.register("G","2.5.4.42");wn.register("I","2.5.4.43");wn.register("SN","2.5.4.4");wn.register("T","2.5.4.12");function GV(r,e){return`\\${Q.Convert.ToHex(Q.Convert.FromUtf8String(e)).toUpperCase()}`}function zV(r){return r.replace(/([,+"\\<>;])/g,"\\$1").replace(/^([ #])/,"\\$1").replace(/([ ]$)/,"\\$1").replace(/([\r\n\t])/,GV)}var co=class r{static isASCII(e){for(let t=0;t<e.length;t++)if(e.charCodeAt(t)>255)return!1;return!0}static isPrintableString(e){return/^[A-Za-z0-9 '()+,-./:=?]*$/g.test(e)}constructor(e,t={}){this.extraNames=new w3,this.asn=new lt;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let o=t[n];this.extraNames.register(n,o)}typeof e=="string"?this.asn=this.fromString(e):e instanceof lt?this.asn=e:Q.BufferSourceConverter.isBufferSource(e)?this.asn=ee.parse(e,lt):this.asn=this.fromJSON(e)}getField(e){let t=this.extraNames.findId(e)||wn.findId(e),n=[];for(let o of this.asn)for(let i of o)i.type===t&&n.push(i.value.toString());return n}getName(e){return this.extraNames.get(e)||wn.get(e)}toString(){return this.asn.map(e=>e.map(t=>{let n=this.getName(t.type)||t.type,o=t.value.anyValue?`#${Q.Convert.ToHex(t.value.anyValue)}`:zV(t.value.toString());return`${n}=${o}`}).join("+")).join(", ")}toJSON(){var e;let t=[];for(let n of this.asn){let o={};for(let i of n){let s=this.getName(i.type)||i.type;(e=o[s])!==null&&e!==void 0||(o[s]=[]),o[s].push(i.value.anyValue?`#${Q.Convert.ToHex(i.value.anyValue)}`:i.value.toString())}t.push(o)}return t}fromString(e){let t=new lt,n=/(\d\.[\d.]*\d|[A-Za-z]+)=((?:"")|(?:".*?[^\\]")|(?:[^,+].*?(?:[^\\][,+]))|(?:))([,+])?/g,o=null,i=",";for(;o=n.exec(`${e},`);){let[,s,a]=o,c=a[a.length-1];(c===","||c==="+")&&(a=a.slice(0,a.length-1),o[3]=c);let l=o[3];s=this.getTypeOid(s);let u=this.createAttribute(s,a);i==="+"?t[t.length-1].push(u):t.push(new Gs([u])),i=l}return t}fromJSON(e){let t=new lt;for(let n of e){let o=new Gs;for(let i in n){let s=this.getTypeOid(i),a=n[i];for(let c of a){let l=this.createAttribute(s,c);o.push(l)}}t.push(o)}return t}getTypeOid(e){if(/[\d.]+/.test(e)||(e=this.getName(e)||""),!e)throw new Error(`Cannot get OID for name type '${e}'`);return e}createAttribute(e,t){let n=new Tc({type:e});if(typeof t=="object")for(let o in t)switch(o){case"ia5String":n.value.ia5String=t[o];break;case"utf8String":n.value.utf8String=t[o];break;case"universalString":n.value.universalString=t[o];break;case"bmpString":n.value.bmpString=t[o];break;case"printableString":n.value.printableString=t[o];break}else if(t[0]==="#")n.value.anyValue=Q.Convert.FromHex(t.slice(1));else{let o=this.processStringValue(t);e===this.getName("E")||e===this.getName("DC")?n.value.ia5String=o:r.isPrintableString(o)?n.value.printableString=o:n.value.utf8String=o}return n}processStringValue(e){let t=/"(.*?[^\\])?"/.exec(e);return t&&(e=t[1]),e.replace(/\\0a/ig,`
|
|
23
|
+
`).replace(/\\0d/ig,"\r").replace(/\\0g/ig," ").replace(/\\(.)/g,"$1")}toArrayBuffer(){return ee.serialize(this.asn)}async getThumbprint(...e){var t;let n,o="SHA-1";return e.length>=1&&!(!((t=e[0])===null||t===void 0)&&t.subtle)?(o=e[0]||o,n=e[1]||Ar.get()):n=e[0]||Ar.get(),await n.subtle.digest(o,this.toArrayBuffer())}},MP="Cannot initialize GeneralName from ASN.1 data.",AP=`${MP} Unsupported string format in use.`,XV=`${MP} Value doesn't match to GUID regular expression.`,_P=/^([0-9a-f]{8})-?([0-9a-f]{4})-?([0-9a-f]{4})-?([0-9a-f]{4})-?([0-9a-f]{12})$/i,IP="1.3.6.1.4.1.311.25.1",TP="1.3.6.1.4.1.311.20.2.3",ow="dns",iw="dn",sw="email",aw="ip",cw="url",lw="guid",uw="upn",h3="id",yi=class extends fa{constructor(...e){let t;if(e.length===2)switch(e[0]){case iw:{let n=new co(e[1]).toArrayBuffer(),o=ee.parse(n,lt);t=new Ee({directoryName:o});break}case ow:t=new Ee({dNSName:e[1]});break;case sw:t=new Ee({rfc822Name:e[1]});break;case lw:{let n=new RegExp(_P,"i").exec(e[1]);if(!n)throw new Error("Cannot parse GUID value. Value doesn't match to regular expression");let o=n.slice(1).map((i,s)=>s<3?Q.Convert.ToHex(new Uint8Array(Q.Convert.FromHex(i)).reverse()):i).join("");t=new Ee({otherName:new zs({typeId:IP,value:ee.serialize(new be(Q.Convert.FromHex(o)))})});break}case aw:t=new Ee({iPAddress:e[1]});break;case h3:t=new Ee({registeredID:e[1]});break;case uw:{t=new Ee({otherName:new zs({typeId:TP,value:ee.serialize(L7.toASN(e[1]))})});break}case cw:t=new Ee({uniformResourceIdentifier:e[1]});break;default:throw new Error("Cannot create GeneralName. Unsupported type of the name")}else Q.BufferSourceConverter.isBufferSource(e[0])?t=ee.parse(e[0],Ee):t=e[0];super(t)}onInit(e){if(e.dNSName!=null)this.type=ow,this.value=e.dNSName;else if(e.rfc822Name!=null)this.type=sw,this.value=e.rfc822Name;else if(e.iPAddress!=null)this.type=aw,this.value=e.iPAddress;else if(e.uniformResourceIdentifier!=null)this.type=cw,this.value=e.uniformResourceIdentifier;else if(e.registeredID!=null)this.type=h3,this.value=e.registeredID;else if(e.directoryName!=null)this.type=iw,this.value=new co(e.directoryName).toString();else if(e.otherName!=null)if(e.otherName.typeId===IP){this.type=lw;let t=ee.parse(e.otherName.value,be),n=new RegExp(_P,"i").exec(Q.Convert.ToHex(t));if(!n)throw new Error(XV);this.value=n.slice(1).map((o,i)=>i<3?Q.Convert.ToHex(new Uint8Array(Q.Convert.FromHex(o)).reverse()):o).join("-")}else if(e.otherName.typeId===TP)this.type=uw,this.value=ee.parse(e.otherName.value,Gt).toString();else throw new Error(AP);else throw new Error(AP)}toJSON(){return{type:this.type,value:this.value}}toTextObject(){let e;switch(this.type){case iw:case ow:case lw:case aw:case h3:case uw:case cw:e=this.type.toUpperCase();break;case sw:e="Email";break;default:throw new Error("Unsupported GeneralName type")}let t=this.value;return this.type===h3&&(t=wi.toString(t)),new Ge(e,void 0,t)}},sl=class extends fa{constructor(e){let t;if(e instanceof It)t=e;else if(Array.isArray(e)){let n=[];for(let o of e)if(o instanceof Ee)n.push(o);else{let i=ee.parse(new yi(o.type,o.value).rawData,Ee);n.push(i)}t=new It(n)}else if(Q.BufferSourceConverter.isBufferSource(e))t=ee.parse(e,It);else throw new Error("Cannot initialize GeneralNames. Incorrect incoming arguments");super(t)}onInit(e){let t=[];for(let n of e){let o=null;try{o=new yi(n)}catch{continue}t.push(o)}this.items=t}toJSON(){return this.items.map(e=>e.toJSON())}toTextObject(){let e=super.toTextObjectEmpty();for(let t of this.items){let n=t.toTextObject(),o=e[n[Ge.NAME]];Array.isArray(o)||(o=[],e[n[Ge.NAME]]=o),o.push(n)}return e}};sl.NAME="GeneralNames";var sp="-{5}",lp="\\n",YV=`[^${lp}]+`,QV=`${sp}BEGIN (${YV}(?=${sp}))${sp}`,ZV=`${sp}END \\1${sp}`,hd="\\n",JV=`[^:${lp}]+`,eH=`(?:[^${lp}]+${hd}(?: +[^${lp}]+${hd})*)`,tH="[a-zA-Z0-9=+/]+",rH=`(?:${tH}${hd})+`,CP=`${QV}${hd}(?:((?:${JV}: ${eH})+))?${hd}?(${rH})${ZV}`,Qr=class{static isPem(e){return typeof e=="string"&&new RegExp(CP,"g").test(e)}static decodeWithHeaders(e){e=e.replace(/\r/g,"");let t=new RegExp(CP,"g"),n=[],o=null;for(;o=t.exec(e);){let i=o[3].replace(new RegExp(`[${lp}]+`,"g"),""),s={type:o[1],headers:[],rawData:Q.Convert.FromBase64(i)},a=o[2];if(a){let c=a.split(new RegExp(hd,"g")),l=null;for(let u of c){let[d,h]=u.split(/:(.*)/);if(h===void 0){if(!l)throw new Error("Cannot parse PEM string. Incorrect header value");l.value+=d.trim()}else l&&s.headers.push(l),l={key:d,value:h.trim()}}l&&s.headers.push(l)}n.push(s)}return n}static decode(e){return this.decodeWithHeaders(e).map(n=>n.rawData)}static decodeFirst(e){let t=this.decode(e);if(!t.length)throw new RangeError("PEM string doesn't contain any objects");return t[0]}static encode(e,t){if(Array.isArray(e)){let n=new Array;return t?e.forEach(o=>{if(!Q.BufferSourceConverter.isBufferSource(o))throw new TypeError("Cannot encode array of BufferSource in PEM format. Not all items of the array are BufferSource");n.push(this.encodeStruct({type:t,rawData:Q.BufferSourceConverter.toArrayBuffer(o)}))}):e.forEach(o=>{if(!("type"in o))throw new TypeError("Cannot encode array of PemStruct in PEM format. Not all items of the array are PemStrut");n.push(this.encodeStruct(o))}),n.join(`
|
|
24
|
+
`)}else{if(!t)throw new Error("Required argument 'tag' is missed");return this.encodeStruct({type:t,rawData:Q.BufferSourceConverter.toArrayBuffer(e)})}}static encodeStruct(e){var t;let n=e.type.toLocaleUpperCase(),o=[];if(o.push(`-----BEGIN ${n}-----`),!((t=e.headers)===null||t===void 0)&&t.length){for(let l of e.headers)o.push(`${l.key}: ${l.value}`);o.push("")}let i=Q.Convert.ToBase64(e.rawData),s,a=0,c=Array();for(;a<i.length&&(i.length-a<64?s=i.substring(a):(s=i.substring(a,a+64),a+=64),s.length!==0);)if(c.push(s),s.length<64)break;return o.push(...c),o.push(`-----END ${n}-----`),o.join(`
|
|
25
|
+
`)}};Qr.CertificateTag="CERTIFICATE";Qr.CrlTag="CRL";Qr.CertificateRequestTag="CERTIFICATE REQUEST";Qr.PublicKeyTag="PUBLIC KEY";Qr.PrivateKeyTag="PRIVATE KEY";var ha=class r extends fa{static isAsnEncoded(e){return Q.BufferSourceConverter.isBufferSource(e)||typeof e=="string"}static toArrayBuffer(e){if(typeof e=="string"){if(Qr.isPem(e))return Qr.decode(e)[0];if(Q.Convert.isHex(e))return Q.Convert.FromHex(e);if(Q.Convert.isBase64(e))return Q.Convert.FromBase64(e);if(Q.Convert.isBase64Url(e))return Q.Convert.FromBase64Url(e);throw new TypeError("Unsupported format of 'raw' argument. Must be one of DER, PEM, HEX, Base64, or Base4Url")}else{let t=Q.Convert.ToBinary(e);return Qr.isPem(t)?Qr.decode(t)[0]:Q.Convert.isHex(t)?Q.Convert.FromHex(t):Q.Convert.isBase64(t)?Q.Convert.FromBase64(t):Q.Convert.isBase64Url(t)?Q.Convert.FromBase64Url(t):Q.BufferSourceConverter.toArrayBuffer(e)}}constructor(...e){r.isAsnEncoded(e[0])?super(r.toArrayBuffer(e[0]),e[1]):super(e[0])}toString(e="pem"){switch(e){case"pem":return Qr.encode(this.rawData,this.tag);default:return super.toString(e)}}},Zi=class r extends ha{static async create(e,t=Ar.get()){if(e instanceof r)return e;if(cp.isCryptoKey(e)){if(e.type!=="public")throw new TypeError("Public key is required");let n=await t.subtle.exportKey("spki",e);return new r(n)}else{if(e.publicKey)return e.publicKey;if(Q.BufferSourceConverter.isBufferSource(e))return new r(e);throw new TypeError("Unsupported PublicKeyType")}}constructor(e){ha.isAsnEncoded(e)?super(e,br):super(e),this.tag=Qr.PublicKeyTag}async export(...e){let t,n=["verify"],o={hash:"SHA-256",...this.algorithm};e.length>1?(o=e[0]||o,n=e[1]||n,t=e[2]||Ar.get()):t=e[0]||Ar.get();let i=this.rawData,s=ee.parse(this.rawData,br);return s.algorithm.algorithm===oa&&(i=nH(s,i)),t.subtle.importKey("spki",i,o,!0,n)}onInit(e){let t=pt.resolve(il),n=this.algorithm=t.toWebAlgorithm(e.algorithm);switch(e.algorithm.algorithm){case pi:{let o=ee.parse(e.subjectPublicKey,ad),i=Q.BufferSourceConverter.toUint8Array(o.modulus);n.publicExponent=Q.BufferSourceConverter.toUint8Array(o.publicExponent),n.modulusLength=(i[0]?i:i.slice(1)).byteLength<<3;break}}}async getThumbprint(...e){var t;let n,o="SHA-1";return e.length>=1&&!(!((t=e[0])===null||t===void 0)&&t.subtle)?(o=e[0]||o,n=e[1]||Ar.get()):n=e[0]||Ar.get(),await n.subtle.digest(o,this.rawData)}async getKeyIdentifier(...e){let t,n="SHA-1";e.length===1?typeof e[0]=="string"?(n=e[0],t=Ar.get()):t=e[0]:e.length===2?(n=e[0],t=e[1]):t=Ar.get();let o=ee.parse(this.rawData,br);return await t.subtle.digest(n,o.subjectPublicKey)}toTextObject(){let e=this.toTextObjectEmpty(),t=ee.parse(this.rawData,br);switch(e.Algorithm=Ji.serializeAlgorithm(t.algorithm),t.algorithm.algorithm){case Gc:e["EC Point"]=t.subjectPublicKey;break;case pi:default:e["Raw Data"]=t.subjectPublicKey}return e}};function nH(r,e){return r.algorithm=new Y({algorithm:pi,parameters:null}),e=ee.serialize(r),e}var b3=class r extends lo{static async create(e,t=!1,n=Ar.get()){if("name"in e&&"serialNumber"in e)return new r(e,t);let i=await(await Zi.create(e,n)).getKeyIdentifier(n);return new r(Q.Convert.ToHex(i),t)}constructor(...e){if(Q.BufferSourceConverter.isBufferSource(e[0]))super(e[0]);else if(typeof e[0]=="string"){let t=new li({keyIdentifier:new Pc(Q.Convert.FromHex(e[0]))});super(kg,e[1],ee.serialize(t))}else{let t=e[0],n=t.name instanceof sl?ee.parse(t.name.rawData,It):t.name,o=new li({authorityCertIssuer:n,authorityCertSerialNumber:Q.Convert.FromHex(t.serialNumber)});super(kg,e[1],ee.serialize(o))}}onInit(e){super.onInit(e);let t=ee.parse(e.extnValue,li);t.keyIdentifier&&(this.keyId=Q.Convert.ToHex(t.keyIdentifier)),(t.authorityCertIssuer||t.authorityCertSerialNumber)&&(this.certId={name:t.authorityCertIssuer||[],serialNumber:t.authorityCertSerialNumber?Q.Convert.ToHex(t.authorityCertSerialNumber):""})}toTextObject(){let e=this.toTextObjectWithoutValue(),t=ee.parse(this.value,li);return t.authorityCertIssuer&&(e["Authority Issuer"]=new sl(t.authorityCertIssuer).toTextObject()),t.authorityCertSerialNumber&&(e["Authority Serial Number"]=t.authorityCertSerialNumber),t.keyIdentifier&&(e[""]=t.keyIdentifier),e}};b3.NAME="Authority Key Identifier";var pd=class extends lo{constructor(...e){if(Q.BufferSourceConverter.isBufferSource(e[0])){super(e[0]);let t=ee.parse(this.value,Rc);this.ca=t.cA,this.pathLength=t.pathLenConstraint}else{let t=new Rc({cA:e[0],pathLenConstraint:e[1]});super(Pg,e[2],ee.serialize(t)),this.ca=e[0],this.pathLength=e[1]}}toTextObject(){let e=this.toTextObjectWithoutValue();return this.ca&&(e.CA=this.ca),this.pathLength!==void 0&&(e["Path Length"]=this.pathLength),e}};pd.NAME="Basic Constraints";var kP;(function(r){r.serverAuth="1.3.6.1.5.5.7.3.1",r.clientAuth="1.3.6.1.5.5.7.3.2",r.codeSigning="1.3.6.1.5.5.7.3.3",r.emailProtection="1.3.6.1.5.5.7.3.4",r.timeStamping="1.3.6.1.5.5.7.3.8",r.ocspSigning="1.3.6.1.5.5.7.3.9"})(kP||(kP={}));var x3=class extends lo{constructor(...e){if(Q.BufferSourceConverter.isBufferSource(e[0])){super(e[0]);let t=ee.parse(this.value,_h);this.usages=t.map(n=>n)}else{let t=new _h(e[0]);super(Og,e[1],ee.serialize(t)),this.usages=e[0]}}toTextObject(){let e=this.toTextObjectWithoutValue();return e[""]=this.usages.map(t=>wi.toString(t)).join(", "),e}};x3.NAME="Extended Key Usages";var PP;(function(r){r[r.digitalSignature=1]="digitalSignature",r[r.nonRepudiation=2]="nonRepudiation",r[r.keyEncipherment=4]="keyEncipherment",r[r.dataEncipherment=8]="dataEncipherment",r[r.keyAgreement=16]="keyAgreement",r[r.keyCertSign=32]="keyCertSign",r[r.cRLSign=64]="cRLSign",r[r.encipherOnly=128]="encipherOnly",r[r.decipherOnly=256]="decipherOnly"})(PP||(PP={}));var v3=class extends lo{constructor(...e){if(Q.BufferSourceConverter.isBufferSource(e[0])){super(e[0]);let t=ee.parse(this.value,Fu);this.usages=t.toNumber()}else{let t=new Fu(e[0]);super(Lg,e[1],ee.serialize(t)),this.usages=e[0]}}toTextObject(){let e=this.toTextObjectWithoutValue(),t=ee.parse(this.value,Fu);return e[""]=t.toJSON().join(", "),e}};v3.NAME="Key Usages";var E3=class r extends lo{static async create(e,t=!1,n=Ar.get()){let i=await(await Zi.create(e,n)).getKeyIdentifier(n);return new r(Q.Convert.ToHex(i),t)}constructor(...e){if(Q.BufferSourceConverter.isBufferSource(e[0])){super(e[0]);let t=ee.parse(this.value,hn);this.keyId=Q.Convert.ToHex(t)}else{let t=typeof e[0]=="string"?Q.Convert.FromHex(e[0]):e[0],n=new hn(t);super(a9,e[1],ee.serialize(n)),this.keyId=Q.Convert.ToHex(t)}}toTextObject(){let e=this.toTextObjectWithoutValue(),t=ee.parse(this.value,hn);return e[""]=t,e}};E3.NAME="Subject Key Identifier";var S3=class extends lo{constructor(...e){Q.BufferSourceConverter.isBufferSource(e[0])?super(e[0]):super(i9,e[1],new sl(e[0]||[]).rawData)}onInit(e){super.onInit(e);let t=ee.parse(e.extnValue,Fg);this.names=new sl(t)}toTextObject(){let e=this.toTextObjectWithoutValue(),t=this.names.toTextObject();for(let n in t)e[n]=t[n];return e}};S3.NAME="Subject Alternative Name";var bn=class{static register(e,t){this.items.set(e,t)}static create(e){let t=new lo(e),n=this.items.get(t.type);return n?new n(e):t}};bn.items=new Map;var A3=class extends lo{constructor(...e){var t;if(Q.BufferSourceConverter.isBufferSource(e[0])){super(e[0]);let n=ee.parse(this.value,xh);this.policies=n.map(o=>o.policyIdentifier)}else{let n=e[0],o=(t=e[1])!==null&&t!==void 0?t:!1,i=new xh(n.map(s=>new Nc({policyIdentifier:s})));super(Ng,o,ee.serialize(i)),this.policies=n}}toTextObject(){let e=this.toTextObjectWithoutValue();return e.Policy=this.policies.map(t=>new Ge("",{},wi.toString(t))),e}};A3.NAME="Certificate Policies";bn.register(Ng,A3);var _3=class extends lo{constructor(...e){var t;if(Q.BufferSourceConverter.isBufferSource(e[0]))super(e[0]);else if(Array.isArray(e[0])&&typeof e[0][0]=="string"){let o=e[0].map(s=>new ui({distributionPoint:new Wi({fullName:[new Ee({uniformResourceIdentifier:s})]})})),i=new Qs(o);super(Dg,e[1],ee.serialize(i))}else{let n=new Qs(e[0]);super(Dg,e[1],ee.serialize(n))}(t=this.distributionPoints)!==null&&t!==void 0||(this.distributionPoints=[])}onInit(e){super.onInit(e);let t=ee.parse(e.extnValue,Qs);this.distributionPoints=t}toTextObject(){let e=this.toTextObjectWithoutValue();return e["Distribution Point"]=this.distributionPoints.map(t=>{var n;let o={};return t.distributionPoint&&(o[""]=(n=t.distributionPoint.fullName)===null||n===void 0?void 0:n.map(i=>new yi(i).toString()).join(", ")),t.reasons&&(o.Reasons=t.reasons.toString()),t.cRLIssuer&&(o["CRL Issuer"]=t.cRLIssuer.map(i=>i.toString()).join(", ")),o}),e}};_3.NAME="CRL Distribution Points";var I3=class extends lo{constructor(...e){var t,n,o,i;if(Q.BufferSourceConverter.isBufferSource(e[0]))super(e[0]);else if(e[0]instanceof kc){let s=new kc(e[0]);super(Cg,e[1],ee.serialize(s))}else{let s=e[0],a=new kc;m3(a,s,H7,"ocsp"),m3(a,s,q7,"caIssuers"),m3(a,s,j7,"timeStamping"),m3(a,s,W7,"caRepository"),super(Cg,e[1],ee.serialize(a))}(t=this.ocsp)!==null&&t!==void 0||(this.ocsp=[]),(n=this.caIssuers)!==null&&n!==void 0||(this.caIssuers=[]),(o=this.timeStamping)!==null&&o!==void 0||(this.timeStamping=[]),(i=this.caRepository)!==null&&i!==void 0||(this.caRepository=[])}onInit(e){super.onInit(e),this.ocsp=[],this.caIssuers=[],this.timeStamping=[],this.caRepository=[],ee.parse(e.extnValue,kc).forEach(n=>{switch(n.accessMethod){case H7:this.ocsp.push(new yi(n.accessLocation));break;case q7:this.caIssuers.push(new yi(n.accessLocation));break;case j7:this.timeStamping.push(new yi(n.accessLocation));break;case W7:this.caRepository.push(new yi(n.accessLocation));break}})}toTextObject(){let e=this.toTextObjectWithoutValue();return this.ocsp.length&&p3(e,"OCSP",this.ocsp),this.caIssuers.length&&p3(e,"CA Issuers",this.caIssuers),this.timeStamping.length&&p3(e,"Time Stamping",this.timeStamping),this.caRepository.length&&p3(e,"CA Repository",this.caRepository),e}};I3.NAME="Authority Info Access";function p3(r,e,t){if(t.length===1)r[e]=t[0].toTextObject();else{let n=new Ge("");t.forEach((o,i)=>{let s=o.toTextObject(),a=`${s[Ge.NAME]} ${i+1}`,c=n[a];Array.isArray(c)||(c=[],n[a]=c),c.push(s)}),r[e]=n}}function m3(r,e,t,n){let o=e[n];o&&(Array.isArray(o)?o:[o]).forEach(s=>{typeof s=="string"&&(s=new yi("url",s)),r.push(new qi({accessMethod:t,accessLocation:ee.parse(s.rawData,Ee)}))})}var md=class r extends fa{constructor(...e){let t;if(Q.BufferSourceConverter.isBufferSource(e[0]))t=Q.BufferSourceConverter.toArrayBuffer(e[0]);else{let n=e[0],o=Array.isArray(e[1])?e[1].map(i=>Q.BufferSourceConverter.toArrayBuffer(i)):[];t=ee.serialize(new wr({type:n,values:o}))}super(t,wr)}onInit(e){this.type=e.type,this.values=e.values}toTextObject(){let e=this.toTextObjectWithoutValue();return e.Value=this.values.map(t=>new Ge("",{"":t})),e}toTextObjectWithoutValue(){let e=this.toTextObjectEmpty();return e[Ge.NAME]===r.NAME&&(e[Ge.NAME]=wi.toString(this.type)),e}};md.NAME="Attribute";var T3=class extends md{constructor(...e){var t;if(Q.BufferSourceConverter.isBufferSource(e[0]))super(e[0]);else{let n=new tp({printableString:e[0]});super(rw,[ee.serialize(n)])}(t=this.password)!==null&&t!==void 0||(this.password="")}onInit(e){if(super.onInit(e),this.values[0]){let t=ee.parse(this.values[0],tp);this.password=t.toString()}}toTextObject(){let e=this.toTextObjectWithoutValue();return e[Ge.VALUE]=this.password,e}};T3.NAME="Challenge Password";var up=class extends md{constructor(...e){var t;if(Q.BufferSourceConverter.isBufferSource(e[0]))super(e[0]);else{let n=e[0],o=new Fn;for(let i of n)o.push(ee.parse(i.rawData,xr));super(np,[ee.serialize(o)])}(t=this.items)!==null&&t!==void 0||(this.items=[])}onInit(e){if(super.onInit(e),this.values[0]){let t=ee.parse(this.values[0],Fn);this.items=t.map(n=>bn.create(ee.serialize(n)))}}toTextObject(){let e=this.toTextObjectWithoutValue(),t=this.items.map(n=>n.toTextObject());for(let n of t)e[n[Ge.NAME]]=n;return e}};up.NAME="Extensions";var gd=class{static register(e,t){this.items.set(e,t)}static create(e){let t=new md(e),n=this.items.get(t.type);return n?new n(e):t}};gd.items=new Map;var fp="crypto.signatureFormatter",mw=class{toAsnSignature(e,t){return Q.BufferSourceConverter.toArrayBuffer(t)}toWebSignature(e,t){return Q.BufferSourceConverter.toArrayBuffer(t)}},y3,gw=y3=class{static createPssParams(e,t){let n=y3.getHashAlgorithm(e);return n?new mi({hashAlgorithm:n,maskGenAlgorithm:new Y({algorithm:ia,parameters:ee.serialize(n)}),saltLength:t}):null}static getHashAlgorithm(e){let t=pt.resolve(il);return typeof e=="string"?t.toAsnAlgorithm({name:e}):typeof e=="object"&&e&&"name"in e?t.toAsnAlgorithm(e):null}toAsnAlgorithm(e){switch(e.name.toLowerCase()){case"rsassa-pkcs1-v1_5":if("hash"in e){let t;if(typeof e.hash=="string")t=e.hash;else if(e.hash&&typeof e.hash=="object"&&"name"in e.hash&&typeof e.hash.name=="string")t=e.hash.name.toUpperCase();else throw new Error("Cannot get hash algorithm name");switch(t.toLowerCase()){case"sha-1":return new Y({algorithm:rd,parameters:null});case"sha-256":return new Y({algorithm:Qg,parameters:null});case"sha-384":return new Y({algorithm:nd,parameters:null});case"sha-512":return new Y({algorithm:od,parameters:null})}}else return new Y({algorithm:pi,parameters:null});break;case"rsa-pss":if("hash"in e){if(!("saltLength"in e&&typeof e.saltLength=="number"))throw new Error("Cannot get 'saltLength' from 'alg' argument");let t=y3.createPssParams(e.hash,e.saltLength);if(!t)throw new Error("Cannot create PSS parameters");return new Y({algorithm:oa,parameters:ee.serialize(t)})}else return new Y({algorithm:oa,parameters:null})}return null}toWebAlgorithm(e){switch(e.algorithm){case pi:return{name:"RSASSA-PKCS1-v1_5"};case rd:return{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-1"}};case Qg:return{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}};case nd:return{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-384"}};case od:return{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-512"}};case oa:if(e.parameters){let t=ee.parse(e.parameters,mi);return{name:"RSA-PSS",hash:pt.resolve(il).toWebAlgorithm(t.hashAlgorithm),saltLength:t.saltLength}}else return{name:"RSA-PSS"}}return null}};gw=y3=f([aa()],gw);pt.registerSingleton(dp,gw);var yw=class{toAsnAlgorithm(e){switch(e.name.toLowerCase()){case"sha-1":return new Y({algorithm:Xc});case"sha-256":return new Y({algorithm:Yc});case"sha-384":return new Y({algorithm:Qc});case"sha-512":return new Y({algorithm:Zc})}return null}toWebAlgorithm(e){switch(e.algorithm){case Xc:return{name:"SHA-1"};case Yc:return{name:"SHA-256"};case Qc:return{name:"SHA-384"};case Zc:return{name:"SHA-512"}}return null}};yw=f([aa()],yw);pt.registerSingleton(dp,yw);var es=class r{addPadding(e,t){let n=Q.BufferSourceConverter.toUint8Array(t),o=new Uint8Array(e);return o.set(n,e-n.length),o}removePadding(e,t=!1){let n=Q.BufferSourceConverter.toUint8Array(e);for(let o=0;o<n.length;o++)if(n[o]){n=n.slice(o);break}if(t&&n[0]>127){let o=new Uint8Array(n.length+1);return o.set(n,1),o.buffer}return n.buffer}toAsnSignature(e,t){if(e.name==="ECDSA"){let n=e.namedCurve,o=r.namedCurveSize.get(n)||r.defaultNamedCurveSize,i=new zc,s=Q.BufferSourceConverter.toUint8Array(t);return i.r=this.removePadding(s.slice(0,o),!0),i.s=this.removePadding(s.slice(o,o+o),!0),ee.serialize(i)}return null}toWebSignature(e,t){if(e.name==="ECDSA"){let n=ee.parse(t,zc),o=e.namedCurve,i=r.namedCurveSize.get(o)||r.defaultNamedCurveSize,s=this.addPadding(i,this.removePadding(n.r)),a=this.addPadding(i,this.removePadding(n.s));return(0,Q.combine)(s,a)}return null}};es.namedCurveSize=new Map;es.defaultNamedCurveSize=32;var dw="1.3.101.110",RP="1.3.101.111",fw="1.3.101.112",NP="1.3.101.113",ww=class{toAsnAlgorithm(e){let t=null;switch(e.name.toLowerCase()){case"ed25519":t=fw;break;case"x25519":t=dw;break;case"eddsa":switch(e.namedCurve.toLowerCase()){case"ed25519":t=fw;break;case"ed448":t=NP;break}break;case"ecdh-es":switch(e.namedCurve.toLowerCase()){case"x25519":t=dw;break;case"x448":t=RP;break}}return t?new Y({algorithm:t}):null}toWebAlgorithm(e){switch(e.algorithm){case fw:return{name:"Ed25519"};case NP:return{name:"EdDSA",namedCurve:"Ed448"};case dw:return{name:"X25519"};case RP:return{name:"ECDH-ES",namedCurve:"X448"}}return null}};ww=f([aa()],ww);pt.registerSingleton(dp,ww);var bw=class extends ha{constructor(e){ha.isAsnEncoded(e)?super(e,da):super(e),this.tag=Qr.CertificateRequestTag}onInit(e){this.tbs=ee.serialize(e.certificationRequestInfo),this.publicKey=new Zi(e.certificationRequestInfo.subjectPKInfo);let t=pt.resolve(il);this.signatureAlgorithm=t.toWebAlgorithm(e.signatureAlgorithm),this.signature=e.signature,this.attributes=e.certificationRequestInfo.attributes.map(o=>gd.create(ee.serialize(o)));let n=this.getAttribute(np);this.extensions=[],n instanceof up&&(this.extensions=n.items),this.subjectName=new co(e.certificationRequestInfo.subject),this.subject=this.subjectName.toString()}getAttribute(e){for(let t of this.attributes)if(t.type===e)return t;return null}getAttributes(e){return this.attributes.filter(t=>t.type===e)}getExtension(e){for(let t of this.extensions)if(t.type===e)return t;return null}getExtensions(e){return this.extensions.filter(t=>t.type===e)}async verify(e=Ar.get()){let t={...this.publicKey.algorithm,...this.signatureAlgorithm},n=await this.publicKey.export(t,["verify"],e),o=pt.resolveAll(fp).reverse(),i=null;for(let a of o)if(i=a.toWebSignature(t,this.signature),i)break;if(!i)throw Error("Cannot convert WebCrypto signature value to ASN.1 format");return await e.subtle.verify(this.signatureAlgorithm,n,i,this.tbs)}toTextObject(){let e=this.toTextObjectEmpty(),t=ee.parse(this.rawData,da),n=t.certificationRequestInfo,o=new Ge("",{Version:`${di[n.version]} (${n.version})`,Subject:this.subject,"Subject Public Key Info":this.publicKey});if(this.attributes.length){let i=new Ge("");for(let s of this.attributes){let a=s.toTextObject();i[a[Ge.NAME]]=a}o.Attributes=i}return e.Data=o,e.Signature=new Ge("",{Algorithm:Ji.serializeAlgorithm(t.signatureAlgorithm),"":t.signature}),e}};bw.NAME="PKCS#10 Certificate Request";var yd=class extends ha{constructor(e){ha.isAsnEncoded(e)?super(e,no):super(e),this.tag=Qr.CertificateTag}onInit(e){let t=e.tbsCertificate;this.tbs=ee.serialize(t),this.serialNumber=Q.Convert.ToHex(t.serialNumber),this.subjectName=new co(t.subject),this.subject=new co(t.subject).toString(),this.issuerName=new co(t.issuer),this.issuer=this.issuerName.toString();let n=pt.resolve(il);this.signatureAlgorithm=n.toWebAlgorithm(e.signatureAlgorithm),this.signature=e.signatureValue;let o=t.validity.notBefore.utcTime||t.validity.notBefore.generalTime;if(!o)throw new Error("Cannot get 'notBefore' value");this.notBefore=o;let i=t.validity.notAfter.utcTime||t.validity.notAfter.generalTime;if(!i)throw new Error("Cannot get 'notAfter' value");this.notAfter=i,this.extensions=[],t.extensions&&(this.extensions=t.extensions.map(s=>bn.create(ee.serialize(s)))),this.publicKey=new Zi(t.subjectPublicKeyInfo)}getExtension(e){for(let t of this.extensions)if(typeof e=="string"){if(t.type===e)return t}else if(t instanceof e)return t;return null}getExtensions(e){return this.extensions.filter(t=>typeof e=="string"?t.type===e:t instanceof e)}async verify(e={},t=Ar.get()){let n,o,i=e.publicKey;try{if(!i)n={...this.publicKey.algorithm,...this.signatureAlgorithm},o=await this.publicKey.export(n,["verify"],t);else if("publicKey"in i)n={...i.publicKey.algorithm,...this.signatureAlgorithm},o=await i.publicKey.export(n,["verify"],t);else if(i instanceof Zi)n={...i.algorithm,...this.signatureAlgorithm},o=await i.export(n,["verify"],t);else if(Q.BufferSourceConverter.isBufferSource(i)){let l=new Zi(i);n={...l.algorithm,...this.signatureAlgorithm},o=await l.export(n,["verify"],t)}else n={...i.algorithm,...this.signatureAlgorithm},o=i}catch{return!1}let s=pt.resolveAll(fp).reverse(),a=null;for(let l of s)if(a=l.toWebSignature(n,this.signature),a)break;if(!a)throw Error("Cannot convert ASN.1 signature value to WebCrypto format");let c=await t.subtle.verify(this.signatureAlgorithm,o,a,this.tbs);if(e.signatureOnly)return c;{let u=(e.date||new Date).getTime();return c&&this.notBefore.getTime()<u&&u<this.notAfter.getTime()}}async getThumbprint(...e){let t,n="SHA-1";return e[0]&&(e[0].subtle?t=e[0]:(n=e[0]||n,t=e[1])),t??(t=Ar.get()),await t.subtle.digest(n,this.rawData)}async isSelfSigned(e=Ar.get()){return this.subject===this.issuer&&await this.verify({signatureOnly:!0},e)}toTextObject(){let e=this.toTextObjectEmpty(),t=ee.parse(this.rawData,no),n=t.tbsCertificate,o=new Ge("",{Version:`${di[n.version]} (${n.version})`,"Serial Number":n.serialNumber,"Signature Algorithm":Ji.serializeAlgorithm(n.signature),Issuer:this.issuer,Validity:new Ge("",{"Not Before":n.validity.notBefore.getTime(),"Not After":n.validity.notAfter.getTime()}),Subject:this.subject,"Subject Public Key Info":this.publicKey});if(n.issuerUniqueID&&(o["Issuer Unique ID"]=n.issuerUniqueID),n.subjectUniqueID&&(o["Subject Unique ID"]=n.subjectUniqueID),this.extensions.length){let i=new Ge("");for(let s of this.extensions){let a=s.toTextObject();i[a[Ge.NAME]]=a}o.Extensions=i}return e.Data=o,e.Signature=new Ge("",{Algorithm:Ji.serializeAlgorithm(t.signatureAlgorithm),"":t.signatureValue}),e}};yd.NAME="Certificate";var C3=class{static async createSelfSigned(e,t=Ar.get()){if(!e.keys.privateKey)throw new Error("Bad field 'keys' in 'params' argument. 'privateKey' is empty");if(!e.keys.publicKey)throw new Error("Bad field 'keys' in 'params' argument. 'publicKey' is empty");return this.create({serialNumber:e.serialNumber,subject:e.name,issuer:e.name,notBefore:e.notBefore,notAfter:e.notAfter,publicKey:e.keys.publicKey,signingKey:e.keys.privateKey,signingAlgorithm:e.signingAlgorithm,extensions:e.extensions},t)}static async create(e,t=Ar.get()){var n;let o;e.publicKey instanceof Zi?o=e.publicKey.rawData:"publicKey"in e.publicKey?o=e.publicKey.publicKey.rawData:Q.BufferSourceConverter.isBufferSource(e.publicKey)?o=e.publicKey:o=await t.subtle.exportKey("spki",e.publicKey);let i=e.serialNumber?Q.BufferSourceConverter.toUint8Array(Q.Convert.FromHex(e.serialNumber)):t.getRandomValues(new Uint8Array(16));i[0]>127&&(i[0]&=127),i.length>1&&i[0]===0&&(i[1]|=128);let s=e.notBefore||new Date,a=e.notAfter||new Date(s.getTime()+31536e6),c=new no({tbsCertificate:new vr({version:di.v3,serialNumber:i,validity:new Gi({notBefore:s,notAfter:a}),extensions:new Fn(((n=e.extensions)===null||n===void 0?void 0:n.map(y=>ee.parse(y.rawData,xr)))||[]),subjectPublicKeyInfo:ee.parse(o,br)})});if(e.subject){let y=e.subject instanceof co?e.subject:new co(e.subject);c.tbsCertificate.subject=ee.parse(y.toArrayBuffer(),lt)}if(e.issuer){let y=e.issuer instanceof co?e.issuer:new co(e.issuer);c.tbsCertificate.issuer=ee.parse(y.toArrayBuffer(),lt)}let l={hash:"SHA-256"},u="signingKey"in e?{...l,...e.signingAlgorithm,...e.signingKey.algorithm}:{...l,...e.signingAlgorithm},d=pt.resolve(il);c.tbsCertificate.signature=c.signatureAlgorithm=d.toAsnAlgorithm(u);let h=ee.serialize(c.tbsCertificate),m="signingKey"in e?await t.subtle.sign(u,e.signingKey,h):e.signature,g=pt.resolveAll(fp).reverse(),w=null;for(let y of g)if(w=y.toAsnSignature(u,m),w)break;if(!w)throw Error("Cannot convert ASN.1 signature value to WebCrypto format");return c.signatureValue=w,new yd(ee.serialize(c))}},DP;(function(r){r[r.unspecified=0]="unspecified",r[r.keyCompromise=1]="keyCompromise",r[r.cACompromise=2]="cACompromise",r[r.affiliationChanged=3]="affiliationChanged",r[r.superseded=4]="superseded",r[r.cessationOfOperation=5]="cessationOfOperation",r[r.certificateHold=6]="certificateHold",r[r.removeFromCRL=8]="removeFromCRL",r[r.privilegeWithdrawn=9]="privilegeWithdrawn",r[r.aACompromise=10]="aACompromise"})(DP||(DP={}));bn.register(Pg,pd);bn.register(Og,x3);bn.register(Lg,v3);bn.register(a9,E3);bn.register(kg,b3);bn.register(i9,S3);bn.register(Dg,_3);bn.register(Cg,I3);gd.register(rw,T3);gd.register(np,up);pt.registerSingleton(fp,mw);pt.registerSingleton(fp,es);es.namedCurveSize.set("P-256",32);es.namedCurveSize.set("K-256",32);es.namedCurveSize.set("P-384",48);es.namedCurveSize.set("P-521",66);var k3=class extends Le{async listen(){throw new xg("WebRTCTransport.createListener")}getAddrs(){return[]}updateAnnounceAddrs(){}async close(){}};var xw=Object.values(Aa).map(r=>r.decoder).reduce((r,e)=>r.or(e)),oH=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function UP(r){return r?.match(oH)?.groups?.fingerprint}function vw(r){let t=r.stringTuples().filter(n=>n[0]===UT).map(n=>n[1])[0];if(t===void 0||t==="")throw new D(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function iH(r){return vt.decode(xw.decode(r))}function sH(r){let e=iH(vw(r)),t=aH(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 bg(n,r.toString());return`${t} ${o.join(":").toUpperCase()}`}function FP(r){let e=r.split(":").map(o=>parseInt(o,16)),t=Uint8Array.from(e),n=Rr(yt.code,t);return oe(`/certhash/${va.encode(n.bytes)}`)}function aH(r){switch(r){case 17:return"sha-1";case 18:return"sha-256";case 19:return"sha-512";default:throw new vg(r)}}function $P(r,e){let{host:t,port:n,family:o}=r.toOptions(),i=sH(r);return{type:"answer",sdp:`v=0
|
|
20
26
|
o=- 0 0 IN IP${o} ${t}
|
|
21
27
|
s=-
|
|
22
28
|
t=0 0
|
|
@@ -30,10 +36,10 @@ a=ice-pwd:${e}
|
|
|
30
36
|
a=fingerprint:${i}
|
|
31
37
|
a=setup:passive
|
|
32
38
|
a=sctp-port:5000
|
|
33
|
-
a=max-message-size:${
|
|
39
|
+
a=max-message-size:${Ou}
|
|
34
40
|
a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
|
|
35
41
|
a=end-of-candidates
|
|
36
|
-
`}}function
|
|
42
|
+
`}}function KP(r,e){let{host:t,port:n,family:o}=r.toOptions();return{type:"offer",sdp:`v=0
|
|
37
43
|
o=- 0 0 IN IP${o} ${t}
|
|
38
44
|
s=-
|
|
39
45
|
c=IN IP${o} ${t}
|
|
@@ -46,33 +52,34 @@ a=ice-ufrag:${e}
|
|
|
46
52
|
a=ice-pwd:${e}
|
|
47
53
|
a=fingerprint:sha-256 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
|
|
48
54
|
a=sctp-port:5000
|
|
49
|
-
a=max-message-size:${
|
|
55
|
+
a=max-message-size:${Ou}
|
|
50
56
|
a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
|
|
51
57
|
a=end-of-candidates
|
|
52
|
-
`}}function
|
|
58
|
+
`}}function Ew(r,e){if(r.sdp===void 0)throw new D("Can't munge a missing SDP");let t=r.sdp.includes(`\r
|
|
53
59
|
`)?`\r
|
|
54
60
|
`:`
|
|
55
61
|
`;return r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
|
|
56
62
|
a=ice-ufrag:`+e+t).replace(/\na=ice-pwd:[^\n]*\n/,`
|
|
57
|
-
a=ice-pwd:`+e+t),r}var h4=N("libp2p-webrtc-noise:");function Ob(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=N(n,"hex"),i=Nt(Qe.code,o),s=u4.decode(d4(e)),a=h4.byteLength+i.bytes.byteLength+s.byteLength;return t==="server"?ke([h4,s,i.bytes],a):ke([h4,i.bytes,s],a)}var VP=tl?"iceconnectionstatechange":"connectionstatechange";async function Mb(r,e,t){let n=r.createDataChannel("",{negotiated:!0,id:0});if(t.role==="client"){t.log.trace("client creating local offer");let f=await r.createOffer();t.log.trace("client created local offer %s",f.sdp);let h=f4(f,e);t.log.trace("client setting local offer %s",h.sdp),await r.setLocalDescription(h);let p=Db(t.remoteAddr,e);t.log.trace("client setting server description %s",p.sdp),await r.setRemoteDescription(p)}else{let f=Lb(t.remoteAddr,e);t.log.trace("server setting client %s %s",f.type,f.sdp),await r.setRemoteDescription(f),t.log.trace("server creating local answer");let h=await r.createAnswer();t.log.trace("server created local answer");let p=f4(h,e);t.log.trace("server setting local description %s",h.sdp),await r.setLocalDescription(p)}if(t.log.trace("%s wait for handshake channel to open",t.role),await lt(n,"open",t.signal),t.log.trace("%s handshake channel opened",t.role),t.role==="server"){let f=r.remoteFingerprint()?.value??"";t.remoteAddr=t.remoteAddr.encapsulate(Rb(f))}let o=Pb(r.localDescription?.sdp);if(o==null)throw new Qo("Could not get fingerprint from local description sdp");t.log.trace("%s performing noise handshake",t.role);let i=Ob(o,t.remoteAddr,t.role),s=Yd({prologueBytes:i})(t),a=ma({channel:n,direction:"inbound",logger:t.logger,...t.dataChannel??{}}),c={...a,sink:a.sink.bind(a),source:async function*(){for await(let f of a.source)for(let h of f)yield h}()},l=new zi(t,{peerConnection:r,remoteAddr:t.remoteAddr,timeline:{open:Date.now()},metrics:t.events});r.addEventListener(VP,()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":l.close().catch(f=>{t.log.error("error closing connection",f),l.abort(f)});break;default:break}}),t.events?.increment({peer_connection:!0});let u=new Go(t,{peerConnection:r,metrics:t.events,dataChannelOptions:t.dataChannel});if(t.role==="client")return t.log.trace("%s secure inbound",t.role),await s.secureInbound(c,{remotePeer:t.remotePeerId,signal:t.signal}),t.log.trace("%s upgrade outbound",t.role),t.upgrader.upgradeOutbound(l,{skipProtection:!0,skipEncryption:!0,muxerFactory:u,signal:t.signal});t.log.trace("%s secure outbound",t.role);let d=await s.secureOutbound(c,{remotePeer:t.remotePeerId,signal:t.signal});l.remoteAddr=l.remoteAddr.encapsulate(`/p2p/${d.remotePeer}`),t.log.trace("%s upgrade inbound",t.role),await t.upgrader.upgradeInbound(l,{skipProtection:!0,skipEncryption:!0,muxerFactory:u,signal:t.signal})}async function Bb(r,e,t,n){n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let o=typeof t=="function"?await t():t;return new RTCPeerConnection({...o??{},certificates:[n]})}var Ah=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"})})}[so]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[Ae]=["@libp2p/transport"];async dial(e,t){let n=await this._connect(e,t);return this.log("dialing address: %a",e),n}createListener(e){return new Sh(this.components,{...this.init,...e})}listenFilter(e){return e.filter(yc.exactMatch)}dialFilter(e){return this.listenFilter(e)}async _connect(e,t){t.signal.throwIfAborted();let n,o=e.getPeerId();o!=null&&(n=Ve(o));let i=Ab(),s=await Bb("client",i,typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{});try{return await et(Mb(s,i,{role:"client",log:this.log,logger:this.components.logger,metrics:this.components.metrics,events:this.metrics?.dialerEvents,signal:t.signal,remoteAddr:e,dataChannel:this.init.dataChannel,upgrader:t.upgrader,peerId:this.components.peerId,remotePeerId:n,privateKey:this.components.privateKey}),t.signal)}catch(a){throw s.close(),a}}};function Ub(r){return e=>new Ah(e,r)}function Fb(r){return e=>new vh(e,r)}var Vb=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 $b=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await Vb(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 zb=Br(Hb(),1);function qb(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var Wb=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((i,s)=>{if(n){i();return}if(o!=null){s(o);return}let a=u=>{r.removeEventListener("open",c),r.removeEventListener("error",l),u()},c=()=>{a(i)},l=u=>{a(()=>{s(u.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let i=new zb.EventIterator(({push:s,stop:a,fail:c})=>{let l=d=>{let f=null;typeof d.data=="string"&&(f=N(d.data)),qb(d.data)&&(f=new Uint8Array(d.data)),d.data instanceof Uint8Array&&(f=d.data),f!=null&&s(f)},u=d=>{c(d.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",u),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",u),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let s of i)yield qb(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 Gb=(r,e)=>{e=e??{};let t=Wb(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:$b(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 Qb=WebSocket;var KP={"http:":"ws:","https:":"wss:"},Yb="ws:",Xb=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??Yb}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??Yb,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(KP))t.protocol===n&&(t.protocol=o);return t};function Zb(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=Xb(r,t),o=new Qb(n.toString(),e.websocket);return Gb(o,e)}function jb(r){return r.filter(e=>_i.exactMatch(e)||Wn.exactMatch(e))}function Jb(){throw new Error("WebSocket Servers can not be created in the browser!")}function ex(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 u=AbortSignal.timeout(500);a={...a,signal:u}}let l=()=>{let{host:u,port:d}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",u,d,Date.now()-c),this.abort(new Kt("Socket close timeout"))};a.signal?.addEventListener("abort",l);try{await r.close()}catch(u){n.error("error closing WebSocket gracefully",u),this.abort(u)}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 g4=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"})})}[so]=!0;[Symbol.toStringTag]="@libp2p/websockets";[Ae]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=ex(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=Zb(ud(e),this.init);i.socket.addEventListener("error",()=>{let s=new ji(`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 W("websockets:open-connection")),await et(Promise.race([i.connected(),o.promise]),t.signal)}catch(s){throw t.signal?.aborted&&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 Jb({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):jb(e)}dialFilter(e){return this.listenFilter(e)}};function tx(r={}){return e=>new g4(e,r)}var y4=Br(yd(),1);function rx(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===ir.ValidityType.EOL&&o.record.validityType===ir.ValidityType.EOL){let a=y4.default.fromString(n.record.validity).toDate(),c=y4.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 _h="2.8.1",Ch="js-libp2p";function kh(r,e){return`${r??Ch}/${e??_h} browser/${globalThis.navigator.userAgent}`}var ox="5.3.0-c0bf36e",ix="helia";var sx={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 Ph(r={}){let e=`${ix}/${ox} ${kh()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[k3(),Fb(),Ub(),tx()],connectionEncrypters:[Yd()],streamMuxers:[w9(),nb()],peerDiscovery:[N9(sx)],services:{autoNAT:S9(),dcutr:J9(),delegatedRouting:()=>S7("https://delegated-ipfs.dev",Rm()),dht:Vy({clientMode:!0,validators:{ipns:Ad},selectors:{ipns:rx}}),identify:sy(),identifyPush:ay(),keychain:ah(r.keychain),ping:ab()}}}async function w4(r,e={}){let t=e.selfKey??"self",n=ah(e)({datastore:r,logger:To()}),o;return await r.has(new Ne(`/pkcs8/${t}`))?o=await n.exportKey(t):(o=await ou(e.keyType??"Ed25519"),await n.importKey(t,o)),o}var qP=32,{code:zP}=oe("dnsaddr"),b4=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}},Wi=async function(e,t={}){let n=t.maxRecursiveDepth??qP;if(n===0)throw new b4("Max recursive depth reached");let[,o]=e.stringTuples().find(([l])=>l===zP)??[],s=await(t?.dns??bu()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[pr.TXT]}),a=e.getPeerId(),c=[];for(let l of s.Answer){let u=l.data.replace(/["']/g,"").trim().split("=")[1];if(u==null||a!=null&&!u.includes(a))continue;let d=$(u);if(u.startsWith("/dnsaddr")){let f=await d.resolve({...t,maxRecursiveDepth:n-1});c.push(...f.map(h=>h.toString()))}else c.push(d.toString())}return c};var WP={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Wi}},transportManager:{faultTolerance:Zo.FATAL_ALL}};async function ax(r){let e=aa(WP,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new P("Private network is enforced, but no protector was provided");return e}var oo;(function(r){let e;(function(o){let i;o.codec=()=>(i==null&&(i=ne((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:ae(0)},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.key=s.string();break}case 2:{l.value=s.bytes();break}default:{s.skipType(d&7);break}}}return l})),i),o.encode=s=>re(s,o.codec()),o.decode=(s,a)=>te(s,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let i;o.codec=()=>(i==null&&(i=ne((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),Dh.codec().encode(s.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:""},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.key=s.string();break}case 2:{l.value=Dh.codec().decode(s,s.uint32(),{limits:c.limits?.value});break}default:{s.skipType(d&7);break}}}return l})),i),o.encode=s=>re(s,o.codec()),o.decode=(s,a)=>te(s,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=ne((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.addresses!=null)for(let a of o.addresses)i.uint32(10),Rh.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);o.updated!=null&&(i.uint32(64),i.uint64Number(o.updated)),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(Rh.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 _a('Decode error - map field "metadata" had too many elements');let u=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(u.key,u.value);break}case 7:{if(s.limits?.tags!=null&&a.tags.size===s.limits.tags)throw new _a('Decode error - map field "tags" had too many elements');let u=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:s.limits?.tags$value}});a.tags.set(u.key,u.value);break}case 8:{a.updated=o.uint64Number();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,i)=>te(o,r.codec(),i)})(oo||(oo={}));var Rh;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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)),t.observed!=null&&(n.uint32(24),n.uint64Number(t.observed)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={multiaddr:ae(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}case 3:{i.observed=t.uint64Number();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Rh||(Rh={}));var Dh;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Dh||(Dh={}));function GP(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;if(r.type==="RSA"){let o=be.decode(`z${r}`);t=ve(o)}let n=rt(e.publicKey,t);return xn(n)}function Lh(r,e,t){let n=oo.decode(e);return Nh(r,n,t)}function Nh(r,e,t){let n=new Map,o=BigInt(Date.now());for(let[i,s]of e.tags.entries())s.expiry!=null&&s.expiry<o||n.set(i,s);return{...e,id:GP(r,e),addresses:e.addresses.filter(({observed:i})=>i!=null&&i>Date.now()-t).map(({multiaddr:i,isCertified:s})=>({multiaddr:$(i),isCertified:s??!1})),metadata:e.metadata,peerRecordEnvelope:e.peerRecordEnvelope??void 0,tags:n}}function cx(r,e){return QP(r.addresses,e.addresses)&&YP(r.protocols,e.protocols)&&XP(r.publicKey,e.publicKey)&&ZP(r.peerRecordEnvelope,e.peerRecordEnvelope)&&jP(r.metadata,e.metadata)&&JP(r.tags,e.tags)}function QP(r,e){return ux(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!j(t.multiaddr,n.multiaddr)))}function YP(r,e){return ux(r,e,(t,n)=>t===n)}function XP(r,e){return lx(r,e)}function ZP(r,e){return lx(r,e)}function jP(r,e){return dx(r,e,(t,n)=>j(t,n))}function JP(r,e){return dx(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function lx(r,e){return r==null&&e==null?!0:r!=null&&e!=null?j(r,e):!1}function ux(r,e,t){if(r.length!==e.length)return!1;for(let n=0;n<r.length;n++)if(!t(r[n],e[n]))return!1;return!0}function dx(r,e,t){if(r.size!==e.size)return!1;for(let[n,o]of r.entries()){let i=e.get(n);if(i==null||!t(o,i))return!1}return!0}var x4="/peers/";function nl(r){if(!dl(r)||r.type==null)throw new P("Invalid PeerId");let e=r.toCID().toString();return new Ne(`${x4}${e}`)}async function fx(r,e,t,n){let o=new Map;for(let i of t){if(i==null)continue;if(i.multiaddr instanceof Uint8Array&&(i.multiaddr=$(i.multiaddr)),!Lo(i.multiaddr))throw new P("Multiaddr was invalid");if(!await e(r,i.multiaddr))continue;let s=i.isCertified??!1,a=i.multiaddr.toString(),c=o.get(a);c!=null?i.isCertified=c.isCertified||s:o.set(a,{multiaddr:i.multiaddr,isCertified:s})}return[...o.values()].sort((i,s)=>i.multiaddr.toString().localeCompare(s.multiaddr.toString())).map(({isCertified:i,multiaddr:s})=>({isCertified:i,multiaddr:s.bytes}))}async function Mh(r,e,t,n){if(e==null)throw new P("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new P("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer?.peer;if(o!=null&&!r.equals(o.id))throw new P("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=Oh(f,{validate:hx})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Oh(f,{validate:px,map:mx})}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=Oh([...a.entries()],{validate:hx})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[p,g]of f)g==null?h.delete(p):h.set(p,g);c=Oh([...h.entries()],{validate:px,map:mx})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let u;o?.id.publicKey!=null?u=Ot(o.id.publicKey):e.publicKey!=null?u=Ot(e.publicKey):r.publicKey!=null&&(u=Ot(r.publicKey));let d={addresses:await fx(r,n.addressFilter??(async()=>!0),i,n.existingPeer?.peerPB.addresses),protocols:[...s.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:u,peerRecordEnvelope:l};return d.addresses.forEach(f=>{f.observed=n.existingPeer?.peerPB.addresses?.find(h=>j(h.multiaddr,h.multiaddr))?.observed??Date.now()}),r.type!=="RSA"&&delete d.publicKey,d}function Oh(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 hx(r,e){if(typeof r!="string")throw new P("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new P("Metadata value must be a Uint8Array")}function px(r,e){if(typeof r!="string")throw new P("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new P("Tag value must be an integer");if(e.value<0||e.value>100)throw new P("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new P("Tag ttl must be an integer");if(e.ttl<0)throw new P("Tag ttl must be between greater than 0")}}function mx(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 gx(r){let e=r.toString().split("/")[2],t=Q.parse(e,at);return Qr(t)}function E4(r,e,t){let n=gx(r);return Lh(n,e,t)}function eR(r,e){return{prefix:x4,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(E4(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(E4(n.key,n.value,e),E4(o.key,o.value,e)))}}var Bh=class{peerId;datastore;lock;addressFilter;log;maxAddressAge;maxPeerAge;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=Ei({name:"peer-store",singleProcess:!0}),this.maxAddressAge=t.maxAddressAge??36e5,this.maxPeerAge=t.maxPeerAge??216e5}async has(e){try{return await this.load(e),!0}catch(t){if(t.name!=="NotFoundError")throw t}return!1}async delete(e){this.peerId.equals(e)||await this.datastore.delete(nl(e))}async load(e){let t=nl(e),n=await this.datastore.get(t),o=oo.decode(n);if(this.#r(o))throw await this.datastore.delete(t),new Ce;return Nh(e,o,this.maxAddressAge)}async save(e,t){let n=await this.#e(e),o=await Mh(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,o,n)}async patch(e,t){let n=await this.#e(e),o=await Mh(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:n});return this.#t(e,o,n)}async merge(e,t){let n=await this.#e(e),o=await Mh(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:n});return this.#t(e,o,n)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(eR(e??{},this.maxAddressAge))){let o=gx(t);if(o.equals(this.peerId))continue;let i=oo.decode(n);if(this.#r(i)){await this.datastore.delete(t);continue}yield Nh(o,i,this.maxAddressAge)}}async#e(e){try{let t=nl(e),n=await this.datastore.get(t),o=oo.decode(n);if(this.#r(o))throw await this.datastore.delete(t),new Ce;return{peerPB:o,peer:Lh(e,n,this.maxAddressAge)}}catch(t){t.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",t)}}async#t(e,t,n){t.updated=Date.now();let o=oo.encode(t);return await this.datastore.put(nl(e),o),{peer:Lh(e,o,this.maxAddressAge),previous:n?.peer,updated:n==null||!cx(t,n.peerPB)}}#r(e){if(e.updated==null)return!0;let t=e.updated<Date.now()-this.maxPeerAge,n=Date.now()-this.maxAddressAge,o=e.addresses.filter(i=>i.observed!=null&&i.observed>n);return t&&o.length===0}};var v4=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 Bh(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 Ri(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 xr.openAndCertify(e,Yt.DOMAIN),o=Qr(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=Yt.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 xr.createFromProtobuf(s.peerRecordEnvelope),c=Yt.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 yx(r,e={}){return new v4(r,e)}function wx(r,e){let t,n=function(){let o=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(o,e)};return n.start=()=>{},n.stop=()=>{clearTimeout(t)},n}var bx=864e13;var tR=448,S4=449,rR=53,nR=54,oR=55,iR=56,Uh=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=new Map}has(e){let t=this.findHost(e);for(let n of this.mappings.values())if(n.domain===t)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=Qt(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?bx-Date.now():0,lastVerified:o?bx-Date.now():void 0})})}remove(e){let t=this.findHost(e),n=!1;for(let[o,i]of this.mappings.entries())i.domain===t&&(this.log("removing %s to %s DNS mapping %e",o,i.domain,new Error("where")),this.mappings.delete(o),n=n||i.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let i=e[n].multiaddr.stringTuples(),s=i[0][1];if(s!=null)for(let[a,c]of this.mappings.entries()){if(s!==a)continue;this.maybeAddSNITuple(i,c.domain)&&(e.splice(n,1),n--,t.push({multiaddr:$(`/${i.map(u=>[oe(u[0]).name,u[1]].join("/")).join("/")}`),verified:c.verified,type:"dns-mapping",expires:c.expires,lastVerified:c.lastVerified}))}}return t}maybeAddSNITuple(e,t){for(let n=0;n<e.length;n++)if(e[n][0]===tR&&e[n+1]?.[0]!==S4)return e.splice(n+1,0,[S4,t]),!0;return!1}confirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("marking %s to %s DNS mapping as verified",i,s.domain),o=s.verified,s.verified=!0,s.expires=Date.now()+t,s.lastVerified=Date.now());return o}unconfirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("removing verification of %s to %s DNS mapping",i,s.domain),o=o||s.verified,s.verified=!1,s.expires=Date.now()+t);return o}findHost(e){for(let t of e.stringTuples())if(t[0]===S4||t[0]===rR||t[0]===nR||t[0]===oR||t[0]===iR)return t[1]}};var A4=4,I4=41,T4=6,sR=273,Fh=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=new Map}has(e){let t=e.stringTuples();for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t[0][1])return!0;return!1}add(e,t,n,o=t,i="tcp"){let s=`${e}-${t}-${i}`,a=this.mappings.get(s)??[],c={internalIp:e,internalPort:t,externalIp:n,externalPort:o,externalFamily:tn(n)?4:6,protocol:i,verified:!1,expires:0};a.push(c),this.mappings.set(s,a)}remove(e){let t=e.stringTuples(),n=t[0][1]??"",o=t[1][0]===T4?"tcp":"udp",i=parseInt(t[1][1]??"0"),s=!1;for(let[a,c]of this.mappings.entries()){for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===n&&u.externalPort===i&&u.protocol===o&&(this.log("removing %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,n,i,o),s=s||u.verified,c.splice(l,1),l--)}c.length===0&&this.mappings.delete(a)}return s}getAll(e){let t=[];for(let{multiaddr:n}of e){let o=n.stringTuples(),i;if((o[0][0]===A4||o[0][0]===I4)&&o[1][0]===T4?i=`${o[0][1]}-${o[1][1]}-tcp`:(o[0][0]===A4||o[0][0]===I4)&&o[1][0]===sR&&(i=`${o[0][1]}-${o[1][1]}-udp`),i==null)continue;let s=this.mappings.get(i);if(s!=null)for(let a of s)o[0][0]=a.externalFamily===4?A4:I4,o[0][1]=a.externalIp,o[1][1]=`${a.externalPort}`,t.push({multiaddr:$(`/${o.map(c=>[oe(c[0]).name,c[1]].join("/")).join("/")}`),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}confirm(e,t){let o=e.stringTuples()[0][1],i=!1;for(let s of this.mappings.values())for(let a of s)a.externalIp===o&&(this.log("marking %s to %s IP mapping as verified",a.internalIp,a.externalIp),i=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return i}unconfirm(e,t){let n=e.stringTuples(),o=n[0][1]??"",i=n[1][0]===T4?"tcp":"udp",s=parseInt(n[1][1]??"0"),a=!1;for(let c of this.mappings.values())for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===o&&u.externalPort===s&&u.protocol===i&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,o,s,i),a=a||u.verified,u.verified=!1,u.expires=Date.now()+t)}return a}};function xx(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===4)return t.startsWith("169.254.");if(e===41)return t.toLowerCase().startsWith("fe80")}catch{}return!1}var aR={maxObservedAddresses:10},Vh=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??aR.maxObservedAddresses}has(e){return this.addresses.has(e.toString())}removePrefixed(e){for(let t of this.addresses.keys())t.toString().startsWith(e)&&this.addresses.delete(t)}add(e){this.addresses.size!==this.maxObservedAddresses&&(Lr(e)||xx(e)||(this.log("adding observed address %a",e),this.addresses.set(e.toString(),{verified:!1,expires:0})))}getAll(){return Array.from(this.addresses).map(([e,t])=>({multiaddr:$(e),verified:t.verified,type:"observed",expires:t.expires,lastVerified:t.lastVerified}))}remove(e){let t=this.addresses.get(e.toString())?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(e.toString()),t}confirm(e,t){let n=e.toString(),o=this.addresses.get(n)??{verified:!1,expires:Date.now()+t,lastVerified:Date.now()},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.log("marking observed address %a as verified",n),this.addresses.set(n,o),i}};var cR=[4,41,53,54,55,56];function _4(r){try{let[[e]]=r.stringTuples();return cR.includes(e)}catch{}return!1}var lR={maxObservedAddresses:10},$h=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??lR.maxObservedAddresses}get(e,t){if(Lr(e))return{multiaddr:e,verified:!0,type:"transport",expires:Date.now()+t,lastVerified:Date.now()};let n=this.toKey(e),o=this.addresses.get(n);return o==null&&(o={verified:!_4(e),expires:0},this.addresses.set(n,o)),{multiaddr:e,verified:o.verified,type:"transport",expires:o.expires,lastVerified:o.lastVerified}}has(e){let t=this.toKey(e);return this.addresses.has(t)}remove(e){let t=this.toKey(e),n=this.addresses.get(t)?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(t),n}confirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0,lastVerified:0},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.addresses.set(n,o),i}unconfirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0},i=o.verified;return o.verified=!1,o.expires=Date.now()+t,this.addresses.set(n,o),i}toKey(e){if(_4(e)){let t=e.toOptions();return`${t.host}-${t.port}-${t.transport}`}return e.toString()}};var Ex=6e4,vx={maxObservedAddresses:10,addressVerificationTTL:Ex*10,addressVerificationRetry:Ex*5},uR=r=>r;function C4(r,e){let t=r.getPeerId();return t!=null&&Ve(t).equals(e)&&(r=r.decapsulate($(`/p2p/${e.toString()}`))),r}var Kh=class{log;components;listen;announce;appendAnnounce;announceFilter;observed;dnsMappings;ipMappings;transportAddresses;observedAddressFilter;addressVerificationTTL;addressVerificationRetry;constructor(e,t={}){let{listen:n=[],announce:o=[],appendAnnounce:i=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(s=>s.toString()),this.announce=new Set(o.map(s=>s.toString())),this.appendAnnounce=new Set(i.map(s=>s.toString())),this.observed=new Vh(e,t),this.dnsMappings=new Uh(e,t),this.ipMappings=new Fh(e,t),this.transportAddresses=new $h(e,t),this.announceFilter=t.announceFilter??uR,this.observedAddressFilter=rr(1024),this.addressVerificationTTL=t.addressVerificationTTL??vx.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??vx.addressVerificationRetry,this._updatePeerStoreAddresses=wx(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.getAddresses().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=>$(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>$(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>$(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=e.stringTuples(),n=`${t[0][1]}:${t[1][1]}`;this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=C4(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=C4(e,this.components.peerId);let n=!0;(t?.type==="transport"||this.transportAddresses.has(e))&&!this.transportAddresses.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="dns-mapping"||this.dnsMappings.has(e))&&!this.dnsMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="ip-mapping"||this.ipMappings.has(e))&&!this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="observed"||this.observed.has(e))&&(this.maybeUpgradeToIPMapping(e)?(this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL),n=!1):!this.observed.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1)),n||this._updatePeerStoreAddresses()}removeObservedAddr(e,t){e=C4(e,this.components.peerId);let n=!1;this.observed.has(e)&&!this.observed.remove(e)&&n&&(n=!1),this.transportAddresses.has(e)&&!this.transportAddresses.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.dnsMappings.has(e)&&!this.dnsMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.ipMappings.has(e)&&!this.ipMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),n&&this._updatePeerStoreAddresses()}getAddresses(){let e=new Set,t=this.getAddressesWithMetadata().filter(n=>{if(!n.verified)return!1;let o=n.multiaddr.toString();return e.has(o)?!1:(e.add(o),!0)}).map(n=>n.multiaddr);return this.announceFilter(t.map(n=>{let o=$(n);return o.protos().pop()?.path===!0||o.getPeerId()===this.components.peerId.toString()?o:o.encapsulate(`/p2p/${this.components.peerId.toString()}`)}))}getAddressesWithMetadata(){let e=this.getAnnounceAddrs();if(e.length>0)return this.components.transportManager.getListeners().forEach(n=>{n.updateAnnounceAddrs(e)}),e.map(n=>({multiaddr:n,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}));let t=[];return t=t.concat(this.components.transportManager.getAddrs().map(n=>this.transportAddresses.get(n,this.addressVerificationTTL))),t=t.concat(this.getAppendAnnounceAddrs().map(n=>({multiaddr:n,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}))),t=t.concat(this.observed.getAll()),t=t.concat(this.ipMappings.getAll(t)),t=t.concat(this.dnsMappings.getAll(t)),t}addDNSMapping(e,t){this.dnsMappings.add(e,t)}removeDNSMapping(e){this.dnsMappings.remove($(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.add(e,t,n,o,i),this.observed.removePrefixed(`/ip${tn(n)?4:6}/${n}/${i}/${o}`)}removePublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.remove($(`/ip${tn(n)?4:6}/${n}/${i}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e))return!1;let t=e.toOptions();if(t.family===6||t.host==="127.0.0.1"||Qt(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[i=>Wn.exactMatch(i)||_i.exactMatch(i),i=>Ti.exactMatch(i),i=>H5.exactMatch(i)];for(let i of o){if(!i(e))continue;let s=n.filter(l=>l.getAddrs().filter(u=>u.toOptions().family===4&&i(u)).length>0);if(s.length!==1)continue;let a=s[0].getAddrs().filter(l=>l.toOptions().host!=="127.0.0.1").pop();if(a==null)continue;let c=a.toOptions();return this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.transport),!0}return!1}};var Sx;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(Sx||(Sx={}));var Hh=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},qh=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},ga=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},ol=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},zh=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},Wh=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},Gh=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},il=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},Qh=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},Yh=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},Xh=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},Zh=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},jh=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},Gi=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Qi=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Jh=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}};var k4=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=>wl(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")}},fR=["metrics","connectionProtector","dns"],hR=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function Ax(r={}){let e=new k4(r);return new Proxy(e,{get(n,o,i){if(typeof o=="string"&&!hR.includes(o)){let s=e.components[o];if(s==null&&!fR.includes(o))throw new Hh(`${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 Ix(r){let e={};for(let t of Object.values(r.components))for(let n of pR(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of mR(t))if(e[n]!==!0)throw new qh(`Service "${gR(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function pR(r){return Array.isArray(r?.[Ae])?r[Ae]:[]}function mR(r){return Array.isArray(r?.[dr])?r[dr]:[]}function gR(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}var yR=4,wR=41;function Tx(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{if(Wn.matches(e))return!1;let t=e.stringTuples();return t[0][0]===yR||t[0][0]===wR?!!Qt(`${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 e0(r){if(dl(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:Ve(t),r.forEach(n=>{if(!Lo(n))throw new ao("Invalid multiaddr");let o=n.getPeerId();if(o==null){if(e!=null)throw new P("Multiaddrs must all have the same peer id or have no peer id")}else{let i=Ve(o);if(e?.equals(i)!==!0)throw new P("Multiaddrs must all have the same peer id or have no peer id")}})}return{peerId:e,multiaddrs:r}}var bR=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function _x(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??bR;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}var Cx="last-dial-failure",kx="last-dial-success";var t0=100,r0=50;async function Px(r,e){let t=!1;for(let o of Us.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}function sl(r){try{let e;if(typeof r=="string"?e=$(r):e=r,!e.protoNames().includes("ipcidr")){let n=e.protoNames().includes("ip6")?"/ipcidr/128":"/ipcidr/32";e=e.encapsulate(n)}return vm(e)}catch{throw new Error(`Can't convert to IpNet, Invalid multiaddr format: ${r}`)}}var xR={maxConnections:t0,allow:[]},n0=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??xR.maxConnections,this.allow=(t.allow??[]).map(n=>sl(n)),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 ft;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((u,d)=>u+d.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=>l.contains(a.remoteAddr.nodeAddress().address))||s.push(a),s.length===i)break;await Promise.all(s.map(async a=>{await _x(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 o0=class extends Ht{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};function Rx(r){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(r)||/^::1$/.test(r)}function P4(r){if(!s1(r))return!1;let{address:e}=r.nodeAddress();return Rx(e)}function ER(r,e){let t=Ti.exactMatch(r.multiaddr),n=Ti.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=_i.exactMatch(r.multiaddr),i=_i.exactMatch(e.multiaddr);if(o&&!i)return-1;if(!o&&i)return 1;let s=Wn.exactMatch(r.multiaddr),a=Wn.exactMatch(e.multiaddr);if(s&&!a)return-1;if(!s&&a)return 1;let c=wc.exactMatch(r.multiaddr),l=wc.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let u=yc.exactMatch(r.multiaddr),d=yc.exactMatch(e.multiaddr);if(u&&!d)return-1;if(!u&&d)return 1;let f=dm.exactMatch(r.multiaddr),h=dm.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function vR(r,e){let t=P4(r.multiaddr),n=P4(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function SR(r,e){let t=Lr(r.multiaddr),n=Lr(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function AR(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function IR(r,e){let t=or.exactMatch(r.multiaddr),n=or.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Dx(r){return r.sort(ER).sort(AR).sort(IR).sort(SR).sort(vR)}var i0={maxParallelDials:r0,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,resolvers:{dnsaddr:Wi}},s0=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??i0.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??i0.maxDialQueueLength,this.dialTimeout=t.dialTimeout??i0.dialTimeout,this.connections=t.connections??new ft,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,this.shutDownController.signal;for(let[n,o]of Object.entries(t.resolvers??{}))Us.set(n,o);this.queue=new o0({concurrency:t.maxParallelDials??i0.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{n.detail.name!==Kt.name&&this.log.error("error in dial queue - %e",n.detail)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=e0(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 W("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 W("dial-queue:already-in-dial-queue")),s.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new Rn("Dial queue is full");return this.log("creating dial target for %p",n,o.map(a=>a.toString())),t.onProgress?.(new W("dial-queue:add-to-dial-queue")),this.queue.add(async a=>{a.onProgress?.(new W("dial-queue:start-dial"));let c=le([this.shutDownController.signal,a.signal]);try{return await this.dialPeer(a,c)}finally{c.clear()}},{peerId:n,priority:t.priority??N4,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal??AbortSignal.timeout(this.dialTimeout),onProgress:t.onProgress})}async dialPeer(e,t){let n=e.peerId,o=e.multiaddrs,i=new Set,s=e.multiaddrs.size===0,a=0,c=0,l=[];for(this.log("starting dial to %p",n);s||o.size>0;){c++,s=!1;let u=[],d=new Set(e.multiaddrs);o.clear(),this.log("calculating addrs to dial %p from %s",n,[...d]);let f=await this.calculateMultiaddrs(n,d,{...e,signal:t});for(let h of f){if(i.has(h.multiaddr.toString())){this.log.trace("skipping previously failed multiaddr %a while dialing %p",h.multiaddr,n);continue}u.push(h)}this.log("%s dial to %p with %s",c===1?"starting":"continuing",n,u.map(h=>h.multiaddr.toString())),e?.onProgress?.(new W("dial-queue:calculated-addresses",u));for(let h of u){if(a===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",a,e.peerId),new Rn("Peer had more than maxPeerAddrsToDial");a++;try{let p=await this.components.transportManager.dial(h.multiaddr,{...e,signal:t});this.log("dial to %a succeeded",h.multiaddr);try{await this.components.peerStore.merge(p.remotePeer,{multiaddrs:[p.remoteAddr],metadata:{[kx]:N(Date.now().toString())}})}catch(g){this.log.error("could not update last dial failure key for %p",n,g)}return p}catch(p){if(this.log.error("dial failed to %a",h.multiaddr,p),i.add(h.multiaddr.toString()),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[Cx]:N(Date.now().toString())}})}catch(g){this.log.error("could not update last dial failure key for %p",n,g)}if(t.aborted)throw new gn(p.message);l.push(p)}}}throw l.length===1?l[0]:new AggregateError(l,"All multiaddr dials failed")}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(d=>({multiaddr:$(d),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Rn("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new il("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let d=await this.components.peerStore.get(e);o.push(...d.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(d){if(d.name!=="NotFoundError")throw d}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let d=await this.components.peerRouting.findPeer(e,n);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:f})=>f.toString())),o.push(...d.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(d){d.name==="NoPeerRoutersError"?this.log("no peer routers configured",e):this.log.error("looking up multiaddrs for %p in the peer routing failed - %e",e,d)}}}let i=(await Promise.all(o.map(async d=>{let f=await Px(d.multiaddr,{dns:this.components.dns,...n,log:this.log});return f.length===1&&f[0].equals(d.multiaddr)?d:f.map(h=>({multiaddr:h,isCertified:!1}))}))).flat();if(e!=null){let d=`/p2p/${e.toString()}`;i=i.map(f=>f.multiaddr.protos().pop()?.path===!0?f:f.multiaddr.getPeerId()==null?{multiaddr:f.multiaddr.encapsulate(d),isCertified:f.isCertified}:f)}let s=i.filter(d=>{if(this.components.transportManager.dialTransportForMultiaddr(d.multiaddr)==null)return!1;let f=d.multiaddr.getPeerId();return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let d of s){let f=d.multiaddr.toString(),h=a.get(f);if(h!=null){h.isCertified=h.isCertified||d.isCertified||!1;continue}a.set(f,d)}let c=[...a.values()];if(c.length===0)throw new Xh("The dial request has no valid addresses");let l=[];for(let d of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(d.multiaddr)||l.push(d);let u=this.addressSorter==null?Dx(l):l.sort(this.addressSorter);if(u.length===0)throw new il("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:d})=>d.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",u.map(({multiaddr:d})=>d.toString())),u}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=>!or.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var Fx=Br(Bx(),1);var _R=Object.prototype.toString,CR=r=>_R.call(r)==="[object Error]",kR=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 O4(r){return r&&CR(r)&&r.name==="TypeError"&&typeof r.message=="string"?r.message==="Load failed"?r.stack===void 0:kR.has(r.message):!1}var M4=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}},Ux=(r,e,t)=>{let n=t.retries-(e-1);return r.attemptNumber=e,r.retriesLeft=n,r};async function B4(r,e){return new Promise((t,n)=>{e={...e},e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.retries??=10;let o=Fx.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 M4)throw c.originalError;if(c instanceof TypeError&&!O4(c))throw c;if(Ux(c,a,e),await e.shouldRetry(c)||(o.stop(),n(c)),await e.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){Ux(l,a,e),s(),n(l)}}})})}var a0=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 gt({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);Vx(t)&&(this.queue.has(e)||this.queue.add(async n=>{await B4(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=>Vx(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 Vx(r){for(let e of r.tags.keys())if(e.startsWith(io))return!0;return!1}var N4=50,U4={maxConnections:t0,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},c0=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??U4.maxConnections,this.maxConnections<1)throw new P("Connection Manager maxConnections must be greater than 0");this.connections=new ft,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=>sl(n)),this.deny=(t.deny??[]).map(n=>sl(n)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??U4.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new ha({points:t.inboundConnectionThreshold??U4.inboundConnectionThreshold,duration:1}),this.connectionPruner=new n0({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:t.allow?.map(n=>$(n))}),this.dialQueue=new s0(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??r0,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,resolvers:t.resolvers??{dnsaddr:Wi},connections:this.connections}),this.reconnectQueue=new a0({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 mt(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 kt(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")}getMaxConnections(){return this.maxConnections}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 Ur("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n}=e0(e);if(this.peerId.equals(n))throw new Ji("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 W("dial-queue:already-connected")),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??N4});if(o.status!=="open")throw new Zi("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 ao("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=>o.contains(e.remoteAddr.nodeAddress().address)))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>o.contains(e.remoteAddr.nodeAddress().address)))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=>$(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var DR=1e4,LR="1.0.0",NR="ping",OR="ipfs",$x=32,MR=!0,l0=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??OR}/${NR}/${LR}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??DR,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??MR,this.timeout=new un({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[Ae]=["@libp2p/connection-monitor"];start(){this.abortController=new AbortController,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=Ni(o);t=Date.now(),await Promise.all([i.write(zt($x),{signal:n}),i.read($x,{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 u0=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e,this.findProviders=e.metrics?.traceFunction("libp2p.contentRouting.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()}),getAttributesFromYieldedValue:(n,o)=>({...o,providers:[...Array.isArray(o.providers)?o.providers:[],n.id.toString()]})})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.contentRouting.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("libp2p.contentRouting.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.cancelReprovide,this.put=e.metrics?.traceFunction("libp2p.contentRouting.put",this.put.bind(this),{optionsIndex:2,getAttributesFromArgs:([n])=>({key:O(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:O(n,"base36")})})??this.get}[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 ga("No content routers available");let n=this,o=new Wt;for await(let i of qt(...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 ga("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 ga("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 Ur;await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new Ur;return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var d0=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??[],this.findPeer=e.metrics?.traceFunction("libp2p.peerRouting.findPeer",this.findPeer.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,peer:n.toString()})})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.peerRouting.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,key:O(n,"base36")}),getAttributesFromYieldedValue:(n,o)=>({...o,peers:[...Array.isArray(o.peers)?o.peers:[],n.id.toString()]})})??this.getClosestPeers}[Symbol.toStringTag]="@libp2p/peer-routing";async findPeer(e,t){if(this.routers.length===0)throw new ol("No peer routers available");if(e.toString()===this.peerId.toString())throw new zh("Should not try to find self");let n=this,o=qt(...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 Ce}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new ol("No peer routers available");let n=this,o=rr(1024);for await(let i of ln(async function*(){let s=qt(...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 f0=class extends me{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,this.shutdownController.signal}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,this.shutdownController.signal}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=le([this.shutdownController.signal,e?.signal]);try{for(;;)this.needNext?.resolve(),this.needNext=J(),yield(await lt(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,this.walkController.signal;let e=le([this.walkController.signal,this.shutdownController.signal]);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=zt(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 et(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("random walk errored",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("random walk errored",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var F4=32,V4=64,h0=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 Wh(`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)&&n?.force!==!0)throw new Gh(`Handler already registered for protocol ${e}`);let o=aa.bind({ignoreUndefined:!0})({maxInboundStreams:F4,maxOutboundStreams:V4},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 P("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 p0=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=Qu({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??Zo.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new P("Transport must have a valid tag");if(this.transports.has(t))throw new P(`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 Jh(`No transport available for address ${String(e)}`);return t?.onProgress?.(new W("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 Ur("Not started");if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t={errors:new Map,ipv4:{success:0,attempts:0},ipv6:{success:0,attempts:0}};e.forEach(i=>{t.errors.set(i.toString(),new Qh)});let n=[];for(let[i,s]of this.transports.entries()){let a=s.listenFilter(e);for(let c of a){this.log("creating listener for %s on %a",i,c);let l=s.createListener({upgrader:this.components.upgrader}),u=this.listeners.get(i)??[];u==null&&(u=[],this.listeners.set(i,u)),u.push(l),l.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:l})}),l.addEventListener("close",()=>{let d=u.findIndex(f=>f===l);u.splice(d,1),this.components.events.safeDispatchEvent("transport:close",{detail:l})}),am.matches(c)?t.ipv4.attempts++:cm.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),am.matches(c)&&t.ipv4.success++,cm.matches(c)&&t.ipv6.success++},d=>{throw this.log.error("transport %s could not listen on address %a - %e",i,c,d),t.errors.set(c.toString(),d),d}))}}let o=await Promise.allSettled(n);if(!(o.length>0&&o.every(i=>i.status==="fulfilled"))){if(this.ipv6Unsupported(t)){this.log("all IPv4 addresses succeed but all IPv6 failed");return}if(this.faultTolerance===Zo.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new Yh(`Some configured addresses failed to be listened on, you may need to remove one or more listen addresses from your configuration or set \`transportManager.faultTolerance\` to NO_FATAL:
|
|
63
|
+
a=ice-pwd:`+e+t),r}var Sw=V("libp2p-webrtc-noise:");function HP(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=V(n,"hex"),i=Rr(yt.code,o),s=xw.decode(vw(e)),a=Sw.byteLength+i.bytes.byteLength+s.byteLength;return t==="server"?st([Sw,s,i.bytes],a):st([Sw,i.bytes,s],a)}var cH=dh?"iceconnectionstatechange":"connectionstatechange";async function qP(r,e,t){let n=r.createDataChannel("",{negotiated:!0,id:0});try{if(t.role==="client"){t.log.trace("client creating local offer");let d=await r.createOffer();t.log.trace("client created local offer %s",d.sdp);let h=Ew(d,e);t.log.trace("client setting local offer %s",h.sdp),await r.setLocalDescription(h);let m=$P(t.remoteAddr,e);t.log.trace("client setting server description %s",m.sdp),await r.setRemoteDescription(m)}else{let d=KP(t.remoteAddr,e);t.log.trace("server setting client %s %s",d.type,d.sdp),await r.setRemoteDescription(d),t.log.trace("server creating local answer");let h=await r.createAnswer();t.log.trace("server created local answer");let m=Ew(h,e);t.log.trace("server setting local description %s",h.sdp),await r.setLocalDescription(m)}if(n.readyState!=="open"&&(t.log.trace("%s wait for handshake channel to open, starting status %s",t.role,n.readyState),await tr(n,"open",t.signal)),t.log.trace("%s handshake channel opened",t.role),t.role==="server"){let d=r.remoteFingerprint()?.value??"";t.remoteAddr=t.remoteAddr.encapsulate(FP(d))}let o=UP(r.localDescription?.sdp);if(o==null)throw new Ws("Could not get fingerprint from local description sdp");t.log.trace("%s performing noise handshake",t.role);let i=HP(o,t.remoteAddr,t.role),s=n0({prologueBytes:i})(t),a=Lu({channel:n,direction:"outbound",handshake:!0,logger:t.logger,...t.dataChannel??{}}),c=new Ic(t,{peerConnection:r,remoteAddr:t.remoteAddr,timeline:{open:Date.now()},metrics:t.events});r.addEventListener(cH,()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":c.close().catch(d=>{t.log.error("error closing connection",d),c.abort(d)});break;default:break}}),t.events?.increment({peer_connection:!0});let l=new js(t,{peerConnection:r,metrics:t.events,dataChannelOptions:t.dataChannel});if(t.role==="client")return t.log.trace("%s secure inbound",t.role),await s.secureInbound(a,{remotePeer:t.remotePeerId,signal:t.signal}),t.log.trace("%s upgrade outbound",t.role),await t.upgrader.upgradeOutbound(c,{skipProtection:!0,skipEncryption:!0,muxerFactory:l,signal:t.signal});t.log.trace("%s secure outbound",t.role);let u=await s.secureOutbound(a,{remotePeer:t.remotePeerId,signal:t.signal});c.remoteAddr=c.remoteAddr.encapsulate(`/p2p/${u.remotePeer}`),t.log.trace("%s upgrade inbound",t.role),await t.upgrader.upgradeInbound(c,{skipProtection:!0,skipEncryption:!0,muxerFactory:l,signal:t.signal})}catch(o){throw n.close(),o}}async function jP(r,e,t,n){n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let o=typeof t=="function"?await t():t;return new RTCPeerConnection({...o??{},certificates:[n]})}async function WP(r){let e=await y1(r),t=await crypto.subtle.exportKey("pkcs8",e.privateKey);return["-----BEGIN PRIVATE KEY-----",...M(new Uint8Array(t),"base64pad").split(/(.{64})/).filter(Boolean),"-----END PRIVATE KEY-----"].join(`
|
|
64
|
+
`)}var P3=class{log;metrics;components;init;certificate;privateKey;emitter;renewCertificateTask;constructor(e,t={}){if(this.log=e.logger.forComponent("libp2p:webrtc-direct"),this.components=e,this.init=t,this.emitter=new Le,t.certificateLifespan!=null&&t.certificateRenewalThreshold!=null&&t.certificateRenewalThreshold>=t.certificateLifespan)throw new D("Certificate renewal threshold must be less than certificate lifespan");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"})})}[ns]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[Xe]=["@libp2p/transport"];async start(){this.certificate=await this.getCertificate()}async stop(){this.renewCertificateTask!=null&&clearTimeout(this.renewCertificateTask),this.certificate=void 0}async dial(e,t){this.log("dial %a",e),t.signal.throwIfAborted();let n,o=e.getPeerId();o!=null&&(n=bt(o));let i=tC(),s=await jP("client",i,typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{});try{return await qP(s,i,{role:"client",log:this.log,logger:this.components.logger,metrics:this.components.metrics,events:this.metrics?.dialerEvents,signal:t.signal,remoteAddr:e,dataChannel:this.init.dataChannel,upgrader:t.upgrader,peerId:this.components.peerId,remotePeerId:n,privateKey:this.components.privateKey})}catch(a){throw s.close(),a}}createListener(e){if(this.certificate==null)throw new En;return new k3(this.components,{...this.init,...e,certificate:this.certificate,emitter:this.emitter})}listenFilter(e){return e.filter(Ef.exactMatch)}dialFilter(e){return this.listenFilter(e)}async getCertificate(e){if(lH(this.init.certificate))return this.log("using provided TLS certificate"),this.init.certificate;let t=await this.loadOrCreatePrivateKey(),{pem:n,certhash:o}=await this.loadOrCreateCertificate(t,e);return{privateKey:await WP(t),pem:n,certhash:o}}async loadOrCreatePrivateKey(){if(this.privateKey!=null)return this.privateKey;let e=this.init.certificateKeychainName??WT,t=this.getKeychain();try{if(t==null)throw this.log("no keychain configured - not checking for stored private key"),new ze;this.log.trace("checking for stored private key"),this.privateKey=await t.exportKey(e)}catch(n){if(n.name!=="NotFoundError")throw n;this.log.trace("generating private key"),this.privateKey=await $l("ECDSA","P-256"),t!=null?(this.log.trace("storing private key"),await t.importKey(e,this.privateKey)):this.log("no keychain configured - not storing private key")}return this.privateKey}async loadOrCreateCertificate(e,t){if(this.certificate!=null&&t!==!0)return this.certificate;let n,o=new ct(this.init.certificateDatastoreKey??jT),i=await y1(e);try{if(t===!0)throw this.log.trace("forcing renewal of TLS certificate"),new ze;this.log.trace("checking for stored TLS certificate"),n=await this.loadCertificate(o,i)}catch(a){if(a.name!=="NotFoundError")throw a;this.log.trace("generating new TLS certificate"),n=await this.createCertificate(o,i)}let s=n.notAfter.getTime()-(this.init.certificateRenewalThreshold??k7)-Date.now();return s<0&&(s=100),this.log("will renew TLS certificate after %d ms",s),this.renewCertificateTask=setTimeout(()=>{this.log("renewing TLS certificate"),this.getCertificate(!0).then(a=>{this.certificate=a,this.emitter.safeDispatchEvent("certificate:renew",{detail:a})}).catch(a=>{this.log.error("could not renew certificate - %e",a)})},s),{pem:n.toString("pem"),certhash:va.encode((await yt.digest(new Uint8Array(n.rawData))).bytes)}}async loadCertificate(e,t){let n=await this.components.datastore.get(e),o=new yd(n),i=o.notAfter.getTime()-(this.init.certificateRenewalThreshold??k7);if(Date.now()>i)throw this.log("stored TLS certificate has expired"),new ze;this.log("loaded certificate, expires in %d ms",i);let s=await o.publicKey.export(crypto),a=await crypto.subtle.exportKey("raw",s),c=await crypto.subtle.exportKey("raw",t.publicKey);if(!ge(new Uint8Array(a,0,a.byteLength),new Uint8Array(c,0,c.byteLength)))throw this.log("stored TLS certificate public key did not match public key from private key"),new ze;return this.log("loaded certificate, expiry time is %o",i),o}async createCertificate(e,t){let n=new Date,o=new Date(Date.now()+(this.init.certificateLifespan??GT));n.setMilliseconds(0),o.setMilliseconds(0);let i=await C3.createSelfSigned({serialNumber:(BigInt(Math.random().toString().replace(".",""))*100000n).toString(16),name:"CN=example.com, C=US, L=CA, O=example, ST=CA",notBefore:n,notAfter:o,keys:t,extensions:[new pd(!1,void 0,!0)]},crypto);return this.getKeychain()!=null?(this.log.trace("storing TLS certificate"),await this.components.datastore.put(e,V(i.toString("pem")))):this.log("no keychain is configured so not storing TLS certificate since the private key will not be reused"),i}getKeychain(){try{return this.components.keychain}catch{}}};function lH(r){return r==null?!1:typeof r.privateKey=="string"&&typeof r.pem=="string"&&typeof r.certhash=="string"}function GP(r){return e=>new P3(e,r)}function zP(r){return e=>new _g(e,r)}var XP=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 YP=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await XP(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 eR=Vt(ZP(),1);function JP(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var tR=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((i,s)=>{if(n){i();return}if(o!=null){s(o);return}let a=u=>{r.removeEventListener("open",c),r.removeEventListener("error",l),u()},c=()=>{a(i)},l=u=>{a(()=>{s(u.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let i=new eR.EventIterator(({push:s,stop:a,fail:c})=>{let l=d=>{let h=null;typeof d.data=="string"&&(h=V(d.data)),JP(d.data)&&(h=new Uint8Array(d.data)),d.data instanceof Uint8Array&&(h=d.data),h!=null&&s(h)},u=d=>{c(d.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",u),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",u),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let s of i)yield JP(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 rR=(r,e)=>{e=e??{};let t=tR(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:YP(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 nR=WebSocket;var dH={"http:":"ws:","https:":"wss:"},oR="ws:",iR=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??oR}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??oR,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(dH))t.protocol===n&&(t.protocol=o);return t};function sR(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=iR(r,t),o=new nR(n.toString(),e.websocket);return rR(o,e)}function aR(r){return r.filter(e=>Qa.exactMatch(e)||Oi.exactMatch(e))}function cR(){throw new Error("WebSocket Servers can not be created in the browser!")}function lR(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 u=AbortSignal.timeout(500);a={...a,signal:u}}let l=()=>{let{host:u,port:d}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",u,d,Date.now()-c),this.abort(new Fr("Socket close timeout"))};a.signal?.addEventListener("abort",l);try{await r.close()}catch(u){n.error("error closing WebSocket gracefully",u),this.abort(u)}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 Iw=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"})})}[ns]=!0;[Symbol.toStringTag]="@libp2p/websockets";[Xe]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=lR(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=de(),i=sR(Sm(e),this.init);i.socket.addEventListener("error",()=>{let s=new hl(`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 ae("websockets:open-connection")),await dt(Promise.race([i.connected(),o.promise]),t.signal)}catch(s){throw t.signal?.aborted&&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 cR({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):aR(e)}dialFilter(e){return this.listenFilter(e)}};function uR(r={}){return e=>new Iw(e,r)}var Tw=Vt(Pm(),1);function dR(r,e){let t=e.map((n,o)=>({record:ni(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===on.ValidityType.EOL&&o.record.validityType===on.ValidityType.EOL){let a=Tw.default.fromString(n.record.validity).toDate(),c=Tw.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 D3="2.8.4",O3="js-libp2p";function L3(r,e){return`${r??O3}/${e??D3} browser/${globalThis.navigator.userAgent}`}var hR="5.3.0-daaa511",pR="helia";var mR={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 B3(r={}){let e=`${pR}/${hR} ${L3()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[j8(),zP(),GP(),uR()],connectionEncrypters:[n0()],streamMuxers:[VA(),RT()],peerDiscovery:[i_(mR)],services:{autoNAT:zA(),dcutr:I_(),delegatedRouting:()=>zS("https://delegated-ipfs.dev",z5()),dht:yI({clientMode:!0,validators:{ipns:Mm},selectors:{ipns:dR}}),identify:O_(),identifyPush:L_(),keychain:sg(r.keychain),ping:LT()}}}async function Cw(r,e={}){let t=e.selfKey??"self",n=sg(e)({datastore:r,logger:Es()}),o;return await r.has(new ct(`/pkcs8/${t}`))?o=await n.exportKey(t):(o=await $l(e.keyType??"Ed25519"),await n.importKey(t,o)),o}var hH=32,{code:pH}=Ie("dnsaddr"),kw=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}},al=async function(e,t={}){let n=t.maxRecursiveDepth??hH;if(n===0)throw new kw("Max recursive depth reached");let[,o]=e.stringTuples().find(([l])=>l===pH)??[],s=await(t?.dns??N1()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[Tn.TXT]}),a=e.getPeerId(),c=[];for(let l of s.Answer){let u=l.data.replace(/["']/g,"").trim().split("=")[1];if(u==null||a!=null&&!u.includes(a))continue;let d=oe(u);if(u.startsWith("/dnsaddr")){let h=await d.resolve({...t,maxRecursiveDepth:n-1});c.push(...h.map(m=>m.toString()))}else c.push(d.toString())}return c};var mH={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:al}},transportManager:{faultTolerance:ga.FATAL_ALL}};async function gR(r){let e=_u(mH,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new D("Private network is enforced, but no protector was provided");return e}var ts;(function(r){let e;(function(o){let i;o.codec=()=>(i==null&&(i=_e((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:ke(0)},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.key=s.string();break}case 2:{l.value=s.bytes();break}default:{s.skipType(d&7);break}}}return l})),i),o.encode=s=>Ae(s,o.codec()),o.decode=(s,a)=>Se(s,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let i;o.codec=()=>(i==null&&(i=_e((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),U3.codec().encode(s.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:""},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.key=s.string();break}case 2:{l.value=U3.codec().decode(s,s.uint32(),{limits:c.limits?.value});break}default:{s.skipType(d&7);break}}}return l})),i),o.encode=s=>Ae(s,o.codec()),o.decode=(s,a)=>Se(s,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=_e((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.addresses!=null)for(let a of o.addresses)i.uint32(10),M3.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);o.updated!=null&&(i.uint32(64),i.uint64Number(o.updated)),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 at('Decode error - map field "addresses" had too many elements');a.addresses.push(M3.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 at('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 kd('Decode error - map field "metadata" had too many elements');let u=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(u.key,u.value);break}case 7:{if(s.limits?.tags!=null&&a.tags.size===s.limits.tags)throw new kd('Decode error - map field "tags" had too many elements');let u=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:s.limits?.tags$value}});a.tags.set(u.key,u.value);break}case 8:{a.updated=o.uint64Number();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(ts||(ts={}));var M3;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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)),t.observed!=null&&(n.uint32(24),n.uint64Number(t.observed)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={multiaddr:ke(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}case 3:{i.observed=t.uint64Number();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(M3||(M3={}));var U3;(function(r){let e;r.codec=()=>(e==null&&(e=_e((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=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(U3||(U3={}));function gH(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;if(r.type==="RSA"){let o=He.decode(`z${r}`);t=Ye(o)}let n=$t(e.publicKey,t);return ei(n)}function F3(r,e,t){let n=ts.decode(e);return $3(r,n,t)}function $3(r,e,t){let n=new Map,o=BigInt(Date.now());for(let[i,s]of e.tags.entries())s.expiry!=null&&s.expiry<o||n.set(i,s);return{...e,id:gH(r,e),addresses:e.addresses.filter(({observed:i})=>i!=null&&i>Date.now()-t).map(({multiaddr:i,isCertified:s})=>({multiaddr:oe(i),isCertified:s??!1})),metadata:e.metadata,peerRecordEnvelope:e.peerRecordEnvelope??void 0,tags:n}}function yR(r,e){return yH(r.addresses,e.addresses)&&wH(r.protocols,e.protocols)&&bH(r.publicKey,e.publicKey)&&xH(r.peerRecordEnvelope,e.peerRecordEnvelope)&&vH(r.metadata,e.metadata)&&EH(r.tags,e.tags)}function yH(r,e){return bR(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!ge(t.multiaddr,n.multiaddr)))}function wH(r,e){return bR(r,e,(t,n)=>t===n)}function bH(r,e){return wR(r,e)}function xH(r,e){return wR(r,e)}function vH(r,e){return xR(r,e,(t,n)=>ge(t,n))}function EH(r,e){return xR(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function wR(r,e){return r==null&&e==null?!0:r!=null&&e!=null?ge(r,e):!1}function bR(r,e,t){if(r.length!==e.length)return!1;for(let n=0;n<r.length;n++)if(!t(r[n],e[n]))return!1;return!0}function xR(r,e,t){if(r.size!==e.size)return!1;for(let[n,o]of r.entries()){let i=e.get(n);if(i==null||!t(o,i))return!1}return!0}var Pw="/peers/";function pp(r){if(!Tp(r)||r.type==null)throw new D("Invalid PeerId");let e=r.toCID().toString();return new ct(`${Pw}${e}`)}async function vR(r,e,t,n){let o=new Map;for(let i of t){if(i==null)continue;if(i.multiaddr instanceof Uint8Array&&(i.multiaddr=oe(i.multiaddr)),!ks(i.multiaddr))throw new D("Multiaddr was invalid");if(!await e(r,i.multiaddr))continue;let s=i.isCertified??!1,a=i.multiaddr.toString(),c=o.get(a);c!=null?i.isCertified=c.isCertified||s:o.set(a,{multiaddr:i.multiaddr,isCertified:s})}return[...o.values()].sort((i,s)=>i.multiaddr.toString().localeCompare(s.multiaddr.toString())).map(({isCertified:i,multiaddr:s})=>({isCertified:i,multiaddr:s.bytes}))}async function V3(r,e,t,n){if(e==null)throw new D("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new D("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer?.peer;if(o!=null&&!r.equals(o.id))throw new D("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(h=>({isCertified:!1,multiaddr:h}))),e.addresses!=null&&i.push(...e.addresses)),e.protocols!=null&&(s=new Set(e.protocols)),e.metadata!=null){let h=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=K3(h,{validate:ER})}if(e.tags!=null){let h=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=K3(h,{validate:SR,map:AR})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&i.push(...e.multiaddrs.map(h=>({isCertified:!1,multiaddr:h}))),e.addresses!=null&&i.push(...e.addresses),e.protocols!=null&&(s=new Set([...s,...e.protocols])),e.metadata!=null){let h=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[m,g]of h)g==null?a.delete(m):a.set(m,g);a=K3([...a.entries()],{validate:ER})}if(e.tags!=null){let h=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),m=new Map(c);for(let[g,w]of h)w==null?m.delete(g):m.set(g,w);c=K3([...m.entries()],{validate:SR,map:AR})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let u;o?.id.publicKey!=null?u=nr(o.id.publicKey):e.publicKey!=null?u=nr(e.publicKey):r.publicKey!=null&&(u=nr(r.publicKey));let d={addresses:await vR(r,n.addressFilter??(async()=>!0),i,n.existingPeer?.peerPB.addresses),protocols:[...s.values()].sort((h,m)=>h.localeCompare(m)),metadata:a,tags:c,publicKey:u,peerRecordEnvelope:l};return d.addresses.forEach(h=>{h.observed=n.existingPeer?.peerPB.addresses?.find(m=>ge(m.multiaddr,m.multiaddr))?.observed??Date.now()}),r.type!=="RSA"&&delete d.publicKey,d}function K3(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 ER(r,e){if(typeof r!="string")throw new D("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new D("Metadata value must be a Uint8Array")}function SR(r,e){if(typeof r!="string")throw new D("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new D("Tag value must be an integer");if(e.value<0||e.value>100)throw new D("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new D("Tag ttl must be an integer");if(e.ttl<0)throw new D("Tag ttl must be between greater than 0")}}function AR(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 _R(r){let e=r.toString().split("/")[2],t=le.parse(e,Xt);return Eo(t)}function Rw(r,e,t){let n=_R(r);return F3(n,e,t)}function SH(r,e){return{prefix:Pw,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(Rw(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(Rw(n.key,n.value,e),Rw(o.key,o.value,e)))}}var H3=class{peerId;datastore;lock;addressFilter;log;maxAddressAge;maxPeerAge;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=ja({name:"peer-store",singleProcess:!0}),this.maxAddressAge=t.maxAddressAge??36e5,this.maxPeerAge=t.maxPeerAge??216e5}async has(e){try{return await this.load(e),!0}catch(t){if(t.name!=="NotFoundError")throw t}return!1}async delete(e){this.peerId.equals(e)||await this.datastore.delete(pp(e))}async load(e){let t=pp(e),n=await this.datastore.get(t),o=ts.decode(n);if(this.#r(e,o))throw await this.datastore.delete(t),new ze;return $3(e,o,this.peerId.equals(e)?1/0:this.maxAddressAge)}async save(e,t){let n=await this.#e(e),o=await V3(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,o,n)}async patch(e,t){let n=await this.#e(e),o=await V3(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:n});return this.#t(e,o,n)}async merge(e,t){let n=await this.#e(e),o=await V3(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:n});return this.#t(e,o,n)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(SH(e??{},this.maxAddressAge))){let o=_R(t);if(o.equals(this.peerId))continue;let i=ts.decode(n);if(this.#r(o,i)){await this.datastore.delete(t);continue}yield $3(o,i,this.peerId.equals(o)?1/0:this.maxAddressAge)}}async#e(e){try{let t=pp(e),n=await this.datastore.get(t),o=ts.decode(n);if(this.#r(e,o))throw await this.datastore.delete(t),new ze;return{peerPB:o,peer:F3(e,n,this.maxAddressAge)}}catch(t){t.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",t)}}async#t(e,t,n){t.updated=Date.now();let o=ts.encode(t);return await this.datastore.put(pp(e),o),{peer:F3(e,o,this.maxAddressAge),previous:n?.peer,updated:n==null||!yR(t,n.peerPB)}}#r(e,t){if(t.updated==null)return!0;if(this.peerId.equals(e))return!1;let n=t.updated<Date.now()-this.maxPeerAge,o=Date.now()-this.maxAddressAge,i=t.addresses.filter(s=>s.observed!=null&&s.observed>o);return n&&i.length===0}};var Nw=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 H3(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 tc(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 Dn.openAndCertify(e,zr.DOMAIN),o=Eo(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=zr.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 Dn.createFromProtobuf(s.peerRecordEnvelope),c=zr.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 IR(r,e={}){return new Nw(r,e)}function TR(r,e){let t,n=function(){let o=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(o,e)};return n.start=()=>{},n.stop=()=>{clearTimeout(t)},n}var CR=864e13;var AH=448,Dw=449,_H=53,IH=54,TH=55,CH=56,q3=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=new Map}has(e){let t=this.findHost(e);for(let n of this.mappings.values())if(n.domain===t)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=Gr(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?CR-Date.now():0,lastVerified:o?CR-Date.now():void 0})})}remove(e){let t=this.findHost(e),n=!1;for(let[o,i]of this.mappings.entries())i.domain===t&&(this.log("removing %s to %s DNS mapping %e",o,i.domain,new Error("where")),this.mappings.delete(o),n=n||i.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let i=e[n].multiaddr.stringTuples(),s=i[0][1];if(s!=null)for(let[a,c]of this.mappings.entries()){if(s!==a)continue;this.maybeAddSNITuple(i,c.domain)&&(e.splice(n,1),n--,t.push({multiaddr:oe(`/${i.map(u=>[Ie(u[0]).name,u[1]].join("/")).join("/")}`),verified:c.verified,type:"dns-mapping",expires:c.expires,lastVerified:c.lastVerified}))}}return t}maybeAddSNITuple(e,t){for(let n=0;n<e.length;n++)if(e[n][0]===AH&&e[n+1]?.[0]!==Dw)return e.splice(n+1,0,[Dw,t]),!0;return!1}confirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("marking %s to %s DNS mapping as verified",i,s.domain),o=s.verified,s.verified=!0,s.expires=Date.now()+t,s.lastVerified=Date.now());return o}unconfirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("removing verification of %s to %s DNS mapping",i,s.domain),o=o||s.verified,s.verified=!1,s.expires=Date.now()+t);return o}findHost(e){for(let t of e.stringTuples())if(t[0]===Dw||t[0]===_H||t[0]===IH||t[0]===TH||t[0]===CH)return t[1]}};var Ow=4,Lw=41,Bw=6,kH=273,j3=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=new Map}has(e){let t=e.stringTuples();for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t[0][1])return!0;return!1}add(e,t,n,o=t,i="tcp"){let s=`${e}-${t}-${i}`,a=this.mappings.get(s)??[],c={internalIp:e,internalPort:t,externalIp:n,externalPort:o,externalFamily:ko(n)?4:6,protocol:i,verified:!1,expires:0};a.push(c),this.mappings.set(s,a)}remove(e){let t=e.stringTuples(),n=t[0][1]??"",o=t[1][0]===Bw?"tcp":"udp",i=parseInt(t[1][1]??"0"),s=!1;for(let[a,c]of this.mappings.entries()){for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===n&&u.externalPort===i&&u.protocol===o&&(this.log("removing %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,n,i,o),s=s||u.verified,c.splice(l,1),l--)}c.length===0&&this.mappings.delete(a)}return s}getAll(e){let t=[];for(let{multiaddr:n}of e){let o=n.stringTuples(),i;if((o[0][0]===Ow||o[0][0]===Lw)&&o[1][0]===Bw?i=`${o[0][1]}-${o[1][1]}-tcp`:(o[0][0]===Ow||o[0][0]===Lw)&&o[1][0]===kH&&(i=`${o[0][1]}-${o[1][1]}-udp`),i==null)continue;let s=this.mappings.get(i);if(s!=null)for(let a of s)o[0][0]=a.externalFamily===4?Ow:Lw,o[0][1]=a.externalIp,o[1][1]=`${a.externalPort}`,t.push({multiaddr:oe(`/${o.map(c=>[Ie(c[0]).name,c[1]].join("/")).join("/")}`),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}confirm(e,t){let o=e.stringTuples()[0][1],i=!1;for(let s of this.mappings.values())for(let a of s)a.externalIp===o&&(this.log("marking %s to %s IP mapping as verified",a.internalIp,a.externalIp),i=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return i}unconfirm(e,t){let n=e.stringTuples(),o=n[0][1]??"",i=n[1][0]===Bw?"tcp":"udp",s=parseInt(n[1][1]??"0"),a=!1;for(let c of this.mappings.values())for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===o&&u.externalPort===s&&u.protocol===i&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,o,s,i),a=a||u.verified,u.verified=!1,u.expires=Date.now()+t)}return a}};function kR(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===4)return t.startsWith("169.254.");if(e===41)return t.toLowerCase().startsWith("fe80")}catch{}return!1}var PH={maxObservedAddresses:10},W3=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??PH.maxObservedAddresses}has(e){return this.addresses.has(e.toString())}removePrefixed(e){for(let t of this.addresses.keys())t.toString().startsWith(e)&&this.addresses.delete(t)}add(e){this.addresses.size!==this.maxObservedAddresses&&(Yn(e)||kR(e)||(this.log("adding observed address %a",e),this.addresses.set(e.toString(),{verified:!1,expires:0})))}getAll(){return Array.from(this.addresses).map(([e,t])=>({multiaddr:oe(e),verified:t.verified,type:"observed",expires:t.expires,lastVerified:t.lastVerified}))}remove(e){let t=this.addresses.get(e.toString())?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(e.toString()),t}confirm(e,t){let n=e.toString(),o=this.addresses.get(n)??{verified:!1,expires:Date.now()+t,lastVerified:Date.now()},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.log("marking observed address %a as verified",n),this.addresses.set(n,o),i}};var RH=[4,41,53,54,55,56];function Mw(r){try{let[[e]]=r.stringTuples();return RH.includes(e)}catch{}return!1}var NH={maxObservedAddresses:10},G3=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??NH.maxObservedAddresses}get(e,t){if(Yn(e))return{multiaddr:e,verified:!0,type:"transport",expires:Date.now()+t,lastVerified:Date.now()};let n=this.toKey(e),o=this.addresses.get(n);return o==null&&(o={verified:!Mw(e),expires:0},this.addresses.set(n,o)),{multiaddr:e,verified:o.verified,type:"transport",expires:o.expires,lastVerified:o.lastVerified}}has(e){let t=this.toKey(e);return this.addresses.has(t)}remove(e){let t=this.toKey(e),n=this.addresses.get(t)?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(t),n}confirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0,lastVerified:0},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.addresses.set(n,o),i}unconfirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0},i=o.verified;return o.verified=!1,o.expires=Date.now()+t,this.addresses.set(n,o),i}toKey(e){if(Mw(e)){let t=e.toOptions();return`${t.host}-${t.port}-${t.transport}`}return e.toString()}};var PR=6e4,RR={maxObservedAddresses:10,addressVerificationTTL:PR*10,addressVerificationRetry:PR*5},DH=r=>r;function Uw(r,e){let t=r.getPeerId();return t!=null&&bt(t).equals(e)&&(r=r.decapsulate(oe(`/p2p/${e.toString()}`))),r}var z3=class{log;components;listen;announce;appendAnnounce;announceFilter;observed;dnsMappings;ipMappings;transportAddresses;observedAddressFilter;addressVerificationTTL;addressVerificationRetry;constructor(e,t={}){let{listen:n=[],announce:o=[],appendAnnounce:i=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(s=>s.toString()),this.announce=new Set(o.map(s=>s.toString())),this.appendAnnounce=new Set(i.map(s=>s.toString())),this.observed=new W3(e,t),this.dnsMappings=new q3(e,t),this.ipMappings=new j3(e,t),this.transportAddresses=new G3(e,t),this.announceFilter=t.announceFilter??DH,this.observedAddressFilter=tn(1024),this.addressVerificationTTL=t.addressVerificationTTL??RR.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??RR.addressVerificationRetry,this._updatePeerStoreAddresses=TR(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.getAddresses().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=>oe(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>oe(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>oe(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=e.stringTuples(),n=`${t[0][1]}:${t[1][1]}`;this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=Uw(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=Uw(e,this.components.peerId);let n=!0;(t?.type==="transport"||this.transportAddresses.has(e))&&!this.transportAddresses.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="dns-mapping"||this.dnsMappings.has(e))&&!this.dnsMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="ip-mapping"||this.ipMappings.has(e))&&!this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="observed"||this.observed.has(e))&&(this.maybeUpgradeToIPMapping(e)?(this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL),n=!1):!this.observed.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1)),n||this._updatePeerStoreAddresses()}removeObservedAddr(e,t){e=Uw(e,this.components.peerId);let n=!1;this.observed.has(e)&&!this.observed.remove(e)&&n&&(n=!1),this.transportAddresses.has(e)&&!this.transportAddresses.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.dnsMappings.has(e)&&!this.dnsMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.ipMappings.has(e)&&!this.ipMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),n&&this._updatePeerStoreAddresses()}getAddresses(){let e=new Set,t=this.getAddressesWithMetadata().filter(n=>{if(!n.verified)return!1;let o=n.multiaddr.toString();return e.has(o)?!1:(e.add(o),!0)}).map(n=>n.multiaddr);return this.announceFilter(t.map(n=>{let o=oe(n);return o.protos().pop()?.path===!0||o.getPeerId()===this.components.peerId.toString()?o:o.encapsulate(`/p2p/${this.components.peerId.toString()}`)}))}getAddressesWithMetadata(){let e=this.getAnnounceAddrs();if(e.length>0)return this.components.transportManager.getListeners().forEach(n=>{n.updateAnnounceAddrs(e)}),e.map(n=>({multiaddr:n,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}));let t=[];return t=t.concat(this.components.transportManager.getAddrs().map(n=>this.transportAddresses.get(n,this.addressVerificationTTL))),t=t.concat(this.getAppendAnnounceAddrs().map(n=>({multiaddr:n,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}))),t=t.concat(this.observed.getAll()),t=t.concat(this.ipMappings.getAll(t)),t=t.concat(this.dnsMappings.getAll(t)),t}addDNSMapping(e,t){this.dnsMappings.add(e,t)}removeDNSMapping(e){this.dnsMappings.remove(oe(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.add(e,t,n,o,i),this.observed.removePrefixed(`/ip${ko(n)?4:6}/${n}/${i}/${o}`)}removePublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.remove(oe(`/ip${ko(n)?4:6}/${n}/${i}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e))return!1;let t=e.toOptions();if(t.family===6||t.host==="127.0.0.1"||Gr(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[i=>Oi.exactMatch(i)||Qa.exactMatch(i),i=>Ya.exactMatch(i),i=>pS.exactMatch(i)];for(let i of o){if(!i(e))continue;let s=n.filter(l=>l.getAddrs().filter(u=>u.toOptions().family===4&&i(u)).length>0);if(s.length!==1)continue;let a=s[0].getAddrs().filter(l=>l.toOptions().host!=="127.0.0.1").pop();if(a==null)continue;let c=a.toOptions();return this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.transport),!0}return!1}};var NR;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(NR||(NR={}));var X3=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},Y3=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},wd=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},mp=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},Q3=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},Z3=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},J3=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},gp=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},ey=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},ty=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},ry=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},ny=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},oy=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},cl=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},ll=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},iy=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}};var Fw=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=Es())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>Lp(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")}},LH=["metrics","connectionProtector","dns"],BH=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function DR(r={}){let e=new Fw(r);return new Proxy(e,{get(n,o,i){if(typeof o=="string"&&!BH.includes(o)){let s=e.components[o];if(s==null&&!LH.includes(o))throw new X3(`${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 OR(r){let e={};for(let t of Object.values(r.components))for(let n of MH(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of UH(t))if(e[n]!==!0)throw new Y3(`Service "${FH(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function MH(r){return Array.isArray(r?.[Xe])?r[Xe]:[]}function UH(r){return Array.isArray(r?.[Sn])?r[Sn]:[]}function FH(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}var $H=4,KH=41;function LR(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{if(Oi.matches(e))return!1;let t=e.stringTuples();return t[0][0]===$H||t[0][0]===KH?!!Gr(`${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 sy(r){if(Tp(r))return{peerId:r,multiaddrs:[]};let e=Array.isArray(r)?r:[r],t;if(e.length>0){let n=e[0].getPeerId();t=n==null?void 0:bt(n),e.forEach(o=>{if(!ks(o))throw new os("Invalid multiaddr");let i=o.getPeerId();if(i==null){if(t!=null)throw new D("Multiaddrs must all have the same peer id or have no peer id")}else{let s=bt(i);if(t?.equals(s)!==!0)throw new D("Multiaddrs must all have the same peer id or have no peer id")}})}return e=e.filter(n=>!lS.exactMatch(n)),{peerId:t,multiaddrs:e}}var VH=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function BR(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??VH;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}var MR="last-dial-failure",UR="last-dial-success";var ay=100,cy=50;async function FR(r,e){let t=!1;for(let o of tu.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}function yp(r){try{let e;if(typeof r=="string"?e=oe(r):e=r,!e.protoNames().includes("ipcidr")){let n=e.protoNames().includes("ip6")?"/ipcidr/128":"/ipcidr/32";e=e.encapsulate(n)}return F5(e)}catch{throw new Error(`Can't convert to IpNet, Invalid multiaddr format: ${r}`)}}var HH={maxConnections:ay,allow:[]},ly=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??HH.maxConnections,this.allow=(t.allow??[]).map(n=>yp(n)),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 ir;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((u,d)=>u+d.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=>l.contains(a.remoteAddr.nodeAddress().address))||s.push(a),s.length===i)break;await Promise.all(s.map(async a=>{await BR(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 uy=class extends $r{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};function $R(r){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(r)||/^::1$/.test(r)}function $w(r){if(!p0(r))return!1;let{address:e}=r.nodeAddress();return $R(e)}function qH(r,e){let t=Ya.exactMatch(r.multiaddr),n=Ya.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=Qa.exactMatch(r.multiaddr),i=Qa.exactMatch(e.multiaddr);if(o&&!i)return-1;if(!o&&i)return 1;let s=Oi.exactMatch(r.multiaddr),a=Oi.exactMatch(e.multiaddr);if(s&&!a)return-1;if(!s&&a)return 1;let c=Sf.exactMatch(r.multiaddr),l=Sf.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let u=Ef.exactMatch(r.multiaddr),d=Ef.exactMatch(e.multiaddr);if(u&&!d)return-1;if(!u&&d)return 1;let h=C5.exactMatch(r.multiaddr),m=C5.exactMatch(e.multiaddr);return h&&!m?-1:!h&&m?1:0}function jH(r,e){let t=$w(r.multiaddr),n=$w(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function WH(r,e){let t=Yn(r.multiaddr),n=Yn(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function GH(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function zH(r,e){let t=nn.exactMatch(r.multiaddr),n=nn.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function KR(r){return r.sort(qH).sort(GH).sort(zH).sort(WH).sort(jH)}var dy={maxParallelDials:cy,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,resolvers:{dnsaddr:al}},fy=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??dy.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??dy.maxDialQueueLength,this.dialTimeout=t.dialTimeout??dy.dialTimeout,this.connections=t.connections??new ir,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,this.shutDownController.signal;for(let[n,o]of Object.entries(t.resolvers??{}))tu.set(n,o);this.queue=new uy({concurrency:t.maxParallelDials??dy.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{n.detail?.name!==Fr.name&&this.log.error("error in dial queue - %e",n.detail)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=sy(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 ae("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 ae("dial-queue:already-in-dial-queue")),s.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new Ei("Dial queue is full");return this.log("creating dial target for %p",n,o.map(a=>a.toString())),t.onProgress?.(new ae("dial-queue:add-to-dial-queue")),this.queue.add(async a=>{a.onProgress?.(new ae("dial-queue:start-dial"));let c=Ne([this.shutDownController.signal,a.signal]);try{return await this.dialPeer(a,c)}finally{c.clear()}},{peerId:n,priority:t.priority??qw,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal??AbortSignal.timeout(this.dialTimeout),onProgress:t.onProgress})}async dialPeer(e,t){let n=e.peerId,o=e.multiaddrs,i=new Set,s=e.multiaddrs.size===0,a=0,c=0,l=[];for(this.log("starting dial to %p",n);s||o.size>0;){c++,s=!1;let u=[],d=new Set(e.multiaddrs);o.clear(),this.log("calculating addrs to dial %p from %s",n,[...d]);let h=await this.calculateMultiaddrs(n,d,{...e,signal:t});for(let m of h){if(i.has(m.multiaddr.toString())){this.log.trace("skipping previously failed multiaddr %a while dialing %p",m.multiaddr,n);continue}u.push(m)}this.log("%s dial to %p with %s",c===1?"starting":"continuing",n,u.map(m=>m.multiaddr.toString())),e?.onProgress?.(new ae("dial-queue:calculated-addresses",u));for(let m of u){if(a===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",a,e.peerId),new Ei("Peer had more than maxPeerAddrsToDial");a++;try{let g=await this.components.transportManager.dial(m.multiaddr,{...e,signal:t});this.log("dial to %a succeeded",m.multiaddr);try{await this.components.peerStore.merge(g.remotePeer,{multiaddrs:[g.remoteAddr],metadata:{[UR]:V(Date.now().toString())}})}catch(w){this.log.error("could not update last dial failure key for %p",n,w)}return g}catch(g){if(this.log.error("dial failed to %a",m.multiaddr,g),i.add(m.multiaddr.toString()),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[MR]:V(Date.now().toString())}})}catch(w){this.log.error("could not update last dial failure key for %p",n,w)}if(t.aborted)throw new zo(g.message);l.push(g)}}}throw l.length===1?l[0]:new AggregateError(l,"All multiaddr dials failed")}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(d=>({multiaddr:oe(d),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Ei("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new gp("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let d=await this.components.peerStore.get(e);o.push(...d.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:h})=>h.toString()))}catch(d){if(d.name!=="NotFoundError")throw d}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let d=await this.components.peerRouting.findPeer(e,n);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:h})=>h.toString())),o.push(...d.multiaddrs.map(h=>({multiaddr:h,isCertified:!1})))}catch(d){d.name==="NoPeerRoutersError"?this.log("no peer routers configured",e):this.log.error("looking up multiaddrs for %p in the peer routing failed - %e",e,d)}}}let i=(await Promise.all(o.map(async d=>{let h=await FR(d.multiaddr,{dns:this.components.dns,...n,log:this.log});return h.length===1&&h[0].equals(d.multiaddr)?d:h.map(m=>({multiaddr:m,isCertified:!1}))}))).flat();if(e!=null){let d=`/p2p/${e.toString()}`;i=i.map(h=>h.multiaddr.protos().pop()?.path===!0?h:h.multiaddr.getPeerId()==null?{multiaddr:h.multiaddr.encapsulate(d),isCertified:h.isCertified}:h)}let s=i.filter(d=>{if(this.components.transportManager.dialTransportForMultiaddr(d.multiaddr)==null)return!1;let h=d.multiaddr.getPeerId();return e!=null&&h!=null?e.equals(h):!0}),a=new Map;for(let d of s){let h=d.multiaddr.toString(),m=a.get(h);if(m!=null){m.isCertified=m.isCertified||d.isCertified||!1;continue}a.set(h,d)}let c=[...a.values()];if(c.length===0)throw new ry("The dial request has no valid addresses");let l=[];for(let d of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(d.multiaddr)||l.push(d);let u=this.addressSorter==null?KR(l):l.sort(this.addressSorter);if(u.length===0)throw new gp("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:d})=>d.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",u.map(({multiaddr:d})=>d.toString())),u}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=>!nn.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var zR=Vt(WR(),1);var YH=Object.prototype.toString,QH=r=>YH.call(r)==="[object Error]",ZH=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 jw(r){return r&&QH(r)&&r.name==="TypeError"&&typeof r.message=="string"?r.message==="Load failed"?r.stack===void 0:ZH.has(r.message):!1}var Ww=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}},GR=(r,e,t)=>{let n=t.retries-(e-1);return r.attemptNumber=e,r.retriesLeft=n,r};async function Gw(r,e){return new Promise((t,n)=>{e={...e},e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.retries??=10;let o=zR.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 Ww)throw c.originalError;if(c instanceof TypeError&&!jw(c))throw c;if(GR(c,a,e),await e.shouldRetry(c)||(o.stop(),n(c)),await e.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){GR(l,a,e),s(),n(l)}}})})}var hy=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 lr({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);XR(t)&&(this.queue.has(e)||this.queue.add(async n=>{await Gw(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(rs)&&(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=>XR(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 XR(r){for(let e of r.tags.keys())if(e.startsWith(rs))return!0;return!1}var qw=50,zw={maxConnections:ay,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},py=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??zw.maxConnections,this.maxConnections<1)throw new D("Connection Manager maxConnections must be greater than 0");this.connections=new ir,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=>yp(n)),this.deny=(t.deny??[]).map(n=>yp(n)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??zw.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new Du({points:t.inboundConnectionThreshold??zw.inboundConnectionThreshold,duration:1}),this.connectionPruner=new ly({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:t.allow?.map(n=>oe(n))}),this.dialQueue=new fy(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??cy,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,resolvers:t.resolvers??{dnsaddr:al},connections:this.connections}),this.reconnectQueue=new hy({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 cr(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 Tr(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")}getMaxConnections(){return this.maxConnections}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 En("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n}=sy(e);if(this.peerId.equals(n))throw new pl("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 ae("dial-queue:already-connected")),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??qw});if(o.status!=="open")throw new fl("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 os("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=>o.contains(e.remoteAddr.nodeAddress().address)))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>o.contains(e.remoteAddr.nodeAddress().address)))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=>oe(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var tq=1e4,rq="1.0.0",nq="ping",oq="ipfs",YR=32,iq=!0,my=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??oq}/${nq}/${rq}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??tq,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??iq,this.timeout=new Mo({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[Xe]=["@libp2p/connection-monitor"];start(){this.abortController=new AbortController,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=Qt(o);t=Date.now(),await Promise.all([i.write(qr(YR),{signal:n}),i.read({bytes:YR,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 gy=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e,this.findProviders=e.metrics?.traceFunction("libp2p.contentRouting.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()}),getAttributesFromYieldedValue:(n,o)=>({...o,providers:[...Array.isArray(o.providers)?o.providers:[],n.id.toString()]})})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.contentRouting.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("libp2p.contentRouting.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.cancelReprovide,this.put=e.metrics?.traceFunction("libp2p.contentRouting.put",this.put.bind(this),{optionsIndex:2,getAttributesFromArgs:([n])=>({key:M(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:M(n,"base36")})})??this.get}[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 wd("No content routers available");let n=this,o=new jr;for await(let i of Kr(...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 wd("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 wd("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 En;await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new En;return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var yy=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??[],this.findPeer=e.metrics?.traceFunction("libp2p.peerRouting.findPeer",this.findPeer.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,peer:n.toString()})})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.peerRouting.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,key:M(n,"base36")}),getAttributesFromYieldedValue:(n,o)=>({...o,peers:[...Array.isArray(o.peers)?o.peers:[],n.id.toString()]})})??this.getClosestPeers}[Symbol.toStringTag]="@libp2p/peer-routing";async findPeer(e,t){if(this.routers.length===0)throw new mp("No peer routers available");if(e.toString()===this.peerId.toString())throw new Q3("Should not try to find self");let n=this,o=Kr(...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 ze}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new mp("No peer routers available");let n=this,o=tn(1024);for await(let i of Bo(async function*(){let s=Kr(...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 wy=class extends Le{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,this.shutdownController.signal}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,this.shutdownController.signal}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=Ne([this.shutdownController.signal,e?.signal]);try{for(;;)this.needNext?.resolve(),this.needNext=de(),yield(await tr(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,this.walkController.signal;let e=Ne([this.walkController.signal,this.shutdownController.signal]);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=qr(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 dt(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("random walk errored",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("random walk errored",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var Xw=32,Yw=64,by=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 Z3(`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)&&n?.force!==!0)throw new J3(`Handler already registered for protocol ${e}`);let o=_u.bind({ignoreUndefined:!0})({maxInboundStreams:Xw,maxOutboundStreams:Yw},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 D("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 xy=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=am({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??ga.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new D("Transport must have a valid tag");if(this.transports.has(t))throw new D(`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 iy(`No transport available for address ${String(e)}`);return t?.onProgress?.(new ae("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 En("Not started");if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t={errors:new Map,ipv4:{success:0,attempts:0},ipv6:{success:0,attempts:0}};e.forEach(i=>{t.errors.set(i.toString(),new ey)});let n=[];for(let[i,s]of this.transports.entries()){let a=s.listenFilter(e);for(let c of a){this.log("creating listener for %s on %a",i,c);let l=s.createListener({upgrader:this.components.upgrader}),u=this.listeners.get(i)??[];u==null&&(u=[],this.listeners.set(i,u)),u.push(l),l.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:l})}),l.addEventListener("close",()=>{let d=u.findIndex(h=>h===l);u.splice(d,1),this.components.events.safeDispatchEvent("transport:close",{detail:l})}),A5.matches(c)?t.ipv4.attempts++:_5.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),A5.matches(c)&&t.ipv4.success++,_5.matches(c)&&t.ipv6.success++},d=>{throw this.log.error("transport %s could not listen on address %a - %e",i,c,d),t.errors.set(c.toString(),d),d}))}}let o=await Promise.allSettled(n);if(!(o.length>0&&o.every(i=>i.status==="fulfilled"))){if(this.ipv6Unsupported(t)){this.log("all IPv4 addresses succeed but all IPv6 failed");return}if(this.faultTolerance===ga.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new ty(`Some configured addresses failed to be listened on, you may need to remove one or more listen addresses from your configuration or set \`transportManager.faultTolerance\` to NO_FATAL:
|
|
58
65
|
${[...t.errors.entries()].map(([i,s])=>`
|
|
59
66
|
${i}: ${`${s.stack??s}`.split(`
|
|
60
67
|
`).join(`
|
|
61
68
|
`)}
|
|
62
|
-
`).join("")}`)}}ipv6Unsupported(e){if(e.ipv4.attempts===0||e.ipv6.attempts===0)return!1;let t=e.ipv4.attempts===e.ipv4.success,n=e.ipv6.success===0;return t&&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
|
|
63
|
-
`);async function
|
|
64
|
-
`),s=
|
|
65
|
-
`);await
|
|
66
|
-
`),t),t.log.trace("select: reading protocol response");let l=await
|
|
67
|
-
`;yield new
|
|
68
|
-
`),
|
|
69
|
-
`),
|
|
70
|
-
`)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',
|
|
71
|
-
`),t),t.log.trace('handle: responded with "%s" for "%s"',
|
|
72
|
-
`),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let i=new
|
|
73
|
-
`))),
|
|
74
|
-
`));t.log.trace('handle: respond with "%s" for %s',e,o),await
|
|
75
|
-
`),t),t.log('handle: responded with "na" for "%s"',o)}}var $R=500,K4=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";[Z4]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new hl("the connection is being closed");if(this.status==="closed")throw new Zi("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new es("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($R);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 qx(r){return new K4(r)}function HR(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return F4}function qR(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??V4}function zx(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var m0=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;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??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,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 Zh(`The multiaddr connection is blocked by gater.${e}`)}createInboundAbortSignal(e){let t=le([AbortSignal.timeout(this.inboundUpgradeTimeout),e]);return t}async upgradeInbound(e,t){let n=!1,o=this.createInboundAbortSignal(t.signal);try{if(this.metrics.dials?.increment({inbound:!0}),n=await this.components.connectionManager.acceptIncomingConnection(e),!n)throw new jh("Connection denied");await this.shouldBlockConnection("denyInboundConnection",e),await this._performUpgrade(e,"inbound",{...t,signal:o})}catch(i){throw this.metrics.errors?.increment({inbound:!0}),i}finally{o.clear(),n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getPeerId(),o;n!=null&&(o=Ve(n),await this.shouldBlockConnection("denyOutboundConnection",o,e));let i="outbound";return t.initiator===!1&&(i="inbound"),await this._performUpgrade(e,i,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),n}}async _performUpgrade(e,t,n){let o,i,s,a,c;this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t);let l=e;if(n?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(e.log("protecting the %s connection",t),l=await u.protect(e,n))}try{if(o=l,n?.skipEncryption!==!0){n?.onProgress?.(new W(`upgrader:encrypt-${t}-connection`)),{conn:o,remotePeer:i,protocol:c,streamMuxer:a}=await(t==="inbound"?this._encryptInbound(l,n):this._encryptOutbound(l,n));let u={...l,...o};await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",i,u)}else{let u=e.remoteAddr.getPeerId();if(u==null)throw new ao(`${t} connection that skipped encryption must have a peer id`);let d=Ve(u);c="native",i=d}if(i.equals(this.components.peerId)){let u=new Ji("Can not dial self");throw e.abort(u),u}if(s=o,n?.muxerFactory!=null)a=n.muxerFactory;else if(a==null&&this.streamMuxers.size>0){n?.onProgress?.(new W(`upgrader:multiplex-${t}-connection`));let u=await(t==="inbound"?this._multiplexInbound({...l,...o},this.streamMuxers,n):this._multiplexOutbound({...l,...o},this.streamMuxers,n));a=u.muxerFactory,s=u.stream}}catch(u){throw e.log.error("failed to upgrade inbound connection %s %a - %e",t==="inbound"?"from":"to",e.remoteAddr,u),u}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,u,d;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:p=>{d!=null&&Promise.resolve().then(async()=>{let g=this.components.registrar.getProtocols(),m=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);let{stream:y,protocol:x}=await cl(p,g,{signal:m,log:p.log,yieldBytes:!1});if(d==null)return;d.log("incoming stream opened on %s",x);let w=HR(x,this.components.registrar);if(zx(x,"inbound",d)===w){let M=new yl(`Too many inbound protocol streams for protocol "${x}" - limit ${w}`);throw p.abort(M),M}p.source=y.source,p.sink=y.sink,p.protocol=x,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:[x]}),this.components.metrics?.trackProtocolStream(p,d),this._onStream({connection:d,stream:p,protocol:x})}).catch(async g=>{d.log.error("error handling incoming stream id %s - %e",p.id,g),p.timeline.close==null&&await p.close()})}}),u=async(p,g={})=>{if(l==null)throw new Gi("Connection is not multiplexed");d.log.trace("starting new stream for protocols %s",p);let m=await l.newStream();d.log.trace("started new stream %s for protocols %s",m.id,p);try{if(g.signal==null){m.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",p);let M=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);g={...g,signal:M}}m.log.trace("selecting protocol from protocols %s",p);let{stream:y,protocol:x}=await al(m,p,{...g,log:m.log,yieldBytes:!0});m.log.trace("selected protocol %s",x);let w=qR(x,this.components.registrar,g),I=zx(x,"outbound",d);if(I>=w){let M=new lo(`Too many outbound protocol streams for protocol "${x}" - ${I}/${w}`);throw m.abort(M),M}return await this.components.peerStore.merge(s,{protocols:[x]}),m.source=y.source,m.sink=y.sink,m.protocol=x,y.closeWrite!=null&&(m.closeWrite=y.closeWrite),y.closeRead!=null&&(m.closeRead=y.closeRead),y.close!=null&&(m.close=y.close),this.components.metrics?.trackProtocolStream(m,d),m}catch(y){throw d.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),m.timeline.close==null&&m.abort(y),y}},Promise.all([l.sink(i.source),i.sink(l.source)]).catch(p=>{d.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{d.status==="open"&&await d.close()}catch(g){d.log.error("error closing connection after timeline close %e",g)}finally{this.events.safeDispatchEvent("connection:close",{detail:d})}})().catch(g=>{d.log.error("error thrown while dispatching connection:close event %e",g)}),Reflect.set(...p))}),o.timeline.upgraded=Date.now();let h=()=>{throw new Gi("Connection is not multiplexed")};return d=qx({remoteAddr:o.remoteAddr,remotePeer:s,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,limits:c,logger:this.components.logger,newStream:u??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:d}),d.__maConnTimeline=f,d}_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 es("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 cl(e,n,{...t,log:e.log}),s=this.connectionEncrypters.get(i);if(s==null)throw new Qi(`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 Qi(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 al(e,n,{...t,log:e.log,yieldBytes:!0}),s=this.connectionEncrypters.get(i);if(s==null)throw new Qi(`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 Qi(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 al(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 Gi(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 cl(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 Gi(String(i))}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};var g0=class extends me{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new me,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let u=n(l),d=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return u||d},this.peerId=e.peerId,this.logger=e.logger??To(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??Ch,i=e.nodeInfo?.version??_h,s=this.components=Ax({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:i,userAgent:e.nodeInfo?.userAgent??kh(o,i)},logger:this.logger,events:t,datastore:e.datastore??new Di,connectionGater:Tx(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",yx(s,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),s.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let u={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(d=>d.multiaddr)};s.events.safeDispatchEvent("peer:discovery",{detail:u})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(s)),this.components.upgrader=new m0(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,u)=>this.configureComponent(`connection-encryption-${u}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,u)=>this.configureComponent(`stream-muxers-${u}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,inboundStreamProtocolNegotiationTimeout:e.connectionManager?.inboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout}),this.configureComponent("transportManager",new p0(this.components,e.transportManager)),this.configureComponent("connectionManager",new c0(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new l0(this.components,e.connectionMonitor)),this.configureComponent("registrar",new h0(this.components)),this.configureComponent("addressManager",new Kh(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,u)=>this.configureComponent(`peer-router-${u}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new d0(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,u)=>this.configureComponent(`content-router-${u}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new u0(this.components,{routers:c})),this.configureComponent("randomWalk",new f0(this.components)),(e.peerDiscovery??[]).forEach((l,u)=>{this.configureComponent(`peer-discovery-${u}`,l(this.components)).addEventListener("peer",f=>{this.#e(f)})}),e.transports?.forEach((l,u)=>{this.components.transportManager.add(this.configureComponent(`transport-${u}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let u=e.services[l],d=u(this.components);if(d==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=d,this.configureComponent(l,d),d[hn]!=null&&(this.log("registering service %s for content routing",l),c.push(d[hn])),d[pn]!=null&&(this.log("registering service %s for peer routing",l),a.push(d[pn])),d[Xo]!=null&&(this.log("registering service %s for peer discovery",l),d[Xo].addEventListener?.("peer",f=>{this.#e(f)}))}Ix(s)}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 Wt;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 P("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new P("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={}){Lo(e)&&(e=Ve(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=ke([N("/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 Wx(r={}){r.privateKey??=await ou("Ed25519");let e=new g0({...await ax(r),peerId:L6(r.privateKey)});return r.start!==!1&&await e.start(),e}async function Gx(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await w4(r.datastore,r.keychain));let t=Ph(e);return t.datastore=t.datastore??r.datastore,await Wx({...t,...e,start:!1})}async function zR(r={}){let e=r.datastore??new Di,t=r.blockstore??new Ac,n;WR(r.libp2p)?n=r.libp2p:n=await Gx({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new Dd({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[km(),rm()],routers:r.routers??[Km(n),Vm()],metrics:n.metrics});return r.start!==!1&&await o.start(),o}function WR(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return aE(GR);})();
|
|
69
|
+
`).join("")}`)}}ipv6Unsupported(e){if(e.ipv4.attempts===0||e.ipv6.attempts===0)return!1;let t=e.ipv4.attempts===e.ipv4.success,n=e.ipv6.success===0;return t&&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 _r="/multistream/1.0.0";var vy=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Ey=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Sy=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function wp(r,e={}){let t=Qt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new vy("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new Sy("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new Ey("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}var sq=V(`
|
|
70
|
+
`);async function dl(r,e,t){await r.write(e,t)}async function QR(r,e,t){await r.writeV(e,t)}async function aq(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==sq[0])throw e.log.error("Invalid mss message - missing newline",t),new Oe("Missing newline");return t.sublist(0,-1)}async function pa(r,e){let t=await aq(r,e);return M(t.subarray())}async function bp(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return cq(r,e[0],t);let n=wp(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"]',_r,o);let i=V(`${_r}
|
|
71
|
+
`),s=V(`${o}
|
|
72
|
+
`);await QR(n,[i,s],t),t.log.trace("select: reading multistream-select header");let a=await pa(n,t);if(t.log.trace('select: read "%s"',a),a===_r&&(t.log.trace("select: reading protocol response"),a=await pa(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 dl(n,V(`${c}
|
|
73
|
+
`),t),t.log.trace("select: reading protocol response");let l=await pa(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new vi("protocol selection failed")}function cq(r,e,t){let n=r.sink.bind(r),o=r.source,i=!1,s=!1,a=de(),c=!1,l=!1,u=de(),d=!1,h=!1,m=de(),g=wp({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async S=>{let{sink:v}=g.unwrap();await v(async function*(){let N=!1;for await(let W of S){if(l&&await u.promise,c)yield W;else{l=!0,t.log.trace('optimistic: write ["%s", "%s", data(%d)] in sink',_r,e,W.byteLength);let H=`${e}
|
|
74
|
+
`;yield new J(Uint8Array.from([19]),V(`${_r}
|
|
75
|
+
`),Fe(H.length),V(H),W).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',_r,e,W.byteLength),c=!0,l=!1,u.resolve(),w().catch($=>{t.log.error("could not finish optimistic protocol negotiation of %s",e,$)})}N=!0}N||await w()}())};async function w(){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 y()),d||(t.log.trace("optimistic: doing read protocol for %s stream",e),await x())}finally{s=!1,i=!0,a.resolve()}}async function y(){if(l){await u.promise;return}l=!0;try{t.log.trace('optimistic: write ["%s", "%s", data] in source',_r,e),await g.writeV([V(`${_r}
|
|
76
|
+
`),V(`${e}
|
|
77
|
+
`)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',_r,e)}finally{c=!0,l=!1,u.resolve()}}async function x(){if(h){await m.promise;return}h=!0;try{t.log.trace("optimistic: reading multistream select header");let S=await pa(g,t);if(t.log.trace('optimistic: read multistream select header "%s"',S),S===_r&&(S=await pa(g,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',S,e),S!==e)throw new vi("protocol selection failed")}finally{d=!0,h=!1,m.resolve()}}if(r.source=async function*(){await w(),t.log.trace('optimistic: reading data from "%s" stream',e),yield*g.unwrap().source}(),r.closeRead!=null){let S=r.closeRead.bind(r);r.closeRead=async v=>{i||await w().catch(N=>{t.log.error("could not negotiate protocol before close read",N)}),await S(v)}}if(r.closeWrite!=null){let S=r.closeWrite.bind(r);r.closeWrite=async v=>{i||await w().catch(N=>{t.log.error("could not negotiate protocol before close write",N)}),await S(v)}}if(r.close!=null){let S=r.close.bind(r);r.close=async v=>{let N=[];l&&N.push(u.promise),h&&N.push(m.promise),N.length>0?await dt(Promise.all(N),v?.signal):(i=!0,s=!1,a.resolve()),await S(v)}}return{stream:r,protocol:e}}async function xp(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=wp(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await pa(n,t);if(t.log.trace('handle: read "%s"',o),o===_r){t.log.trace('handle: respond with "%s" for "%s"',_r,o),await dl(n,V(`${_r}
|
|
78
|
+
`),t),t.log.trace('handle: responded with "%s" for "%s"',_r,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await dl(n,V(`${o}
|
|
79
|
+
`),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let i=new J(...e.map(s=>po.single(V(`${s}
|
|
80
|
+
`))),V(`
|
|
81
|
+
`));t.log.trace('handle: respond with "%s" for %s',e,o),await dl(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 dl(n,V(`na
|
|
82
|
+
`),t),t.log('handle: responded with "na" for "%s"',o)}}var uq=500,Zw=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";[tb]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new Pp("the connection is being closed");if(this.status==="closed")throw new fl("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new ml("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(uq);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 JR(r){return new Zw(r)}function fq(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return Xw}function hq(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??Yw}function eN(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var Ay=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;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??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,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 ny(`The multiaddr connection is blocked by gater.${e}`)}createInboundAbortSignal(e){let t=Ne([AbortSignal.timeout(this.inboundUpgradeTimeout),e]);return t}async upgradeInbound(e,t){let n=!1,o=this.createInboundAbortSignal(t.signal);try{if(this.metrics.dials?.increment({inbound:!0}),n=await this.components.connectionManager.acceptIncomingConnection(e),!n)throw new oy("Connection denied");await this.shouldBlockConnection("denyInboundConnection",e),await this._performUpgrade(e,"inbound",{...t,signal:o})}catch(i){throw this.metrics.errors?.increment({inbound:!0}),i}finally{o.clear(),n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getPeerId(),o;n!=null&&(o=bt(n),await this.shouldBlockConnection("denyOutboundConnection",o,e));let i="outbound";return t.initiator===!1&&(i="inbound"),await this._performUpgrade(e,i,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),n}}async _performUpgrade(e,t,n){let o,i,s,a,c;this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t);let l=e;if(n?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(e.log("protecting the %s connection",t),l=await u.protect(e,n))}try{if(o=l,n?.skipEncryption!==!0){n?.onProgress?.(new ae(`upgrader:encrypt-${t}-connection`)),{conn:o,remotePeer:i,protocol:c,streamMuxer:a}=await(t==="inbound"?this._encryptInbound(l,n):this._encryptOutbound(l,n));let u={...l,...o};await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",i,u)}else{let u=e.remoteAddr.getPeerId();if(u==null)throw new os(`${t} connection that skipped encryption must have a peer id`);let d=bt(u);c="native",i=d}if(i.equals(this.components.peerId)){let u=new pl("Can not dial self");throw e.abort(u),u}if(s=o,n?.muxerFactory!=null)a=n.muxerFactory;else if(a==null&&this.streamMuxers.size>0){n?.onProgress?.(new ae(`upgrader:multiplex-${t}-connection`));let u=await(t==="inbound"?this._multiplexInbound({...l,...o},this.streamMuxers,n):this._multiplexOutbound({...l,...o},this.streamMuxers,n));a=u.muxerFactory,s=u.stream}}catch(u){throw e.log.error("failed to upgrade inbound connection %s %a - %e",t==="inbound"?"from":"to",e.remoteAddr,u),u}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,u,d;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:g=>{d!=null&&Promise.resolve().then(async()=>{let w=this.components.registrar.getProtocols(),y=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);let{stream:x,protocol:S}=await xp(g,w,{signal:y,log:g.log,yieldBytes:!1});if(d==null)return;d.log("incoming stream opened on %s",S);let v=fq(S,this.components.registrar);if(eN(S,"inbound",d)===v){let W=new Op(`Too many inbound protocol streams for protocol "${S}" - limit ${v}`);throw g.abort(W),W}g.source=x.source,g.sink=x.sink,g.protocol=S,x.closeWrite!=null&&(g.closeWrite=x.closeWrite),x.closeRead!=null&&(g.closeRead=x.closeRead),x.close!=null&&(g.close=x.close),await this.components.peerStore.merge(s,{protocols:[S]}),this.components.metrics?.trackProtocolStream(g,d),this._onStream({connection:d,stream:g,protocol:S})}).catch(async w=>{d.log.error("error handling incoming stream id %s - %e",g.id,w),g.timeline.close==null&&await g.close()})}}),u=async(g,w={})=>{if(l==null)throw new cl("Connection is not multiplexed");d.log.trace("starting new stream for protocols %s",g);let y=await l.newStream();d.log.trace("started new stream %s for protocols %s",y.id,g);try{if(w.signal==null){y.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",g);let W=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);w={...w,signal:W}}y.log.trace("selecting protocol from protocols %s",g);let{stream:x,protocol:S}=await bp(y,g,{...w,log:y.log,yieldBytes:!0});y.log.trace("selected protocol %s",S);let v=hq(S,this.components.registrar,w),N=eN(S,"outbound",d);if(N>=v){let W=new ss(`Too many outbound protocol streams for protocol "${S}" - ${N}/${v}`);throw y.abort(W),W}return await this.components.peerStore.merge(s,{protocols:[S]}),y.source=x.source,y.sink=x.sink,y.protocol=S,x.closeWrite!=null&&(y.closeWrite=x.closeWrite),x.closeRead!=null&&(y.closeRead=x.closeRead),x.close!=null&&(y.close=x.close),this.components.metrics?.trackProtocolStream(y,d),y}catch(x){throw d.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",n==="inbound"?"from":"to",e.maConn.remoteAddr,g,x),y.timeline.close==null&&y.abort(x),x}},Promise.all([l.sink(i.source),i.sink(l.source)]).catch(g=>{d.log.error("error piping data through muxer - %e",g)}));let h=o.timeline;o.timeline=new Proxy(h,{set:(...g)=>(g[1]==="close"&&g[2]!=null&&h.close==null&&(async()=>{try{d.status==="open"&&await d.close()}catch(w){d.log.error("error closing connection after timeline close %e",w)}finally{this.events.safeDispatchEvent("connection:close",{detail:d})}})().catch(w=>{d.log.error("error thrown while dispatching connection:close event %e",w)}),Reflect.set(...g))}),o.timeline.upgraded=Date.now();let m=()=>{throw new cl("Connection is not multiplexed")};return d=JR({remoteAddr:o.remoteAddr,remotePeer:s,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,limits:c,logger:this.components.logger,newStream:u??m,getStreams:()=>l?.streams??[],close:async g=>{await l?.close(g),await o.close(g)},abort:g=>{o.abort(g),l?.abort(g)}}),this.events.safeDispatchEvent("connection:open",{detail:d}),d.__maConnTimeline=h,d}_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 ml("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 xp(e,n,{...t,log:e.log}),s=this.connectionEncrypters.get(i);if(s==null)throw new ll(`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 ll(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 bp(e,n,{...t,log:e.log,yieldBytes:!0}),s=this.connectionEncrypters.get(i);if(s==null)throw new ll(`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 ll(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 bp(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 cl(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 xp(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 cl(String(i))}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};var _y=class extends Le{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new Le,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let u=n(l),d=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return u||d},this.peerId=e.peerId,this.logger=e.logger??Es(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??O3,i=e.nodeInfo?.version??D3,s=this.components=DR({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:i,userAgent:e.nodeInfo?.userAgent??L3(o,i)},logger:this.logger,events:t,datastore:e.datastore??new rc,connectionGater:LR(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",IR(s,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),s.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let u={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(d=>d.multiaddr)};s.events.safeDispatchEvent("peer:discovery",{detail:u})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(s)),this.components.upgrader=new Ay(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,u)=>this.configureComponent(`connection-encryption-${u}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,u)=>this.configureComponent(`stream-muxers-${u}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,inboundStreamProtocolNegotiationTimeout:e.connectionManager?.inboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout}),this.configureComponent("transportManager",new xy(this.components,e.transportManager)),this.configureComponent("connectionManager",new py(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new my(this.components,e.connectionMonitor)),this.configureComponent("registrar",new by(this.components)),this.configureComponent("addressManager",new z3(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,u)=>this.configureComponent(`peer-router-${u}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new yy(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,u)=>this.configureComponent(`content-router-${u}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new gy(this.components,{routers:c})),this.configureComponent("randomWalk",new wy(this.components)),(e.peerDiscovery??[]).forEach((l,u)=>{this.configureComponent(`peer-discovery-${u}`,l(this.components)).addEventListener("peer",h=>{this.#e(h)})}),e.transports?.forEach((l,u)=>{this.components.transportManager.add(this.configureComponent(`transport-${u}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let u=e.services[l],d=u(this.components);if(d==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=d,this.configureComponent(l,d),d[jo]!=null&&(this.log("registering service %s for content routing",l),c.push(d[jo])),d[Wo]!=null&&(this.log("registering service %s for peer routing",l),a.push(d[Wo])),d[ma]!=null&&(this.log("registering service %s for peer discovery",l),d[ma].addEventListener?.("peer",h=>{this.#e(h)}))}OR(s)}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 jr;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 D("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new D("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={}){ks(e)&&(e=bt(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=st([V("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),i=$t(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 tN(r={}){r.privateKey??=await $l("Ed25519");let e=new _y({...await gR(r),peerId:ov(r.privateKey)});return r.start!==!1&&await e.start(),e}async function rN(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await Cw(r.datastore,r.keychain));let t=B3(e);return t.datastore=t.datastore??r.datastore,await tN({...t,...e,start:!1})}async function pq(r={}){let e=r.datastore??new rc,t=r.blockstore??new kf,n;mq(r.libp2p)?n=r.libp2p:n=await rN({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new jm({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[W5(),b5()],routers:r.routers??[i8(n),n8()],metrics:n.metrics});return r.start!==!1&&await o.start(),o}function mq(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return yN(gq);})();
|
|
76
83
|
/*! Bundled license information:
|
|
77
84
|
|
|
78
85
|
pvtsutils/build/index.js:
|
|
@@ -101,6 +108,38 @@ pvtsutils/build/index.js:
|
|
|
101
108
|
*
|
|
102
109
|
*)
|
|
103
110
|
|
|
111
|
+
reflect-metadata/Reflect.js:
|
|
112
|
+
(*! *****************************************************************************
|
|
113
|
+
Copyright (C) Microsoft. All rights reserved.
|
|
114
|
+
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
|
115
|
+
this file except in compliance with the License. You may obtain a copy of the
|
|
116
|
+
License at http://www.apache.org/licenses/LICENSE-2.0
|
|
117
|
+
|
|
118
|
+
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
119
|
+
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
|
120
|
+
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
|
121
|
+
MERCHANTABLITY OR NON-INFRINGEMENT.
|
|
122
|
+
|
|
123
|
+
See the Apache Version 2.0 License for specific language governing permissions
|
|
124
|
+
and limitations under the License.
|
|
125
|
+
***************************************************************************** *)
|
|
126
|
+
|
|
127
|
+
tslib/tslib.js:
|
|
128
|
+
(*! *****************************************************************************
|
|
129
|
+
Copyright (c) Microsoft Corporation.
|
|
130
|
+
|
|
131
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
132
|
+
purpose with or without fee is hereby granted.
|
|
133
|
+
|
|
134
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
135
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
136
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
137
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
138
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
139
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
140
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
141
|
+
***************************************************************************** *)
|
|
142
|
+
|
|
104
143
|
@noble/hashes/esm/utils.js:
|
|
105
144
|
(*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
|
|
106
145
|
|
|
@@ -173,5 +212,31 @@ asn1js/build/index.es.js:
|
|
|
173
212
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
174
213
|
*
|
|
175
214
|
*)
|
|
215
|
+
|
|
216
|
+
@peculiar/x509/build/x509.es.js:
|
|
217
|
+
(*!
|
|
218
|
+
* MIT License
|
|
219
|
+
*
|
|
220
|
+
* Copyright (c) Peculiar Ventures. All rights reserved.
|
|
221
|
+
*
|
|
222
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
223
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
224
|
+
* in the Software without restriction, including without limitation the rights
|
|
225
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
226
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
227
|
+
* furnished to do so, subject to the following conditions:
|
|
228
|
+
*
|
|
229
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
230
|
+
* copies or substantial portions of the Software.
|
|
231
|
+
*
|
|
232
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
233
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
234
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
235
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
236
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
237
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
238
|
+
* SOFTWARE.
|
|
239
|
+
*
|
|
240
|
+
*)
|
|
176
241
|
*/
|
|
177
242
|
return Helia}));
|